MySQL InnoDB引擎 默認會將所有的數據庫InnoDB引擎的表數據存儲在一個共享空間中:ibdata1,當增刪數據庫的時候,ibdata1文件不會自動收縮,單個數據庫的備份也將成為問題。通常只能將數據使用mysqldump 導出,然后再導入解決這個問題。
在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table參數,可以修改InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間。
注意:
如果啟用了innodb_file_per_talbe參數,需要注意的是每張表的表空間內存放的只是數據、索引和插入緩沖Bitmap頁,其他數據如:回滾信息、插入緩沖索引頁、系統事物信息、二次寫緩沖(Double write buffer)等還是放在原來的共享表空間內。同時說明了一個問題:即使啟用了innodb_file_per_table參數共享表空間還是會不斷的增加其大小的。
獨立表空間優缺點:
優點:
1:每個表的數據、索引存放在自己單獨的表空間中。
2:空間可以回收(drop/truncate table 方式操作表空間不能自動回收)
3:對於獨立的表空間、碎片影響的性能要低於共享表空間
缺點:
單表增加比共享表空間方式更大
結論:
共享表空間在Insert操作上有一些優勢,但在其它都沒獨立表空間表現好。
當啟用獨立表空間時,請合理調整一下 innodb_open_files 參數。