系統表空間是變更緩衝區的儲存區域。如果表格建立在系統表空間中,而不是每個表格的表空間或通用表空間中,它也可能包含表格和索引資料。
系統表空間可以有一個或多個資料檔案。依預設,會在資料目錄中建立一個名為 ibdata1
的單一系統表空間資料檔案。系統表空間資料檔案的大小和數量由 innodb_data_file_path
啟動選項定義。如需設定資訊,請參閱系統表空間資料檔案設定。
系統表空間的額外資訊將在本節的以下主題中提供
本節說明如何增加或減少系統表空間的大小。
增加系統表空間的大小
增加系統表空間大小的最簡單方法是將其設定為自動擴展。若要執行此操作,請為 innodb_data_file_path
設定中的最後一個資料檔案指定 autoextend
屬性,然後重新啟動伺服器。例如
innodb_data_file_path=ibdata1:10M:autoextend
指定 autoextend
屬性時,資料檔案會隨著空間需求,以 8MB 增量自動增加大小。innodb_autoextend_increment
變數控制增量大小。
您也可以透過新增其他資料檔案來增加系統表空間大小。若要執行此操作
停止 MySQL 伺服器。
如果
innodb_data_file_path
設定中的最後一個資料檔案是使用autoextend
屬性定義的,請移除它,並修改 size 屬性以反映目前的資料檔案大小。若要判斷要指定的適當資料檔案大小,請檢查檔案系統的檔案大小,並將該值向下捨入至最接近的 MB 值,其中 MB 等於 1024 x 1024 個位元組。將新的資料檔案附加到
innodb_data_file_path
設定,選擇性地指定autoextend
屬性。autoextend
屬性只能針對innodb_data_file_path
設定中的最後一個資料檔案指定。啟動 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 系統上配置原始磁碟分割
若要將原始裝置用於新的伺服器執行個體,請先設定組態檔案,並使用
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 位元組。然後使用
--initialize
或--initialize-insecure
初始化伺服器。InnoDB 會注意到raw
關鍵字並初始化新的分割區,然後停止伺服器。現在重新啟動伺服器。
InnoDB
現在允許進行變更。
在 Windows 上配置原始磁碟分割
在 Windows 系統上,適用於 Linux 和 Unix 系統的相同步驟和相關指南也適用,不同之處在於 Windows 上的 innodb_data_file_path
設定略有不同。例如:
[mysqld]
innodb_data_home_dir=
innodb_data_file_path=//./D::10Graw
//./
對應於 Windows 用於存取實體磁碟機的 \\.\
語法。在上述範例中,D:
是分割區的磁碟機代號。