淺談mysql中各種表空間(tablespaces)的概念

sqysl發表於2020-01-03

mysql中,會涉及到各種表空間的概念,雖然,很多方面這些概念和Oracle有相似性,但也有很多不同的地方,初學者很容易被這些概念弄的暈頭轉向,從而,混淆這些概念的區別和理解,下面,就簡要介紹和說明一下這些表空間的概念。

1.系統表空間(System Tablespace)

   innodb系統表空間包含innodb資料字典(innodb相關物件的後設資料),同時,雙寫緩衝(doublewrite buffer)、改變緩衝(change buffer)和undo日誌(undo logs)等也儲存於系統表空間中。此外,系統表空間
   也包含使用者在該表空間建立的表和索引等資料。由於系統表空間可以儲存多張表,因此,其為一個共享表空間。系統表空間由一個或多個資料檔案組成,預設情況下,其包含一個叫ibdata1的系統資料檔案,位於mysql
   資料目錄(datadir)下。系統表空間資料檔案的位置、大小和數目由innodb_data_home_dir和innodb_data_file_path啟動選項控制。針對不同場景,具體舉例如下:

1)引數innodb_data_home_dir未配置,只配置引數innodb_data_file_path:

innodb_data_file_path=ibdata1:1024M;ibdata2:1024M:autoextend

--注:系統表空間包含ibdata1和ibdata2兩個資料檔案,二者均位於datadir目錄下。

2)引數innodb_data_home_dir和innodb_data_file_path均進行了配置:

innodb_data_home_dir = /data
innodb_data_file_path=ibdata1:1024M;ibdata2:1024M:autoextend

--注:系統表空間包含ibdata1和ibdata2兩個資料檔案,二者均位於/data目錄下。

3)引數innodb_data_home_dir位置為空串,只配置引數innodb_data_file_path:

innodb_data_home_dir =
innodb_data_file_path=/d1/ibdata1:1024M;/d2/ibdata2:1024M:autoextend

--注:系統表空間包含ibdata1和ibdata2兩個資料檔案,ibdata1位於/d1目錄下,ibdata2位於/d2目錄下。

2.表檔案表空間(File-Per-Table Tablespaces)

   表檔案表空間是一個單表表空間,該表建立於自己的資料檔案中,而非建立於系統表空間中。當innodb_file_per_table選項開啟時,表將被建立於表檔案表空間中。否則,innodb將被建立於系統表空間中。
   每個表檔案表空間由一個.ibd資料檔案代表,該檔案預設被建立於相應資料庫目錄中。表檔案表空間支援動態(DYNAMIC)和壓縮(commpressed)行格式。

3.通用表空間(General Tablespaces)
   通用表空間為透過create tablespace語法建立的共享表空間。通用表空間可以建立於mysql資料目錄外的其他表空間,其可以容納多張表,且其支援所有的行格式。
   透過create table tab_name ... tablespace [=] tablespace_name或alter table tab_name tablespace [=] tablespace_name語法將其新增與通用表空間內。

4.undo表空間(undo tablespace)
   undo表空間由一個或多個包含undo日誌的檔案組成。innodb_undo_tablespace配置選項控制undo表空間的數目。undo表空間建立於innodb_undo_directory配置選項確定的位置,該選項典型被用於將undo日誌放於不同的
儲存裝置上。如果該選項沒有確定任何路徑,undo表空間則被預設建立於mysql資料目錄(datadir)下。

5.臨時表空間(Temporary Tablespace)
   使用者建立的臨時表和磁碟內部臨時表建立於共享臨時表空間中。innodb_temp_data_file選項確定臨時表空間資料檔案的相對路徑、名字、大小和屬性等。如果該選項未確定任何值,預設情況下,系統將在
   innodb_data_home_dir確定的目錄下建立一個叫ibtmp1的自動擴充套件的資料檔案,該檔案將稍大於12m。
   mysql伺服器正常關閉或異常終止初始化時,臨時表空間將被移除,並且,mysql伺服器每次啟動時會被重新建立。當臨時表空間被建立時,其被賦予一個動態產生的空間ID(space ID)。如果不能建立臨時表空間,
   mysql伺服器啟動將被拒絕。mysql伺服器異常終止的情況下,臨時表空間將不被移除。這種情況下,DBA能手工移除臨時表空間或重啟mysql伺服器,重啟伺服器過程中,將自動移除和重新建立臨時表空間。
   臨時表空間並不能儲存於裸裝置。
   這裡既然說到了innodb_data_home_dir,那麼,就說說這個選項,該選項確定innodb系統表空間資料檔案目錄路徑的共同部分。innodb_file_per_table開啟時,該選項設定並不影響表檔案表空間的位置。該選項預設值
   為mysql資料目錄。如果你將該選項設定為空串,那麼,你可以為innodb_data_file_path設定一個絕對路徑值。此外,當為innodb_data_home_dir指定一個值時,需要在尾部新增一個斜槓。
   


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2671772/,如需轉載,請註明出處,否則將追究法律責任。

相關文章