mysql InnoDB引擎 共享表空間和獨立表空間(轉載)

PS:innodb這種引擎,與MYISAM引擎的區別很大.特別是它的數據存儲格式等.對於innodb的數據結構,首先要解決兩個概念性的問題: 共享表空間以及獨佔表空間.mysql

一、什麼是共享表空間和獨佔表空間

共享表空間以及獨佔表空間都是針對innodb表的數據存儲而言的,ibdata1爲innodb引擎的存儲數據與索引的數據文件,ib_logfile0與ib_logfile1爲innodb引擎使用的日誌文件
共享表空間: mysql服務器中全部數據庫的innodb表(數據,索引)所有放在一個文件中,默認這個共享表空間的文件路徑在data目錄下. 默認的文件名爲:ibdata1 初始化爲10M.
獨佔表空間: 每個表都將會生成以獨立的文件方式來進行存儲,每個表都有一個.frm表描述文件,還有一個.ibd文件. 其中這個文件包括了單獨一個表的數據內容以及索引內容,默認狀況下它的存儲位置也是在表的位置之中.sql

 

二、二者之間的優缺點

  1. 共享表空間:

    優勢:
    InnoDB在共享表空間模式下,是支持多文件的,用innodb_data_file_path選項能夠配置:
    innodb_data_file_path = /disk1/ibdata1:2G;/disk2/ibdata2:2G:autoextend
    這樣配置就把數據文件分散在了disk1和disk2兩個路徑下,第一個文件固定2G大小,第二個文件初始化2G,能夠自增加.(數據文件大小不受表大小的限制,如一個表能夠分佈在不一樣的數據文件上).數據和文件放在一塊兒方便管理.
    缺點:
    1.全部的數據和索引存放到一個文件中意味着將有一個很常大的文件,雖然能夠把一個大文件分紅多個小文件,可是服務器上的全部庫中的innodb表及索引在表空間中混合存儲,這樣對於一個表作了大量刪除操做後表空間中將會有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間.
    2.共享表空間不會收縮! ibdata1 只會一個勁的增加.對於一臺服務器上面n個庫並且存在刪除庫的的狀況就鬱悶了!數據庫

  2. 獨立表空間:

    在配置文件(my.cnf)中設置: innodb_file_per_table服務器

    優勢:
    1. 每一個表都有自已獨立的表空間.
    2. 每一個表的數據和索引都會存在自已的表空間中.
    3. 能夠實現單表在不一樣的數據庫中移動.
    4. 空間能夠回收(除drop table操做處,表空不能自已回收)
    a) Drop table操做自動回收表空間,若是對於統計分析或是日值表,刪除大量數據後能夠經過:alter table TableName engine=innodb;回縮不用的空間.
    b) 對於使innodb-plugin的Innodb使用turncate table也會使空間收縮.
    c) 對於使用獨立表空間的表,無論怎麼刪除,表空間的碎片不會太嚴重的影響性能,並且還有機會處理.
    缺點:
    單表增長過大,如超過100個G.
    對於單表增加過大的問題,若是使用共享表空間能夠把文件分開,但有一樣有一個問題,若是訪問的範圍過大一樣會訪問多個文件,同樣會比較慢.對於獨立 表空間也有一個解決辦法是:使用分區表,也能夠把那個大的表空間移動到別的空間上而後作一個鏈接.其實從性能上出發,當一個表超過100個G有可能響應也 是較慢了,對於獨立表空間還容易發現問題早作處理.數據結構

     相比較之下,使用獨佔表空間的效率以及性能會更高一點,推薦使用獨立表空間的緣由:app

  1. 從性能上對比共享表空間和獨立表空間:

    共享表空間在Insert操做上少有優點.其它都沒獨立表空間表現好.這裏也有一個TIPS當啓用獨立表空間時,請合理調整一下:innodb_open_files .性能

  2. 從Linux系統處理上出發:

    文件系統fsync一大片更新數據,對系統io衝擊較大.若分隔成多個小數據fsync,可以減小對讀的影響. 同時從mysql代碼,發現mysql保證兩次fsync之間至少有20ms的sleep,這樣的話,若將一次fsync變成屢次小數據操做,應該可以減 少慢查詢的比例.因此對於大量更新操做的系統不太適合用共享表空間spa

轉自(http://wangying.sinaapp.com/archives/1488)日誌

相關文章
相關標籤/搜索