MySQL InnoDB 共享表空間和獨立表空間
前言:學習MySQL的時候總是習慣性的和資料庫進行比較。在學習MySQL InnoDB的儲存結構的時候也免不了跟Oracle進行比較。Oracle的資料儲存有表空間、段、區、塊、資料檔案;MySQL InnoDB的儲存管理也類似,但是MySQL增加了一個共享表空間和獨立表空間的概念;
一、概念
共享表空間: Innodb的所有資料儲存在一個單獨的表空間裡面,而這個表空間可以由很多個檔案組成,一個表可以跨多個檔案存在,所以其大小限制不再是檔案大小的限制,而是其自身的限制。從Innodb的官方文件中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關資料。
獨立表空間:
二、檢視資料庫的表空間
mysql> show variables like 'innodb_data%';
表空間有四個檔案組成:ibdata1、ibdata2、ibdata3、ibdata4,每個檔案的大小為10M,當每個檔案都滿了的時候,ibdata4會自動擴充套件;
當前的儲存空間滿的時候,可以在其他的磁碟新增資料檔案,語法如下:語法如下所示:
pathtodatafile:sizespecification;pathtodatafile:sizespec;.;pathtodatafile:sizespec[:autoextend[:max:sizespecification]]
如果用 autoextend 選項描述最後一個資料檔案,當 InnoDB 用盡所有表自由空間後將會自動擴充最後一個資料檔案,每次增量為 8 MB。示例:
不管是共享表空間和獨立表空間,都會存在innodb_data_file檔案,因為這些檔案不僅僅要存放資料,而且還要充當著類似於ORACLE的UNDO表空間等一些角色。
三、共享表空間優缺點
既然Innodb有共享表空間和獨立表空間兩種型別,那麼這兩種表空間存在肯定都有時候自己的應用的場景,存在即合理。以下是摘自mysql官方的一些介紹:
3.1 共享表空間的優點
表空間可以分成多個檔案存放到各個磁碟,所以表也就可以分成多個檔案存放在磁碟上,表的大小不受磁碟大小的限制(很多文件描述有點問題)。
資料和檔案放在一起方便管理。
3.2 共享表空間的缺點
所有的資料和索引存放到一個檔案,雖然可以把一個大檔案分成多個小檔案,但是多個表及索引在表空間中混合儲存,當資料量非常大的時候,表做了大量刪除操作後表空間中將會有大量的空隙,特別是對於統計分析,對於經常刪除操作的這類應用最不適合用共享表空間。
共享表空間分配後不能回縮:當出現臨時建索引或是建立一個臨時表的操作表空間擴大後,就是刪除相關的表也沒辦法回縮那部分空間了(可以理解為oracle的表空間10G,但是才使用10M,但是作業系統顯示mysql的表空間為10G),進行資料庫的冷備很慢;
四、獨立表空間的優缺點
4.1 獨立表空間的優點
每個表都有自已獨立的表空間,每個表的資料和索引都會存在自已的表空間中,可以實現單表在不同的資料庫中移動。
空間可以回收(除drop table操作處,表空不能自已回收)
Drop table操作自動回收表空間,如果對於統計分析或是日值表,刪除大量資料後可以透過:alter table TableName engine=innodb;回縮不用的空間。
對於使innodb-plugin的Innodb使用turncate table也會使空間收縮。
對於使用獨立表空間的表,不管怎麼刪除,表空間的碎片不會太嚴重的影響效能,而且還有機會處理。
4.2 獨立表空間的缺點
單表增加過大,當單表佔用空間過大時,儲存空間不足,只能從作業系統層面思考解決方法;
五、共享表空間和獨立表空間之間的轉換
5.1 檢視當前資料庫的表空間管理型別
指令碼:show variables like "innodb_file_per_table";
mysql> show variables like "innodb_file_per_table";
ON代表獨立表空間管理,OFF代表共享表空間管理;(檢視單表的表空間管理方式,需要檢視每個表是否有單獨的資料檔案)
5.2 修改資料庫的表空間管理方式
修改innodb_file_per_table的引數值即可,但是修改不能影響之前已經使用過的共享表空間和獨立表空間;
innodb_file_per_table=1 為使用獨佔表空間
innodb_file_per_table=0 為使用共享表空間
5.3共享表空間轉化為獨立表空間的方法(引數innodb_file_per_table=1需要設定)
單個表的轉換操作,指令碼:alter table table_name engine=innodb;
當有大量的表需要操作的時候,先把資料庫匯出,然後刪除資料再進行匯入操作,該操作可以用mysqldump進行操作( )
總結:經過以上操作便完成資料庫的儲存空間的轉換,瞭解技術是為了更好的利用技術,當資料量很小的時候建議使用共享表空間的管理方式。資料量很大的時候建議使用獨立表空間的管理方式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2040189/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL InnoDB 共享表空間和獨立表空間MySql
- MySQL innoDB獨立表空間和共享表空間的優點和缺點介紹MySql
- MySQL 中的共享表空間與獨立表空間如何選擇MySql
- MySQL innodb共享表空間新增表空間資料檔案方法MySql
- MySQL UNDO表空間獨立和截斷MySql
- MySQL 引數- Innodb_File_Per_Table(獨立表空間)MySql
- MySQL InnoDB獨立表空間模式的優點和缺點介紹MySql模式
- MySQL InnoDB表空間加密MySql加密
- mysql之 共享表空間與獨立表空間、frm,MYD,MYI.idb,par檔案說明MySql
- 為Zabbix MySQL設定獨立表空間innodb_file_per_tableMySql
- MySQL InnoDB Undo表空間配置MySql
- mysql無備份恢復-獨立表空間MySql
- mysql收縮共享表空間MySql
- MySQL InnoDB臨時表空間配置MySql
- MySQL 增加InnoDB系統表空間大小MySql
- MySQL InnoDB File-Per-Table表空間MySql
- Mysql表空間MySql
- MySQL5.6開始可以使用獨立表空間, innodb_file_per_table=1MySql
- MySQL innodb表使用表空間物理檔案複製表MySql
- MySQL Innodb表空間解除安裝和遷移案例MySql
- Configure innodb 表空間
- MySQL 減少InnoDB系統表空間的大小MySql
- innodb表空間儲存結構
- 刪除表空間和表空間包含的檔案
- Shell磁碟空間和表空間告警程式
- MySQL 傳輸表空間MySql
- MySQL表空間傳輸MySql
- mysql共享表空間擴容,收縮,遷移MySql
- MySQL InnoDB系統表空間資料檔案配置MySql
- 分析表空間空閒率並收縮表空間
- MySQL共享表空間各個版本之間的演變圖MySql
- Oracle修改預設表空間和預設臨時表空間Oracle
- mysql之 表空間傳輸MySql
- 管理表空間(表空間的屬性)轉貼
- 表空間管理之bigfile表空間設定
- 遷移SYSTEM表空間為本地管理表空間
- 查詢表空間已使用空間和空閒空間的簡單檢視
- Oracle表空間Oracle