1. 程式人生 > >共享表空間VS獨立表空間

共享表空間VS獨立表空間

指定 存儲 ros 增刪 -- -c rollback mysql 5.6 undo

概念:                       共享表空間獨立表空間

【共享表空間】

  又稱為system tablespace系統表空間,a small set of data files (the ibdata files) 。

一、共享表空間ibdata1

1、數據字典(data dictionary):記錄數據庫相關信息

2、doublewrite write buffer:解決部分寫失敗(頁斷裂)

3、insert buffer:內存insert buffer數據,周期寫入共享表空間,防止意外宕機

4、回滾段(rollback segments)

5、undo空間:undo頁

二、關於ibdata1的增長考慮

  影響共享表空間增長的對象:insert buffer、undo空間

1、什麽時候undo暴漲:

  1、大事務為主,例如修改了40萬行才提交

  2、長事務導致的undo持續增加

2、insert buffer空間很大

  1、索引建立過多

  2、很多索引不怎麽使用

  3、索引和主鍵順序嚴重不一致:主鍵的建立選擇有問題

所以===

  ibdata1使用時要註意:在初始化ibdata1時,最好是設置大一些,避免由於高並發突然暴增,影響性能。

三、對ibdata的的設置最佳實踐

註意:初始化設置,後期設置就沒有意義。

1、空間大小

  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

2、undo分離

  undo最容易導致ibdata1暴漲,所以需要將undo分離出去,只能在初始化的時候做,初始化之後就沒有辦法實現undo分離。

處理:

  在初始化實例之前,只需要設置 innodb_undo_tablespaces 參數,默認是等於0即指單獨存放的undo表空間個數為0,也就是undo為分離;建議將該參數設置大於等於3,即可將undo log設置到單獨的undo表空間中。

【獨立表空間】

一、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為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間。

二、獨立表空間的性能優越

1、優點:

  1、每個表都有自已獨立的表空間。

  2、每個表的數據和索引都會存在自已的表空間中。

  3、可以實現單表在不同的數據庫中移動。

  4、空間可以回收

  5、對於使用獨立表空間的表,不管怎麽刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。

2、缺點:

  單表增加比共享空間方式更大。

3、共享表空間在Insert操作上少有優勢,其它都沒獨立表空間表現好。當啟用獨立表空間時,合理調整:innodb_open_files(指定InnoDB一次可以保持打開的.ibd文件的最大數目)。

共享表空間VS獨立表空間