15.3.一、InnoDB引擎表空間:mysql
一、表空間分類:linux
共享表空間: 某一個數據庫的全部的表數據,索引文件所有放在一個文件中,默認這個共享表空間的文件路徑在sql
data目錄下。 默認的文件名爲:ibdata1 初始化爲10M。數據庫
獨佔表空間: 每個表都將會生成以獨立的文件方式來進行存儲,每個表都有一個.frm表描述文件,還有一個.ibd文件。 windows
其中這個文件包括了單獨一個表的數據內容以及索引內容,默認狀況下它的存儲位置也是在表的位置之中。併發
二、共享表空間的優缺點:高併發
(1)優勢:性能
能夠將表空間分紅多個文件存放到各個磁盤上,數據和文件放在一塊兒方便管理。spa
(2)缺點:線程
全部的數據和索引存放到一個文件中意味着將有一個很常大的文件,雖然能夠把一個大文件分紅多個小文件,可是
多個表及索引在表空間中混合存儲,這樣對於一個表作了大量刪除操做後表空間中將會有大量的空隙,特別是對於
統計分析,日值系統這類應用最不適合用共享表空間。
三、獨立表空間的優缺點:
(1)優勢:
1)每一個表都有自已獨立的表空間。
2)每一個表的數據和索引都會存在本身的表空間中。
3)能夠實現單表在不一樣的數據庫中移動。
4)空間能夠回收:
Drop table操做自動回收表空間,若是對於統計分析或是日值表,刪除大量數據後能夠經過:alter table TableName engine=innodb;回縮不用的空間。
對於使innodb-plugin的Innodb使用turncate table也會使空間收縮。
對於使用獨立表空間的表,無論怎麼刪除,表空間的碎片不會太嚴重的影響性能,並且還有機會處理。
(2)缺點:
單表增長過大,如超過100個G;
四、共享表空間存放什麼東西:
當你啓用了innodb_file_per_table,表被存儲在他們本身的表空間裏,可是共享表空間仍然在存儲其它的 InnoDB 內部數據;
(1)數據字典,也就是 InnoDB 表的元數據;
(2)change緩衝區;
(3)雙寫緩衝區;
(4)回滾段;
(5)undo空間;
(6)外鍵約束系統表;
所以,咱們在初始化ibdata1時,最好設置大一些,這樣就能夠避免由於在高併發情景下致使ibdata1急劇增大,大大影響性能。
五、什麼緣由引發ibdata1大小迅速增長:
當設置innodb_file_per_table=1啓用獨立表空間後,ibdata1變很大;
(1)緣由:
1)出現Bug;
2)清除事務的速度跟不上,主要是磁盤IO;
3)大事務undo,即便kill了,空間也不能回收;
(2)如何快速解決:
1)併發innodb_thread_concurrency線程夠不;
2)磁盤IO;
3)不要用32位系統;
4)儘可能減小大事務執行,將大事務進行分拆多個小事務執行;
5)常見的緣由都是有大活動事務執行好久沒有完成或是存在回滾空間中的未清除事務數,能夠
在show engine innodb status\G;的TRANSACTIONS部分查看正在執行的活動事務或History list length值來確認緣由。
六、如何給共享表空間擴容:
(1)情形一:
在同一磁盤中給共享表空間的ibdata1擴容操做;
#innodb_data_home_dir = /data/3306/data
#InnoDB共享表空間的位置,默認是data目錄;
innodb_data_file_path = ibdata1:1000M:autoextend
#設置innodb共享表空間的初始值大小;
1)擴容有兩個注意的地方:
使用ls -lh /data/3306/data/ibdata1 命令查看共享表空間的實際大小;
-rw-rw---- 1 mysql mysql 1.0G 2月 28 22:03 ibdata1
若ibdata1的實際大小沒有超過1000M,那麼擴容的配置文件中直接寫1000M;
若ibdata1的實際大小超過了1000M,則擴容的配置文件中寫實際的精確大小值,如上面這個場景的操做:
innodb_data_file_path = ibdata1:1024M;ibdata2:1000M:autoextend
重啓mysql後,檢查新增的ibdata2是否生效;
(2)情形二:
在不一樣磁盤中給共享表空間的ibdata1擴容操做;
根據情形一中擴容的兩點注意,更改my.cnf配置,在不一樣磁盤中增長一個ibdata3,以下:
innodb_data_file_path=ibdata1:1704M;ibdata2:1000M;/dbdata/ibdata3:100M:autoextend
提示:掛載的磁盤目錄權限必須是改成chown -R mysql.mysql /dbdata/
七、innodb單表的大小:
(1)共享表空間存儲方式:
Innodb的全部數據保存在一個單獨的表空間裏面,而這個表空間能夠由不少個文件組成,一個表
能夠跨多個文件存在,因此其大小限制再也不是文件系統大小的限制,而是mysql軟件的限制。
從Innodb的官方文檔中能夠看到,其表空間的最大限制爲64TB,也就是說,Innodb的單表限制基本上也在
64TB左右了,固然這個大小是包括這個表的全部索引等其餘相關數據。
(2)獨享表空間存儲方式:
每一個表的數據以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統的大小限制了。
15.3.二、MyISAM表空間:
一、存儲方式:
MyISAM:每一個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。
.frm文件存儲表定義。數據文件的擴展名爲.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。
二、myasim單表大小:
MySQL 3.23起,MySQL 的存儲引擎是 MyISAM,單表最大限爲 64PB。
15.3.三、文件系統和磁盤的關係:
文件系統 |
平臺 |
單個文件大小支持 |
支持的最大磁盤 |
ext3 |
linux |
16TB |
32TB |
ext4 |
linux |
16TB |
1EB |
xfs |
linux |
9EB |
18EB |
ntfs |
windows |
無限制 |
無限制 |