又稱爲system tablespace系統表空間,a small set of data files (the ibdata files) 。數據庫
1、共享表空間ibdata1併發
一、數據字典(data dictionary):記錄數據庫相關信息高併發
二、doublewrite write buffer:解決部分寫失敗(頁斷裂)性能
三、insert buffer:內存insert buffer數據,週期寫入共享表空間,防止意外宕機優化
四、回滾段(rollback segments)spa
五、undo空間:undo頁code
2、關於ibdata1的增加考慮對象
影響共享表空間增加的對象:insert buffer、undo空間
一、何時undo暴漲:
一、大事務爲主,例如修改了40萬行才提交
二、長事務致使的undo持續增長
二、insert buffer空間很大
一、索引創建過多
二、不少索引不怎麼使用
三、索引和主鍵順序嚴重不一致:主鍵的創建選擇有問題
因此===
ibdata1使用時要注意:在初始化ibdata1時,最好是設置大一些,避免因爲高併發忽然暴增,影響性能。
3、對ibdata的的設置最佳實踐
注意:初始化設置,後期設置就沒有意義。
一、空間大小
innodb表是按表空間進行存放的,共享表空間ibdata1默認初始化大小是12M。
mysql> show variables like 'innodb_data_file_path'; +-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set, 1 warning (0.47 sec)
初始化:innodb_data_file_path=ibdata1:10G:ibdata2:10G:autoextend
二、undo分離
undo最容易致使ibdata1暴漲,因此須要將undo分離出去,只能在初始化的時候作,初始化以後就沒有辦法實現undo分離。
處理:
在初始化實例以前,只須要設置 innodb_undo_tablespaces 參數,默認是等於0即指單獨存放的undo表空間個數爲0,也就是undo爲分離;建議將該參數設置大於等於3,便可將undo log設置到單獨的undo表空間中。
1、innodb_file_per_table=1
MySQL 5.6.6以前的版本,InnoDB 默認會將全部的數據庫InnoDB引擎的表數據存儲在一個共享空間中:ibdata1,這樣就會讓管理感受很難受,增刪數據庫的時候,ibdata1文件不會自動收縮,單個數據庫的備份也將成爲問題。一般只能將數據使用mysqldump 導出,而後再導入解決這個問題。
在以後的版本,爲了優化上述問題,獨立表空間innodb_file_per_table參數默認開啓:
mysql> show variables like 'innodb_file_per_table'; +-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set, 1 warning (0.05 sec)
能夠修改InnoDB爲獨立表空間模式,每一個數據庫的每一個表都會生成一個數據空間。
2、獨立表空間的性能優越
一、優勢:
一、每一個表都有自已獨立的表空間。
二、每一個表的數據和索引都會存在自已的表空間中。
三、能夠實現單表在不一樣的數據庫中移動。
四、空間能夠回收
五、對於使用獨立表空間的表,無論怎麼刪除,表空間的碎片不會太嚴重的影響性能,並且還有機會處理。
二、缺點:
單表增長比共享空間方式更大。
三、共享表空間在Insert操做上少有優點,其它都沒獨立表空間表現好。當啓用獨立表空間時,合理調整:innodb_open_files(指定InnoDB一次能夠保持打開的.ibd文件的最大數目)。