天天看點

mysql共享表空間和獨立表空間

感覺這篇文章寫的不錯,轉自http://blog.chinaunix.net/uid-677314-id-3060026.html

innodb表的資料結構 

innodb這種引擎,與MYISAM引擎的差別很大。特别是它的資料存儲格式等.

對于innodb的資料結構,首先要解決兩個概念性的問題: 共享表空間以及獨占表空間。

什麼是共享表空間和獨占表空間

共享表空間以及獨占表空間都是針對資料的存儲方式而言的。

共享表空間:  某一個資料庫的所有的表資料,索引檔案全部放在一個檔案中,預設這個共享表空間的檔案路徑在data目錄下。 預設的檔案名為:ibdata1  初始化為10M。

獨占表空間:  每一個表都将會生成以獨立的檔案方式來進行存儲,每一個表都有一個.frm表描述檔案,還有一個.ibd檔案。 其中這個檔案包括了單獨一個表的資料内容以及索引内容,預設情況下它的存儲位置也是在表的位置之中。

兩者之間的優缺點

共享表空間:

優點:

可以放表空間分成多個檔案存放到各個磁盤上(表空間檔案大小不受表大小的限制,如一個表可以分布在不同步的檔案上)。資料和檔案放在一起友善管理。

缺點:

所有的資料和索引存放到一個檔案中以為着将有一個很常大的檔案,雖然可以把一個大檔案分成多個小檔案,但是多個表及索引在表空間中混合存儲,這樣對于一個表做了大量删除操作後表空間中将會有大量的空隙,特别是對于統計分析,日值系統這類應用最不适合用共享表空間。

獨立表空間:

在配置檔案(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。

相比較之下,使用獨占表空間的效率以及性能會更高一點。

共享表空間以及獨占表空間之間的轉化

innodb_file_per_table 通過這個參數來實作的轉化,如果為OFF說明所使用的是獨占表空間【預設情況下,所使用的表空間為共享表空間】

innodb_file_per_table值來進行修改即可,但是對于之前使用過的共享表空間則不會影響,除非手動的去進行修改或者是

innodb_file_per_table=1 為使用獨占表空間

innodb_file_per_table=0 為使用共享表空間

修改獨占空表空間的資料存儲位置

innodb_data_home_dir = "C:\mysql\data\"

innodb_log_group_home_dir = "C:\mysql\data\"

innodb_data_file_path=ibdata1:10M:autoextend

innodb_file_per_table=1

參數說明:

這個設定配置一個可擴充大小的尺寸為10MB的單獨檔案,名為ibdata1。沒有給出檔案的位置,是以預設的是在MySQL的資料目錄内。【對資料來進行初始化的設定】

innodb_data_home_dir              代表為資料庫檔案所存放的目錄

innodb_log_group_home_dir       為日志存放目錄

innodb_file_per_table               是否使用共享以及獨占表空間來

以上的幾個參數必須在一起加入。

對于參數一些注意的地方

InnoDB不建立目錄,是以在啟動伺服器之前請确認”所配置的路徑目錄”的确存在。這對你配置的任何日志檔案目錄來說也是真實的。使用Unix或DOS的mkdir指令來建立任何必需的目錄。

通過把innodb_data_home_dir的值原原本本地部署到資料檔案名,并在需要的地方添加斜杠或反斜杠,InnoDB為每個資料檔案形成目錄路徑。

如果innodb_data_home_dir選項根本沒有在my.cnf中提到,預設值是“dot”目錄 ./,這意思是MySQL資料目錄。

是以在做資料的移植以及備份時,一定要注意資料檔案的完整性.

上一篇: Oracle資料庫
下一篇: oracle資料庫