文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  每個資料表單獨的表空間

17.6.3.2 每個資料表單獨的表空間

每個資料表單獨的表空間包含單一 InnoDB 資料表的資料與索引,並以單一資料檔案的形式儲存在檔案系統中。

本節將在以下主題中說明每個資料表單獨的表空間特性

每個資料表單獨的表空間設定

InnoDB 預設會在每個資料表單獨的表空間中建立資料表。此行為由 innodb_file_per_table 變數控制。停用 innodb_file_per_table 會導致 InnoDB 在系統表空間中建立資料表。

可以在選項檔案中指定 innodb_file_per_table 設定,或使用 SET GLOBAL 陳述式在執行階段設定。在執行階段變更設定需要足夠的權限來設定全域系統變數。請參閱 第 7.1.9.1 節,「系統變數權限」

選項檔案

[mysqld]
innodb_file_per_table=ON

在執行階段使用 SET GLOBAL

mysql> SET GLOBAL innodb_file_per_table=ON;
每個資料表單獨的表空間資料檔案

每個資料表單獨的表空間會在 MySQL 資料目錄下的綱要目錄中,以 .ibd 資料檔案的形式建立。 .ibd 檔案的名稱是資料表 (資料表名稱.ibd)。例如,資料表 test.t1 的資料檔案會在 MySQL 資料目錄下的 test 目錄中建立

mysql> USE test;

mysql> CREATE TABLE t1 (
    ->     id INT PRIMARY KEY AUTO_INCREMENT,
    ->     name VARCHAR(100)
    ->     ) ENGINE = InnoDB;

mysql> EXIT;
$> cd /path/to/mysql/data/test
$> ls
t1.ibd

您可以使用 CREATE TABLE 陳述式的 DATA DIRECTORY 子句,以在資料目錄外部隱式建立每個資料表單獨的表空間資料檔案。如需詳細資訊,請參閱 第 17.6.1.2 節,「在外部建立資料表」

單獨檔案式表空間的優點

相較於系統表空間或通用表空間等共享表空間,單獨檔案式表空間具有以下優點。

  • 在單獨檔案式表空間中建立的資料表,在截斷 (truncate) 或刪除 (drop) 後,磁碟空間會歸還給作業系統。在共享表空間中儲存的資料表,截斷或刪除後會在共享表空間資料檔案中產生可用空間,但這些空間只能用於 InnoDB 資料。換句話說,共享表空間資料檔案在資料表被截斷或刪除後不會縮減大小。

  • 對位於共享表空間的資料表執行資料表複製的 ALTER TABLE 操作可能會增加表空間所佔用的磁碟空間。這類操作可能需要與資料表中的資料加上索引一樣多的額外空間。這些空間不會像單獨檔案式表空間一樣釋放回作業系統。

  • 當對位於單獨檔案式表空間的資料表執行 TRUNCATE TABLE 時,效能會更好。

  • 單獨檔案式表空間資料檔案可以建立在不同的儲存裝置上,以達到 I/O 優化、空間管理或備份的目的。請參閱 第 17.6.1.2 節,「外部建立資料表」

  • 您可以從另一個 MySQL 實例匯入位於單獨檔案式表空間中的資料表。請參閱 第 17.6.1.3 節,「匯入 InnoDB 資料表」

  • 在單獨檔案式表空間中建立的資料表支援與 DYNAMICCOMPRESSED 列格式相關的功能,這些功能系統表空間不支援。請參閱 第 17.10 節,「InnoDB 列格式」

  • 當發生資料損毀、備份或二進位日誌不可用,或 MySQL 伺服器實例無法重新啟動時,儲存在個別表空間資料檔案中的資料表可以節省時間,並提高成功復原的機會。

  • 使用 MySQL Enterprise Backup,可以快速備份或還原在單獨檔案式表空間中建立的資料表,而不會中斷其他 InnoDB 資料表的使用。這對於具有不同備份排程或需要較少備份頻率的資料表很有幫助。有關詳細資訊,請參閱製作部分備份

  • 單獨檔案式表空間允許透過監控表空間資料檔案的大小,來監控檔案系統上的資料表大小。

  • innodb_flush_method 設定為 O_DIRECT 時,常見的 Linux 檔案系統不允許同時寫入單一檔案 (例如共享表空間資料檔案)。因此,將單獨檔案式表空間與此設定一起使用時,可能會提高效能。

  • 共享表空間中的資料表大小受限於 64TB 的表空間大小限制。相比之下,每個單獨檔案式表空間都有 64TB 的大小限制,這為個別資料表的大小增長提供了充足的空間。

單獨檔案式表空間的缺點

相較於系統表空間或通用表空間等共享表空間,單獨檔案式表空間具有以下缺點。

  • 使用單獨檔案式表空間時,每個資料表可能都有未使用的空間,這些空間只能由同一個資料表的列使用,如果管理不當,可能會導致空間浪費。

  • fsync 操作是在多個單獨檔案式資料檔案上執行,而不是在單一共享表空間資料檔案上執行。由於 fsync 操作是針對每個檔案,因此無法合併多個資料表的寫入操作,這可能會導致更高的 fsync 操作總數。

  • mysqld 必須為每個單獨檔案式表空間保持開啟的檔案控制代碼,如果您的單獨檔案式表空間中有大量資料表,可能會影響效能。

  • 當每個資料表都有自己的資料檔案時,需要更多的檔案描述符。

  • 可能會有更多的碎片,這會阻礙 DROP TABLE 和資料表掃描效能。但是,如果碎片得到管理,單獨檔案式表空間可以提高這些操作的效能。

  • 在刪除位於單獨檔案式表空間中的資料表時,會掃描緩衝池,對於大型緩衝池,這可能需要幾秒鐘的時間。掃描是在廣泛的內部鎖定下執行,這可能會延遲其他操作。

  • innodb_autoextend_increment 變數定義自動擴展的共享表空間檔案在填滿時,其擴展的大小增量,但不適用於單獨檔案式表空間檔案,無論 innodb_autoextend_increment 設定如何,單獨檔案式表空間檔案都會自動擴展。單獨檔案式表空間的初始擴展量很小,之後的擴展量會以 4MB 的增量發生。