本文目錄一覽:
- 1、mysql里 enum(F,M,S)什麼意思I
- 2、mysql怎麼查看資料庫中表的大小
- 3、怎麼修改mysql資料庫臨時表空間大小
- 4、北大青鳥設計培訓:Mysql資料庫的設計和優化?
- 5、linux怎麼修改mysql資料庫臨時表空間大小
- 6、如何增加MySQL資料庫中某個資料庫中的數據表的容量
mysql里 enum(F,M,S)什麼意思I
根據用戶定義的枚舉值與分片節點映射文件,直接定位目標分片。
用戶在rule.xml中配置枚舉值文件路徑和分片索引是字元串還是數字,DBLE在啟動時會將枚舉值文件載入到內存中,形成一個映射表
在DBLE的運行過程中,用戶訪問使用這個演算法的表時,WHERE子句中的分片索引值會被提取出來,直接查映射表得到分片編號
與MyCat的類似分片演算法對比
中間件
DBLE
MyCat
分片演算法種類 enum 分區演算法 分片枚舉
兩種中間件的枚舉分片演算法使用上無差別。
開發注意點
【分片索引】1. 整型數字(可以為負數)或字元串((不含=和換行符)
【分片索引】2. 枚舉值之間不能重複
Male=0Male=1
或者
123=1123=2
會導致分片策略載入出錯
【分片索引】3. 不同枚舉值可以映射到同一個分片上
Mr=0Mrs=1Miss=1Ms=1123=0
運維注意點
【擴容】1. 增加枚舉值無需數據再平衡
【擴容】2. 增加一個枚舉值的分片數量數時,需要對局部數據進行遷移
【縮容】1. 減少枚舉值需要數據再平衡
【縮容】2. 減少一個枚舉值的分片數量數時,需要對局部數據進行遷移
配置注意點
【配置項】1. 在 rule.xml 中,可配置項為 property name=”defaultNode” 、property name=”mapFile” 和 property name=”type”
【配置項】2. 在 rule.xml 中配置 property name=”defaultNode” 標籤,非必須配置項,不配置該項的話,用戶的分片索引值沒落在 mapFile 定義的範圍時,DBLE 會報錯;若需要配置,必須為非負整數,用戶的分片索引值沒落在 mapFile 定義的範圍時,DBLE 會路由至這個值的 MySQL 分片
【配置項】3. 在 rule.xml 中配置 property name=”mapFile” 標籤,範圍映射文件的路徑:若在映射文件在 DBLE_HOME/conf 或其中,則可以使用相對路徑的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 時,配置值就可以簡寫為 map/table_map.txt;映射文件在 DBLE_HOME/conf 目錄以外時,需要使用絕對路徑,但這種做法需要考慮用戶許可權等問題,因此不建議把映射文件放在 DBLE_HOME/conf 外。
【配置項】4. 編輯 mapFile 所配置的文件
記錄格式為:枚舉值=分片編號
枚舉值可以是整型數字,或任意字元(除了=和換行符),分片編號必須是非負整型數字,記錄之間以換行分隔,一行僅能有一條記錄,枚舉值不能夠是「DEFAULT_NODE」這個字元串,允許以「//」和「#」在行首來注釋該行
【配置項】5. 在 rule.xml 中配置 property name=”type” 標籤;type 必須為整型;取值為 0 時,mapFile 的枚舉值必須為整型;取值為非 0 時,mapFile 的枚舉值可以是任意字元(除了=和換行符)
mysql怎麼查看資料庫中表的大小
1、查詢整個mysql資料庫,整個庫的大小;單位轉換為MB。
select concat(round(sum(DATA_LENGTH/1024/1024),2),’MB’) as data from information_schema.TABLES
2、查詢mysql資料庫,某個庫的大小;
select concat(round(sum(DATA_LENGTH/1024/1024),2),’MB’) as data
from information_schema.TABLES
where table_schema = ‘testdb’
3、查看庫中某個表的大小;
select concat(round(sum(DATA_LENGTH/1024/1024),2),’MB’) as data
from information_schema.TABLES
where table_schema = ‘testdb’
and table_name = ‘test_a’;
4、查看mysql庫中,test開頭的表,所有存儲大小;
select concat(round(sum(DATA_LENGTH/1024/1024),2),’MB’) as data
from information_schema.TABLES
where table_schema = ‘testdb’
and table_name like ‘test%’;
怎麼修改mysql資料庫臨時表空間大小
以MySQL 8.0 來說,通過查看 8.0 的官方文檔得知,8.0 的臨時表空間分為會話臨時表空間和全局臨時表空間,會話臨時表空間存儲用戶創建的臨時表和當 InnoDB 配置為磁碟內部臨時表的存儲引擎時由優化器創建的內部臨時表,當會話斷開連接時,其臨時表空間將被截斷並釋放回池中;也就是說,在 8.0 中有一個專門的會話臨時表空間,當會話被殺掉後,可以回收磁碟空間;而原來的 ibtmp1 是現在的全局臨時表空間,存放的是對用戶創建的臨時表進行更改的回滾段,在 5.7 中 ibtmp1 存放的是用戶創建的臨時表和磁碟內部臨時表;
也就是在 8.0 和 5.7 中 ibtmp1 的用途發生了變化,5.7 版本臨時表的數據存放在 ibtmp1 中,在 8.0 版本中臨時表的數據存放在會話臨時表空間,如果臨時表發生更改,更改的 undo 數據存放在 ibtmp1 中;
實驗驗證:將之前的查詢結果保存成臨時表,對應會話是 45 號,通過查看對應字典表,可知 45 號會話使用了 temp_8.ibt 這個表空間,通過把查詢保存成臨時表,可以用到會話臨時表空間,如下圖:
下一步殺掉 45 號會話,發現 temp_8.ibt 空間釋放了,變為了初始大小,狀態為非活動的,證明在 mysql8.0 中可以通過殺掉會話來釋放臨時表空間。
總結:在 mysql5.7 時,殺掉會話,臨時表會釋放,但是僅僅是在 ibtmp 文件里標記一下,空間是不會釋放回操作系統的。如果要釋放空間,需要重啟資料庫;在 mysql8.0 中可以通過殺掉會話來釋放臨時表空間。
北大青鳥設計培訓:Mysql資料庫的設計和優化?
在JAVA開發中資料庫的學習也是我們需要了解的,截下來幾篇文章都是關於資料庫的設計和應用,那麼java課程培訓機構廢話不多說開始學習吧! 資料庫的設計 資料庫設計是基礎,資料庫優化是建立在設計基礎之上的。
好的資料庫一定擁有好的設計。
資料庫設計的目標是為用戶和各種應用系統提供一個信息基礎設施和高效的運行環境。
資料庫的三大範式 第一範式1NF:所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。
第二範式2Nf:第二範式在第一範式的基礎之上更進一層。
第二範式需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。
也就是說在一個資料庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張資料庫表中。
第三範式3Nf:所有欄位必須與主鍵直接相關,而不是間接相關。
也可以理解為欄位不要和其他非主鍵欄位相關. 注意:這三個範式儘可能去遵守,不是一定要墨守成規.這只是讓我們設計的表的時候,越靠近這些範式,可以使欄位盡量的減小冗餘.但是有時候也可以根據實際需要小小的違背一下.但是第三範式違反一下還可以接受,但是第一範式別違反. 資料庫設計的步驟 需求分析階段 準確了解與分析用戶需求(包括數據與處理)。
是整個設計過程的基礎,是最困難、最耗費時間的一步。
概念結構設計階段 是整個資料庫設計的關鍵–設計資料庫的E-R模型圖,確認需求信息的正確和完整 Entity_Relationship—實體之間的關係 一對一 一對多 多對一
linux怎麼修改mysql資料庫臨時表空間大小
先來說說臨時表的概念。 臨時表顧名思義,就是臨時的,用完銷毀掉的表。 數據既可以保存在臨時的文件系統上,也可以保存在固定的磁碟文件系統上。 臨時表有下面幾種:
1全局臨時表
這種臨時表從資料庫實例啟動後開始生效,在資料庫實例銷毀後失效。在MySQL裡面這種臨時表對應的是內存表,即memory引擎。
2會話級別臨時表
這種臨時表在用戶登錄系統成功後生效,在用戶退出時失效。在MySQL里的臨時表指的就是以 create temporary table 這樣的關鍵詞創建的表。
3事務級別臨時表
這種臨時表在事務開始時生效,事務提交或者回滾後失效。 在MySQL裡面沒有這種臨時表,必須利用會話級別的臨時表間接實現。
4檢索級別臨時表
這種臨時表在SQL語句執行之間產生,執行完畢後失效。 在MySQL裡面這種臨時表不是很固定,跟隨MySQL默認存儲引擎來變化。比如默認存儲引擎是MyISAM,臨時表的引擎就是MyISAM,並且文件生成形式以及數據運作形式和MyISAM一樣,只是數據保存在內存里;如果默認引擎是INNODB,那麼臨時表的引擎就是INNODB,此時它的所有信息都保存在共享表空間ibdata裡面。
MySQL 5.7對於InnoDB存儲引擎的臨時表空間做了優化。在MySQL 5.7之前,INNODB引擎的臨時表都保存在ibdata裡面,而ibdata的貪婪式磁碟佔用導致臨時表的創建與刪除對其他正常表產生非常大的性能影響。在MySQL5.7中,對於臨時表做了下面兩個重要方面的優化:
MySQL5.7 把臨時表的數據以及回滾信息(僅限於未壓縮表)從共享表空間裡面剝離出來,形成自己單獨的表空間,參數為innodb_temp_data_file_path。
在MySQL5.7 中把臨時表的相關檢索信息保存在系統信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版本想要查看臨時表的系統信息是沒有太好的辦法。
需要注意的一點就是,雖然INNODB臨時表有自己的表空間,但是目前還不能自己定義臨時表空間文件的保存路徑,只能是繼承innodb_data_home_dir。此時如果想要拿其他的磁碟,比如內存檔來充當臨時表空間的保存地址,只能用老辦法,做軟鏈。舉個小例子:
我現在用的OS是 Ubuntu12.X,想用tmpfs文件系統充當臨時表空間,
root@ytt-master-VirtualBox:/usr/local/mysql/data# ln -s/run/shm/ /usr/local/mysql/data/tmp_space2
root@ytt-master-VirtualBox:/usr/local/mysql/data#ls -l | grep ‘shm’
lrwxrwxrwx1 root root 9 Nov 13 10:28tmp_space2 – /run/shm/
然後把
innodb_temp_data_file_path=tmp_space2/ibtmp2:200M:autoextend
添加到my.cnf里的[mysqld]下面一行
重啟MySQL服務後,
mysqlselect @@innodb_temp_data_file_path\G
***************************1. row ***************************
@@innodb_temp_data_file_path:tmp_space2/ibtmp2:200M:autoextend
1 rowin set (0.00 sec)
先寫一個批量創建臨時表的存儲過程:
DELIMITER$$
USE`t_girl`$$
DROPPROCEDURE IF EXISTS `sp_create_temporary_table`$$
CREATEDEFINER=`root`@`localhost` PROCEDURE `sp_create_temporary_table`(
IN f_cnt INT UNSIGNED )
BEGIN
DECLARE i INT UNSIGNED DEFAULT 1;
WHILE i = f_cnt
DO
SET @stmt = CONCAT(‘create temporarytable tmp’,i,’ ( id int, tmp_desc varchar(60));’);
PREPARE s1 FROM @stmt;
EXECUTE s1;
SET i = i + 1;
END WHILE;
DROP PREPARE s1;
END$$
DELIMITER;
現在來創建10張臨時表:
mysqlcall sp_create_temporary_table(10);
QueryOK, 0 rows affected (0.07 sec)
如果在以前,我們只知道創建了10張臨時表,但是只能憑記憶或者手工記錄下來臨時表的名字等信息。
現在可以直接從數據字典裡面檢索相關數據。
mysql select * frominformation_schema.innodb_temp_table_info;
+———-+————–+——–+——-+———————-+—————+
|TABLE_ID | NAME | N_COLS | SPACE| PER_TABLE_TABLESPACE | IS_COMPRESSED |
+———-+————–+——–+——-+———————-+—————+
| 56 | #sql1705_2_9 | 5 | 36 | FALSE | FALSE |
| 55 | #sql1705_2_8 | 5 | 36 | FALSE |FALSE |
| 54 | #sql1705_2_7 | 5 | 36 | FALSE | FALSE |
| 53 | #sql1705_2_6 | 5 | 36 | FALSE | FALSE |
| 52 | #sql1705_2_5 | 5 | 36 | FALSE |FALSE |
| 51 | #sql1705_2_4 | 5 | 36 | FALSE | FALSE |
| 50 | #sql1705_2_3 | 5 | 36 | FALSE | FALSE |
| 49 | #sql1705_2_2 | 5 | 36 | FALSE |FALSE |
| 48 | #sql1705_2_1 | 5 | 36 | FALSE | FALSE |
| 47 | #sql1705_2_0 | 5 | 36 | FALSE | FALSE |
+———-+————–+——–+——-+———————-+—————+
10rows in set (0.00 sec)
功能性我就寫到這裡,大家性能方面如果有興趣可以找時間去測試。
如何增加MySQL資料庫中某個資料庫中的數據表的容量
建表時自己定義表結構更改就行了MySQL資料庫的最大有效表尺寸通常是由操作系統對文件大小的限制決定的,而不是由MySQL內部限制決定的。修改表結構
原創文章,作者:HUVT5,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127937.html