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


17.6.3.1 系統表空間

系統表空間是變更緩衝區的儲存區域。如果表格建立在系統表空間中,而不是每個表格的表空間或通用表空間中,它也可能包含表格和索引資料。

系統表空間可以有一個或多個資料檔案。依預設,會在資料目錄中建立一個名為 ibdata1 的單一系統表空間資料檔案。系統表空間資料檔案的大小和數量由 innodb_data_file_path 啟動選項定義。如需設定資訊,請參閱系統表空間資料檔案設定

系統表空間的額外資訊將在本節的以下主題中提供

調整系統表空間的大小

本節說明如何增加或減少系統表空間的大小。

增加系統表空間的大小

增加系統表空間大小的最簡單方法是將其設定為自動擴展。若要執行此操作,請為 innodb_data_file_path 設定中的最後一個資料檔案指定 autoextend 屬性,然後重新啟動伺服器。例如

innodb_data_file_path=ibdata1:10M:autoextend

指定 autoextend 屬性時,資料檔案會隨著空間需求,以 8MB 增量自動增加大小。innodb_autoextend_increment 變數控制增量大小。

您也可以透過新增其他資料檔案來增加系統表空間大小。若要執行此操作

  1. 停止 MySQL 伺服器。

  2. 如果 innodb_data_file_path 設定中的最後一個資料檔案是使用 autoextend 屬性定義的,請移除它,並修改 size 屬性以反映目前的資料檔案大小。若要判斷要指定的適當資料檔案大小,請檢查檔案系統的檔案大小,並將該值向下捨入至最接近的 MB 值,其中 MB 等於 1024 x 1024 個位元組。

  3. 將新的資料檔案附加到 innodb_data_file_path 設定,選擇性地指定 autoextend 屬性。autoextend 屬性只能針對 innodb_data_file_path 設定中的最後一個資料檔案指定。

  4. 啟動 MySQL 伺服器。

例如,這個表空間有一個自動擴展的資料檔案。

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

假設資料檔案隨著時間增長到 988MB。以下是修改 innodb_data_file_path 設定,以反映目前的資料檔案大小,並指定一個新的 50MB 自動擴展資料檔案後的設定。

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

新增資料檔案時,請勿指定現有的檔案名稱。InnoDB 會在您啟動伺服器時建立並初始化新的資料檔案。

注意

您無法透過變更大小屬性來增加現有系統表空間資料檔案的大小。例如,將 innodb_data_file_path 設定從 ibdata1:10M:autoextend 變更為 ibdata1:12M:autoextend 會在啟動伺服器時產生以下錯誤:

[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system
data file './ibdata1' is of a different size 640 pages (rounded down to MB) than
specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!

此錯誤表示現有的資料檔案大小(以 InnoDB 頁面表示)與組態檔案中指定的資料檔案大小不同。如果您遇到此錯誤,請還原先前的 innodb_data_file_path 設定,並參閱系統表空間調整大小的說明。

縮減 InnoDB 系統表空間的大小

不支援縮減現有系統表空間的大小。要實現較小系統表空間的唯一方法是將您的資料從備份還原到使用所需系統表空間大小組態建立的新 MySQL 執行個體。

有關建立備份的資訊,請參閱第 17.18.1 節「InnoDB 備份」

有關為新系統表空間設定資料檔案的資訊,請參閱系統表空間資料檔案組態

為了避免大型系統表空間,請考慮使用單表表空間或通用表空間來儲存您的資料。單表表空間是預設的表空間類型,在建立 InnoDB 表時會隱式使用。與系統表空間不同,單表表空間在截斷或刪除時會將磁碟空間還給作業系統。有關更多資訊,請參閱第 17.6.3.2 節「單表表空間」。通用表空間是多表表空間,也可以用作系統表空間的替代方案。請參閱第 17.6.3.3 節「通用表空間」

將原始磁碟分割用於系統表空間

原始磁碟分割可以用作系統表空間資料檔案。這項技術可在 Windows 以及某些 Linux 和 Unix 系統上啟用非緩衝 I/O,而不會產生檔案系統的額外負擔。請測試使用及不使用原始分割區的情況,以驗證它們是否能提高您系統的效能。

使用原始磁碟分割時,請確保執行 MySQL 伺服器的使用者 ID 對該分割區具有讀取和寫入權限。例如,如果以 mysql 使用者身分執行伺服器,則 mysql 必須能夠讀取和寫入該分割區。如果使用 --memlock 選項執行伺服器,則伺服器必須以 root 身分執行,因此 root 必須能夠讀取和寫入該分割區。

以下描述的程序涉及選項檔案修改。有關更多資訊,請參閱第 6.2.2.2 節「使用選項檔案」

在 Linux 和 Unix 系統上配置原始磁碟分割
  1. 若要將原始裝置用於新的伺服器執行個體,請先設定組態檔案,並使用 raw 關鍵字設定 innodb_data_file_path。例如:

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw

    分割區的大小必須至少與您指定的大小相同。請注意,InnoDB 中的 1MB 是 1024 × 1024 位元組,而磁碟規格中的 1MB 通常表示 1,000,000 位元組。

  2. 然後使用 --initialize--initialize-insecure 初始化伺服器。InnoDB 會注意到 raw 關鍵字並初始化新的分割區,然後停止伺服器。

  3. 現在重新啟動伺服器。InnoDB 現在允許進行變更。

在 Windows 上配置原始磁碟分割

在 Windows 系統上,適用於 Linux 和 Unix 系統的相同步驟和相關指南也適用,不同之處在於 Windows 上的 innodb_data_file_path 設定略有不同。例如:

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=//./D::10Graw

//./ 對應於 Windows 用於存取實體磁碟機的 \\.\ 語法。在上述範例中,D: 是分割區的磁碟機代號。