新聞中心
共享表空間默認(rèn)是開啟的,默認(rèn)文件名為ibdata1,保存在當(dāng)前mysql實(shí)例的數(shù)據(jù)目錄下(當(dāng)然你也可以指定其它目錄,建議就還是不指定存儲(chǔ)路徑了),文件默認(rèn)只有一個(gè),大小是12M。

正安網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),正安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為正安1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的正安做網(wǎng)站的公司定做!
一.什么是共享表空間和獨(dú)占表空間
共享表空間以及獨(dú)占表空間都是針對(duì)數(shù)據(jù)的存儲(chǔ)方式而言的。
共享表空間: 某一個(gè)數(shù)據(jù)庫(kù)的所有的表數(shù)據(jù),索引文件全部放在一個(gè)文件中,默認(rèn)這個(gè)共享表空間的文件路徑在data目錄下。 默認(rèn)的文件名為:ibdata1 初始化為10M。
獨(dú)占表空間: 每一個(gè)表都將會(huì)生成以獨(dú)立的文件方式來(lái)進(jìn)行存儲(chǔ),每一個(gè)表都有一個(gè).frm表描述文件,還有一個(gè).ibd文件。 其中這個(gè)文件包括了單獨(dú)一個(gè)表的數(shù)據(jù)內(nèi)容以及索引內(nèi)容,默認(rèn)情況下它的存儲(chǔ)位置也是在表的位置之中。
兩者之間的優(yōu)缺點(diǎn)
共享表空間:
優(yōu)點(diǎn):
可以將表空間分成多個(gè)文件存放到各個(gè)磁盤上。數(shù)據(jù)和文件放在一起方便管理。
缺點(diǎn):
所有的數(shù)據(jù)和索引存放到一個(gè)文件中以為著將有一個(gè)很常大的文件,雖然可以把一個(gè)大文件分成多個(gè)小文件,但是多個(gè)表及索引在表空間中混合存儲(chǔ),這樣對(duì)于一個(gè)表做了大量刪除操作后表空間中將會(huì)有大量的空隙,特別是對(duì)于統(tǒng)計(jì)分析,日值系統(tǒng)這類應(yīng)用最不適合用共享表空間。
獨(dú)立表空間:在配置文件(my.cnf)中設(shè)置: innodb_file_per_table
優(yōu)點(diǎn):
1.每個(gè)表都有自已獨(dú)立的表空間。
2.每個(gè)表的數(shù)據(jù)和索引都會(huì)存在自己的表空間中。
3.可以實(shí)現(xiàn)單表在不同的數(shù)據(jù)庫(kù)中移動(dòng)。
4.空間可以回收
a) Drop table操作自動(dòng)回收表空間,如果對(duì)于統(tǒng)計(jì)分析或是日值表,刪除大量數(shù)據(jù)后可以通過:alter table TableName engine=innodb;回縮不用的空間。
b) 對(duì)于使innodb-plugin的Innodb使用turncate table也會(huì)使空間收縮。
c) 對(duì)于使用獨(dú)立表空間的表,不管怎么刪除,表空間的碎片不會(huì)太嚴(yán)重的影響性能,而且還有機(jī)會(huì)處理。
缺點(diǎn):
單表增加過大,如超過100個(gè)G
二.共享表空間存放什么東西
當(dāng)你啟用了 innodb_file_per_table,表被存儲(chǔ)在他們自己的表空間里,但是共享表空間仍然在存儲(chǔ)其它的 InnoDB 內(nèi)部數(shù)據(jù):
(1)數(shù)據(jù)字典,也就是 InnoDB 表的元數(shù)據(jù)
(2)change緩沖區(qū)
(3)雙寫緩沖區(qū)
(4)回滾段
(5)undo空間
(6)外鍵約束系統(tǒng)表
因此,我們?cè)诔跏蓟痠bdata1時(shí),最好設(shè)置大一些,這樣就可以避免因?yàn)樵诟卟l(fā)情景下導(dǎo)致ibdata1急劇增大,大大影響性能。
三.什么原因引起ibdata1大小迅速增加
(1)出現(xiàn)Bug
(2)清除事務(wù)的速度跟不上,主要是磁盤IO
(3)大事務(wù)undo,即使kill了,空間也不能回收
主要從如下方面改進(jìn):
(1)并發(fā)purge線程夠不
(2)磁盤IO
(3)不要用32位系統(tǒng)
(4)盡量減少大事務(wù)執(zhí)行,將大事務(wù)進(jìn)行分拆多個(gè)小事務(wù)執(zhí)行
當(dāng)設(shè)置innodb_file_per_table=1啟用獨(dú)立表空間后,ibdata1變很大,常見的原因都是有大活動(dòng)事務(wù)執(zhí)行很久沒有完成或是存在回滾空間中的未清除事務(wù)數(shù)。
可以在show engine innodb status的TRANSACTIONS部分查看正在執(zhí)行的活動(dòng)事務(wù)或History list length值來(lái)確認(rèn)原因。
四.如何給共享表空間擴(kuò)容
場(chǎng)景一:在同一磁盤中給共享表空間的ibdata1擴(kuò)容操作: 檢查my.cnf文件配置的ibdata1大小初始值為1000M,自動(dòng)增長(zhǎng),如下: innodb_data_home_dir=/apps/dbdat/mariadb10_data3306 innodb_data_file_path=ibdata1:1000M:autoextend 檢查數(shù)據(jù)文件目錄中ibdata1實(shí)際文件大小為1786773504,如下: -rw-r–r– 1 apps apps 1786773504 Jul 27 21:29 ibdata1 這里擴(kuò)容有兩個(gè)注意的地方: 1.若ibdata1的實(shí)際大小沒有超過1000M,那么擴(kuò)容的配置文件中直接寫1000M; 2.若ibdata1的實(shí)際大小超過了1000M,則擴(kuò)容的配置文件中寫實(shí)際的精確大小值,如上面這個(gè)場(chǎng)景的操作: (product)root@localhost [(none)]> select 1786773504/1024/1024; +———————-+ | 1786773504/1024/1024 | +———————-+ | 1704.00000000 | +———————-+ 1 row in set (0.00 sec) 更改my.cnf配置,增加一個(gè)ibdata2,如下 innodb_data_file_path=ibdata1:1704M;ibdata2:1000M:autoextend ——這里注意格式,分號(hào)和冒號(hào) 重啟MySQL后,檢查新增的ibdata2是否生效,下面表示已有生效。 [apps@mvxl0782 mariadb10_data3306]$ ls -l|grep ibd -rw-r–r– 1 apps apps 1786773504 Jul 31 18:44 ibdata1 -rw-rw—- 1 apps apps 1048576000 Jul 31 18:44 ibdata2
場(chǎng)景二:在不同磁盤中給共享表空間的ibdata1擴(kuò)容操作: 根據(jù)場(chǎng)景一中擴(kuò)容的兩點(diǎn)注意,更改my.cnf配置,在不同磁盤中增加一個(gè)ibdata3,如下 innodb_data_file_path=ibdata1:1704M;ibdata2:1000M;/apps2/dbdat/ibdata3:100M:autoextend 重啟mysql時(shí),報(bào)下面錯(cuò):
160731 18:53:29 mysqld_safe mysqld from pid file /apps/dbdat/mariadb10_data3306/mysql.pid ended
160731 18:53:38 mysqld_safe Starting mysqld daemon with databases from /apps/dbdat/mariadb10_data3306
160731 18:53:38 [Note] /apps/svr/mariadb10/bin/mysqld (mysqld 10.0.20-MariaDB-log) starting as process 15681 ...
2016-07-31 18:53:38 7f83161d9760 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in
future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator. 160731 18:53:38 [Note] InnoDB: Using mutexes to ref count buffer pool pages 160731 18:53:38 [Note] InnoDB: The InnoDB memory heap is disabled 160731 18:53:38 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 160731 18:53:38 [Note] InnoDB: Memory barrier is not used 160731 18:53:38 [Note] InnoDB: Compressed tables use zlib 1.2.3 160731 18:53:38 [Note] InnoDB: Using Linux native AIO 160731 18:53:38 [Note] InnoDB: Using CPU crc32 instructions 160731 18:53:38 [Note] InnoDB: Initializing buffer pool, size = 21.0G 160731 18:53:39 [Note] InnoDB: Completed initialization of buffer pool 2016-07-31 18:53:39 7f83161d9760 InnoDB: Operating system error number 2 in a file operation. InnoDB: The error means the system cannot find the path specified. InnoDB: If you are installing InnoDB, remember that you must create InnoDB: directories yourself, InnoDB does not create them. 160731 18:53:39 [ERROR] InnoDB: File /apps/dbdat/mariadb10_data3306//apps2/dbdat/ibdata3: 'create' returned OS error 71. Cannot cont inue operation 160731 18:53:39 mysqld_safe mysqld from pid file /apps/dbdat/mariadb10_data3306/mysql.pid ende
從上面看到mysql實(shí)際上是識(shí)別 /apps/dbdat/mariadb10_data3306//apps2/dbdat/ibdata3文件,由于innodb_data_home_dir=/apps/dbdat/mariadb10_data3306有設(shè)置數(shù)據(jù)文件目錄,所以將設(shè)置重新改為如下: innodb_data_home_dir= innodb_data_file_path=/apps/dbdat/mariadb10_data3306/ibdata1:1704M;/apps/dbdat/mariadb10_data3306/ibdata2:1000M;/apps2/dbdat/ibdata3:100M:autoextend
———這里注意格式,分號(hào)和冒號(hào)
查看新磁盤中下的ibdat3文件已有產(chǎn)生,如下:
[apps@mvxl0782 mariadb10_data3306]$ cd /apps2/dbdat
[apps@mvxl0782 dbdat]$ ls -lt
total 102404
-rw-rw---- 1 apps apps 104857600 Jul 31 19:00 ibdata3
網(wǎng)站標(biāo)題:MySQL共享表空間擴(kuò)容具體方法
當(dāng)前網(wǎng)址:http://www.5511xx.com/article/codpejh.html


咨詢
建站咨詢
