淺析mysql 共享表空間與獨享表空間以及他們之間的轉化

 

 
 
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說明所使用的是獨佔表空間【默認狀況下,所使用的表空間爲共享表空間】

image

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數據目錄。
相關文章
相關標籤/搜索