真或假的系統變數可以在伺服器啟動時透過命名啟用,或使用
--skip-
前綴停用。例如,若要啟用或停用InnoDB
自適應雜湊索引,您可以在命令列上使用--innodb-adaptive-hash-index
或--skip-innodb-adaptive-hash-index
,或在選項檔案中使用innodb_adaptive_hash_index
或skip_innodb_adaptive_hash_index
。有些變數描述會提到 「啟用」 或 「停用」 變數。這些變數可以使用
SET
陳述式將它們設定為ON
或1
來啟用,或將它們設定為OFF
或0
來停用。布林變數可以在啟動時設定為值ON
、TRUE
、OFF
和FALSE
(不區分大小寫),以及1
和0
。請參閱第 6.2.2.4 節「程式選項修飾詞」。採用數值的系統變數可以在命令列上指定為
--
,或在選項檔案中指定為var_name
=value
。var_name
=value
許多系統變數可以在執行階段變更(請參閱第 7.1.9.2 節「動態系統變數」)。
如需關於
GLOBAL
和SESSION
變數範圍修飾詞的資訊,請參閱SET
陳述式文件。某些選項會控制
InnoDB
資料檔案的位置和版面配置。第 17.8.1 節「InnoDB 啟動設定」說明如何使用這些選項。有些您可能一開始不會使用的選項,有助於根據機器容量和資料庫工作負載調整
InnoDB
效能特性。如需關於指定選項和系統變數的詳細資訊,請參閱第 6.2.2 節「指定程式選項」。
表 17.23 InnoDB 選項與變數參考
InnoDB 命令選項
-
命令列格式 --innodb-status-file[={OFF|ON}]
類型 布林值 預設值 OFF
--innodb-status-file
啟動選項控制InnoDB
是否在資料目錄中建立名為innodb_status.
的檔案,並大約每 15 秒將pid
SHOW ENGINE INNODB STATUS
的輸出寫入其中。innodb_status.
檔案預設不會建立。若要建立它,請使用pid
--innodb-status-file
選項啟動 mysqld。InnoDB
在伺服器正常關閉時會移除該檔案。如果發生異常關閉,則可能必須手動移除狀態檔案。--innodb-status-file
選項旨在暫時使用,因為產生SHOW ENGINE INNODB STATUS
的輸出可能會影響效能,而且innodb_status.
檔案隨著時間的推移可能會變得非常大。pid
如需相關資訊,請參閱第 17.17.2 節,〈啟用 InnoDB 監視器〉。
InnoDB 系統變數
-
命令列格式 --innodb-adaptive-flushing[={OFF|ON}]
系統變數 innodb_adaptive_flushing
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定是否根據工作負載動態調整
InnoDB
緩衝池中髒頁的刷新速率。動態調整刷新速率旨在避免 I/O 活動爆發。此設定預設為啟用。如需更多資訊,請參閱第 17.8.3.5 節,〈設定緩衝池刷新〉。如需一般 I/O 調整建議,請參閱第 10.5.8 節,〈最佳化 InnoDB 磁碟 I/O〉。 -
命令列格式 --innodb-adaptive-flushing-lwm=#
系統變數 innodb_adaptive_flushing_lwm
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 10
最小值 0
最大值 70
定義低水位標記,代表啟用自適應刷新時 重做日誌容量的百分比。如需更多資訊,請參閱第 17.8.3.5 節,〈設定緩衝池刷新〉。
-
命令列格式 --innodb-adaptive-hash-index[={OFF|ON}]
系統變數 innodb_adaptive_hash_index
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
InnoDB
自適應雜湊索引是否啟用或停用。根據您的工作負載,可能需要動態啟用或停用自適應雜湊索引,以改善查詢效能。由於自適應雜湊索引可能不適用於所有工作負載,因此請使用實際的工作負載,執行啟用和停用該索引的基準測試。如需詳細資訊,請參閱第 17.5.3 節,〈自適應雜湊索引〉。此變數預設為停用。您可以使用
SET GLOBAL
陳述式修改此參數,而無需重新啟動伺服器。在執行階段變更設定需要具備足夠的權限來設定全域系統變數。請參閱第 7.1.9.1 節,〈系統變數權限〉。您也可以在伺服器啟動時使用--innodb-adaptive-hash-index
來啟用它。停用自適應雜湊索引會立即清空雜湊表。正常操作可以在清空雜湊表的同時繼續,而且執行使用雜湊表的查詢會改為直接存取索引 B 樹。當重新啟用自適應雜湊索引時,會在正常操作期間再次填入雜湊表。
在 MySQL 8.4 之前,此選項預設為啟用。
innodb_adaptive_hash_index_parts
命令列格式 --innodb-adaptive-hash-index-parts=#
系統變數 innodb_adaptive_hash_index_parts
範圍 全域 動態 否 SET_VAR
提示適用否 類型 數值 預設值 8
最小值 1
最大值 512
分割自適應雜湊索引搜尋系統。每個索引都繫結到特定的分割區,而每個分割區都受到個別閂鎖的保護。
自適應雜湊索引搜尋系統預設分割為 8 個部分。最大設定為 512。
如需相關資訊,請參閱第 17.5.3 節,〈自適應雜湊索引〉。
innodb_adaptive_max_sleep_delay
命令列格式 --innodb-adaptive-max-sleep-delay=#
系統變數 innodb_adaptive_max_sleep_delay
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 150000
最小值 0
最大值 1000000
單位 微秒 允許
InnoDB
根據目前的工作負載自動調整innodb_thread_sleep_delay
的值。任何非零值都會啟用innodb_thread_sleep_delay
值的自動動態調整,最高可達innodb_adaptive_max_sleep_delay
選項中指定的最大值。此值表示微秒數。此選項在繁忙的系統中非常有用,具有超過 16 個InnoDB
線程。(實際上,它對於具有數百或數千個同時連線的 MySQL 系統最有價值。)如需更多資訊,請參閱第 17.8.4 節,〈設定 InnoDB 的線程並行性〉。
-
命令列格式 --innodb-autoextend-increment=#
系統變數 innodb_autoextend_increment
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 64
最小值 1
最大值 1000
單位 MB 當自動擴展的
InnoDB
系統表空間檔案空間滿時,每次擴展的大小增量(以 MB 為單位)。預設值為 64。相關資訊請參閱系統表空間資料檔案配置和調整系統表空間大小。innodb_autoextend_increment
設定不影響單表檔案表空間檔案或通用表空間檔案。無論innodb_autoextend_increment
設定為何,這些檔案都會自動擴展。初始擴展量較小,之後的擴展會以 4MB 為增量進行。 -
命令列格式 --innodb-autoinc-lock-mode=#
系統變數 innodb_autoinc_lock_mode
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 2
有效值 0
1
2
用於產生自動遞增值的鎖定模式。允許的值為 0、1 或 2,分別對應傳統、連續或交錯模式。
預設設定為 2(交錯),以便與基於行的複寫相容。
如需瞭解每個鎖定模式的特性,請參閱InnoDB AUTO_INCREMENT 鎖定模式。
innodb_background_drop_list_empty
命令列格式 --innodb-background-drop-list-empty[={OFF|ON}]
系統變數 innodb_background_drop_list_empty
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用
innodb_background_drop_list_empty
除錯選項有助於避免測試案例失敗,方法是延遲資料表的建立,直到背景刪除列表為空。例如,如果測試案例 A 將資料表t1
放入背景刪除列表,則測試案例 B 會等到背景刪除列表為空後,才會建立資料表t1
。-
命令列格式 --innodb-buffer-pool-chunk-size=#
系統變數 innodb_buffer_pool_chunk_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 134217728
最小值 1048576
最大值 innodb_buffer_pool_size / innodb_buffer_pool_instances
單位 位元組 innodb_buffer_pool_chunk_size
定義了InnoDB
緩衝池調整大小操作的區塊大小。為了避免在調整大小操作期間複製所有緩衝池頁面,此操作會以「區塊」方式執行。預設情況下,
innodb_buffer_pool_chunk_size
為 128MB (134217728 位元組)。區塊中包含的頁面數量取決於innodb_page_size
的值。可以 1MB (1048576 位元組) 為單位增加或減少innodb_buffer_pool_chunk_size
。變更
innodb_buffer_pool_chunk_size
值時,適用下列條件如果
innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
大於初始化緩衝池時的目前緩衝池大小,則innodb_buffer_pool_chunk_size
會截斷為innodb_buffer_pool_size
/innodb_buffer_pool_instances
。緩衝池大小必須始終等於或為
innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
的倍數。如果您變更innodb_buffer_pool_chunk_size
,則會自動將innodb_buffer_pool_size
四捨五入為等於或為innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
倍數的值。調整會在初始化緩衝池時發生。
重要變更
innodb_buffer_pool_chunk_size
時應謹慎,因為變更此值可能會自動增加緩衝池的大小。在變更innodb_buffer_pool_chunk_size
之前,請計算其對innodb_buffer_pool_size
的影響,以確保產生的緩衝池大小是可以接受的。為了避免潛在的效能問題,區塊數量(
innodb_buffer_pool_size
/innodb_buffer_pool_chunk_size
)不應超過 1000。innodb_buffer_pool_size
變數是動態的,允許在伺服器在線時調整緩衝池的大小。但是,緩衝池大小必須等於或為innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
的倍數,並且變更其中任何一個變數設定都需要重新啟動伺服器。如需更多資訊,請參閱章節 17.8.3.1,「設定 InnoDB 緩衝池大小」。
-
命令列格式 --innodb-buffer-pool-debug[={OFF|ON}]
系統變數 innodb_buffer_pool_debug
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 OFF
當緩衝池大小小於 1GB 時,啟用此選項允許使用多個緩衝池執行個體,忽略對
innodb_buffer_pool_instances
強加的 1GB 最小緩衝池大小限制。innodb_buffer_pool_debug
選項僅在使用WITH_DEBUG
CMake 選項編譯除錯支援時才可用。 innodb_buffer_pool_dump_at_shutdown
命令列格式 --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}]
系統變數 innodb_buffer_pool_dump_at_shutdown
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定是否在關閉 MySQL 伺服器時記錄緩存在
InnoDB
緩衝池中的頁面,以便縮短下次重新啟動時的預熱過程。通常與innodb_buffer_pool_load_at_startup
搭配使用。innodb_buffer_pool_dump_pct
選項定義要轉儲的最近使用緩衝池頁面的百分比。預設情況下,
innodb_buffer_pool_dump_at_shutdown
和innodb_buffer_pool_load_at_startup
都是啟用的。如需更多資訊,請參閱章節 17.8.3.6,「儲存和還原緩衝池狀態」。
-
命令列格式 --innodb-buffer-pool-dump-now[={OFF|ON}]
系統變數 innodb_buffer_pool_dump_now
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
立即記錄緩存在
InnoDB
緩衝池中的頁面。通常與innodb_buffer_pool_load_now
搭配使用。啟用
innodb_buffer_pool_dump_now
會觸發記錄操作,但不會變更變數設定,該設定始終保持為OFF
或0
。若要檢視觸發轉儲後的緩衝池轉儲狀態,請查詢Innodb_buffer_pool_dump_status
變數。啟用
innodb_buffer_pool_dump_now
會觸發轉儲操作,但不會變更變數設定,該設定始終保持為OFF
或0
。若要檢視觸發轉儲後的緩衝池轉儲狀態,請查詢Innodb_buffer_pool_dump_status
變數。如需更多資訊,請參閱章節 17.8.3.6,「儲存和還原緩衝池狀態」。
-
命令列格式 --innodb-buffer-pool-dump-pct=#
系統變數 innodb_buffer_pool_dump_pct
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 25
最小值 1
最大值 100
指定每個緩衝池要讀取並轉儲的最近使用頁面的百分比。範圍為 1 到 100。預設值為 25。例如,如果有 4 個緩衝池,每個緩衝池有 100 頁,且
innodb_buffer_pool_dump_pct
設定為 25,則會轉儲每個緩衝池最近使用的 25 頁。 -
命令列格式 --innodb-buffer-pool-filename=file_name
系統變數 innodb_buffer_pool_filename
範圍 全域 動態 是 SET_VAR
提示適用否 類型 檔案名稱 預設值 ib_buffer_pool
指定保存
innodb_buffer_pool_dump_at_shutdown
或innodb_buffer_pool_dump_now
產生的表空間 ID 和頁面 ID 清單的檔案名稱。表空間 ID 和頁面 ID 以以下格式儲存:space, page_id
。預設情況下,該檔案名為ib_buffer_pool
,位於InnoDB
資料目錄中。非預設位置必須相對於資料目錄指定。可以使用
SET
陳述式在執行階段指定檔案名稱SET GLOBAL innodb_buffer_pool_filename='file_name';
您也可以在啟動時、啟動字串或 MySQL 設定檔中指定檔案名稱。在啟動時指定檔案名稱時,該檔案必須存在,否則
InnoDB
會傳回啟動錯誤,指出沒有此檔案或目錄。如需更多資訊,請參閱章節 17.8.3.6,「儲存和還原緩衝池狀態」。
innodb_buffer_pool_in_core_file
命令列格式 --innodb-buffer-pool-in-core-file[={OFF|ON}]
系統變數 innodb_buffer_pool_in_core_file
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
停用(預設)
innodb_buffer_pool_in_core_file
變數會透過排除InnoDB
緩衝池頁面來減少核心檔案的大小。若要使用此變數,必須啟用
core_file
變數,且要停用此選項,作業系統必須支援madvise()
的非 POSIX 擴充功能MADV_DONTDUMP
,此擴充功能在 Linux 3.4 及更高版本中支援。如需更多資訊,請參閱第 17.8.3.7 節,「排除或包含核心檔案中的緩衝池頁面」。在支援
MADV_DONTDUMP
的系統上,預設會停用此功能,而這通常僅限於 Linux,不包含 macOS 或 Windows。在 MySQL 8.4 之前,此選項預設為啟用。
-
命令列格式 --innodb-buffer-pool-instances=#
系統變數 innodb_buffer_pool_instances
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 請參閱描述
最小值 1
最大值 64
InnoDB
緩衝池所分割成的區域數量。對於緩衝池容量在數 GB 範圍的系統,將緩衝池分割成不同的執行個體可以透過減少不同執行緒讀取和寫入快取頁面時的爭用來提高並行性。儲存或從緩衝池讀取的每個頁面都會使用雜湊函數隨機分配給其中一個緩衝池執行個體。每個緩衝池都會管理自己的可用列表、刷新列表、LRU 以及與緩衝池相關的所有其他資料結構,並且受到其自身緩衝池互斥鎖的保護。總緩衝池大小將在所有緩衝池之間分割。為了獲得最佳效率,請指定
innodb_buffer_pool_instances
和innodb_buffer_pool_size
的組合,以使每個緩衝池執行個體至少為 1 GB。如果
innodb_buffer_pool_size
<= 1 GiB,則預設的innodb_buffer_pool_instances
值為 1。如果
innodb_buffer_pool_size
> 1 GiB,則預設的innodb_buffer_pool_instances
值是以下兩個計算提示中的最小值,範圍在 1-64 之間緩衝池提示:計算為 (
innodb_buffer_pool_size
/innodb_buffer_pool_chunk_size
) 的 1/2CPU 提示:計算為可用邏輯處理器的 1/4
如需相關資訊,請參閱第 17.8.3.1 節,「設定 InnoDB 緩衝池大小」。
-
命令列格式 --innodb-buffer-pool-load-abort[={OFF|ON}]
系統變數 innodb_buffer_pool_load_abort
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
中斷由
innodb_buffer_pool_load_at_startup
或innodb_buffer_pool_load_now
觸發的還原InnoDB
緩衝池 內容的程序。啟用
innodb_buffer_pool_load_abort
會觸發中止動作,但不會變更變數設定,此設定始終保持OFF
或0
。若要檢視觸發中止動作後的緩衝池載入狀態,請查詢Innodb_buffer_pool_load_status
變數。如需更多資訊,請參閱章節 17.8.3.6,「儲存和還原緩衝池狀態」。
innodb_buffer_pool_load_at_startup
命令列格式 --innodb-buffer-pool-load-at-startup[={OFF|ON}]
系統變數 innodb_buffer_pool_load_at_startup
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定在 MySQL 伺服器啟動時,
InnoDB
緩衝池會自動暖機,方式是載入先前擁有的相同頁面。通常與innodb_buffer_pool_dump_at_shutdown
搭配使用。預設情況下,
innodb_buffer_pool_dump_at_shutdown
和innodb_buffer_pool_load_at_startup
都是啟用的。如需更多資訊,請參閱章節 17.8.3.6,「儲存和還原緩衝池狀態」。
-
命令列格式 --innodb-buffer-pool-load-now[={OFF|ON}]
系統變數 innodb_buffer_pool_load_now
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
立即暖機
InnoDB
緩衝池,方式是載入資料頁面,而無需等待伺服器重新啟動。在基準測試期間將快取記憶體恢復到已知狀態,或準備 MySQL 伺服器在執行報表或維護查詢後恢復正常工作負載時,此功能會很有用。啟用
innodb_buffer_pool_load_now
會觸發載入動作,但不會變更變數設定,此設定始終保持OFF
或0
。若要檢視觸發載入後的緩衝池載入進度,請查詢Innodb_buffer_pool_load_status
變數。如需更多資訊,請參閱章節 17.8.3.6,「儲存和還原緩衝池狀態」。
-
命令列格式 --innodb-buffer-pool-size=#
系統變數 innodb_buffer_pool_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 134217728
最小值 5242880
最大值(64 位元平台) 2**64-1
最大值(32 位元平台) 2**32-1
單位 位元組 緩衝池的大小(以位元組為單位),即
InnoDB
快取表格和索引資料的記憶體區域。預設值為 134217728 個位元組 (128MB)。最大值取決於 CPU 架構;在 32 位元系統上,最大值為 4294967295 (232-1),在 64 位元系統上,最大值為 18446744073709551615 (264-1)。在 32 位元系統上,CPU 架構和作業系統可能會強制執行比宣告最大值更低的實際最大大小。當緩衝池的大小大於 1GB 時,將innodb_buffer_pool_instances
設定為大於 1 的值,可以提高忙碌伺服器上的延展性。較大的緩衝池需要較少的磁碟 I/O 來多次存取相同的表格資料。在專用的資料庫伺服器上,您可以將緩衝池大小設定為機器實體記憶體大小的 80%。設定緩衝池大小時,請注意以下潛在問題,並準備好在必要時縮減緩衝池的大小。
實體記憶體的競爭可能會導致作業系統中的分頁。
InnoDB
會保留額外的記憶體來儲存緩衝區和控制結構,因此配置的總空間大約比指定的緩衝池大小大 10%。緩衝池的位址空間必須是連續的,這在特定位址載入 DLL 的 Windows 系統上可能是一個問題。
初始化緩衝池的時間大致與其大小成正比。在具有大型緩衝池的執行個體上,初始化時間可能很長。若要縮短初始化時間,您可以在伺服器關閉時儲存緩衝池狀態,並在伺服器啟動時還原該狀態。請參閱第 17.8.3.6 節,「儲存和還原緩衝池狀態」。
當您增加或減少緩衝池大小時,操作會分區塊執行。區塊大小由
innodb_buffer_pool_chunk_size
變數定義,其預設值為 128 MB。緩衝池大小必須始終等於或為
innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
的倍數。如果您將緩衝池大小變更為不等於或不是innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
倍數的值,則緩衝池大小會自動調整為等於或為innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
倍數的值。innodb_buffer_pool_size
可以動態設定,這讓您可以在不重新啟動伺服器的情況下調整緩衝池大小。Innodb_buffer_pool_resize_status
狀態變數會報告線上緩衝池調整大小操作的狀態。如需更多資訊,請參閱第 17.8.3.1 節,「設定 InnoDB 緩衝池大小」。如果啟用
innodb_dedicated_server
,則如果未明確定義innodb_buffer_pool_size
值,將會自動設定該值。如需更多資訊,請參閱第 17.8.12 節,「啟用專用 MySQL 伺服器的自動設定」。 -
命令列格式 --innodb-change-buffer-max-size=#
系統變數 innodb_change_buffer_max_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 25
最小值 0
最大值 50
InnoDB
變更緩衝區的最大大小,以緩衝池總大小的百分比表示。您可以為具有大量插入、更新和刪除活動的 MySQL 伺服器增加此值,或為用於報表的資料不變的 MySQL 伺服器減少此值。如需更多資訊,請參閱第 17.5.2 節,「變更緩衝區」。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。 -
命令列格式 --innodb-change-buffering=value
系統變數 innodb_change_buffering
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 none
有效值 none
inserts
deletes
changes
purges
all
InnoDB
是否執行變更緩衝,這是一種最佳化,可延遲寫入次要索引的操作,以便可以依序執行 I/O 操作。下表說明允許的值。也可以以數值方式指定值。表 17.24 innodb_change_buffering 的允許值
值 數值 描述 none
0
預設值。不緩衝任何操作。 inserts
1
緩衝插入操作。 deletes
2
緩衝刪除標記操作;嚴格來說,是指標記索引記錄以便在清除操作期間稍後刪除的寫入操作。 changes
3
緩衝插入和刪除標記操作。 purges
4
緩衝在背景發生的物理刪除操作。 all
5
緩衝插入、刪除標記操作和清除操作。 在 MySQL 8.4 之前,預設值為
all
。有關更多資訊,請參閱第 17.5.2 節,「變更緩衝區」。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。
-
命令列格式 --innodb-change-buffering-debug=#
系統變數 innodb_change_buffering_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 2
為
InnoDB
變更緩衝設定除錯旗標。值為 1 會強制所有變更進入變更緩衝區。值為 2 會在合併時導致意外退出。預設值 0 表示未設定變更緩衝除錯旗標。只有在使用WITH_DEBUG
CMake 選項編譯時才可以使用此選項。 -
命令列格式 --innodb-checkpoint-disabled[={OFF|ON}]
系統變數 innodb_checkpoint_disabled
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
這是一個僅供專家除錯使用的除錯選項。它會停用檢查點,以便在伺服器刻意退出時,一律啟動
InnoDB
復原。它應該只在短時間間隔內啟用,通常是在執行 DML 操作之前,這些操作會寫入重做記錄檔條目,而這些條目會在伺服器退出後需要復原。只有在使用WITH_DEBUG
CMake 選項編譯時才可以使用此選項。 -
命令列格式 --innodb-checksum-algorithm=value
系統變數 innodb_checksum_algorithm
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 crc32
有效值 crc32
strict_crc32
innodb
strict_innodb
none
strict_none
指定如何產生和驗證儲存在
InnoDB
表格空間的磁碟區塊中的檢查碼。innodb_checksum_algorithm
的預設值為crc32
。值
innodb
與舊版 MySQL 相容。值crc32
使用一種演算法,此演算法可以更快地計算每個修改區塊的檢查碼,並檢查每次磁碟讀取的檢查碼。它一次掃描 64 位元區塊,這比一次掃描 8 位元區塊的innodb
檢查碼演算法快。值none
會在檢查碼欄位中寫入常數值,而不是根據區塊資料計算值。表格空間中的區塊可以使用舊、新和沒有檢查碼值的一種混合方式,隨著資料的修改而逐步更新;一旦表格空間中的區塊被修改為使用crc32
演算法,相關的表格就無法被舊版 MySQL 讀取。如果檢查碼演算法的嚴格形式在表格空間中遇到有效但不相符的檢查碼值,則會報告錯誤。建議您僅在新執行個體中使用嚴格設定,以首次設定表格空間。嚴格設定的速度會快一些,因為它們不需要在磁碟讀取期間計算所有檢查碼值。
下表顯示
none
、innodb
和crc32
選項值及其嚴格對應值之間的差異。none
、innodb
和crc32
會將指定的檢查碼值類型寫入每個資料區塊,但為了相容性,在讀取操作期間驗證區塊時會接受其他檢查碼值。嚴格設定也會接受有效的檢查碼值,但當遇到有效但不相符的檢查碼值時,會列印錯誤訊息。如果執行個體中的所有InnoDB
資料檔案都是在相同的innodb_checksum_algorithm
值下建立的,則使用嚴格形式可以加快驗證速度。表格 17.25 允許的 innodb_checksum_algorithm 值
值 產生的檢查碼(寫入時) 允許的檢查碼(讀取時) none 常數數字。 由 none
、innodb
或crc32
產生的任何檢查碼。innodb 使用 InnoDB
的原始演算法在軟體中計算的檢查碼。由 none
、innodb
或crc32
產生的任何檢查碼。crc32 使用 crc32
演算法計算的檢查碼,可能使用硬體輔助完成。由 none
、innodb
或crc32
產生的任何檢查碼。strict_none 常數數字 由 none
、innodb
或crc32
產生的任何檢查碼。如果遇到有效但不相符的檢查碼,InnoDB
會列印錯誤訊息。strict_innodb 使用 InnoDB
的原始演算法在軟體中計算的檢查碼。由 none
、innodb
或crc32
產生的任何檢查碼。如果遇到有效但不相符的檢查碼,InnoDB
會列印錯誤訊息。strict_crc32 使用 crc32
演算法計算的檢查碼,可能使用硬體輔助完成。由 none
、innodb
或crc32
產生的任何檢查碼。如果遇到有效但不相符的檢查碼,InnoDB
會列印錯誤訊息。 -
命令列格式 --innodb-cmp-per-index-enabled[={OFF|ON}]
系統變數 innodb_cmp_per_index_enabled
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
在資訊綱要
INNODB_CMP_PER_INDEX
資料表中啟用與每個索引相關的壓縮統計資料。由於收集這些統計資料可能很耗費資源,因此僅在開發、測試或複本執行個體上,於執行與InnoDB
壓縮表格相關的效能調整期間,啟用此選項。有關更多資訊,請參閱第 28.4.8 節,「INFORMATION_SCHEMA INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 資料表」和第 17.9.1.4 節,「在執行階段監控 InnoDB 表格壓縮」。
-
命令列格式 --innodb-commit-concurrency=#
系統變數 innodb_commit_concurrency
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 1000
可以同時認可的執行緒數量。值為 0(預設值)允許任意數量的交易同時認可。
無法在執行階段將
innodb_commit_concurrency
的值從零變更為非零,反之亦然。可以將值從一個非零值變更為另一個非零值。 -
命令列格式 --innodb-compress-debug=value
系統變數 innodb_compress_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 none
有效值 none
zlib
lz4
lz4hc
使用指定的壓縮演算法壓縮所有表格,而無需為每個表格定義
COMPRESSION
屬性。只有在使用WITH_DEBUG
CMake 選項編譯時才可以使用此選項。如需相關資訊,請參閱第 17.9.2 節,「InnoDB 頁面壓縮」。
innodb_compression_failure_threshold_pct
命令列格式 --innodb-compression-failure-threshold-pct=#
系統變數 innodb_compression_failure_threshold_pct
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 5
最小值 0
最大值 100
定義表格的壓縮失敗率臨界值(以百分比表示),在此臨界值,MySQL 會開始在壓縮頁面內新增填補,以避免代價高昂的壓縮失敗。當超過此臨界值時,MySQL 會開始在每個新的壓縮頁面中保留額外的可用空間,並動態調整可用空間量,最高可達
innodb_compression_pad_pct_max
所指定的頁面大小百分比。值為零會停用監控壓縮效率並動態調整填補量的機制。有關更多資訊,請參閱第 17.9.1.6 節,「OLTP 工作負載的壓縮」。
-
命令列格式 --innodb-compression-level=#
系統變數 innodb_compression_level
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 6
最小值 0
最大值 9
指定用於
InnoDB
壓縮表格和索引的 zlib 壓縮層級。較高的值可讓您在儲存裝置上放入更多資料,但壓縮期間的 CPU 額外負荷會更高。較低的值可讓您在儲存空間不重要或您預期資料不是特別可壓縮時,減少 CPU 額外負荷。有關更多資訊,請參閱第 17.9.1.6 節,「OLTP 工作負載的壓縮」。
innodb_compression_pad_pct_max
命令列格式 --innodb-compression-pad-pct-max=#
系統變數 innodb_compression_pad_pct_max
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 50
最小值 0
最大值 75
指定在每個壓縮頁面中可以保留為可用空間的最大百分比,允許在更新壓縮表格或索引且資料可能被重新壓縮時,有空間可以重新組織頁面內的資料和修改記錄。僅當
innodb_compression_failure_threshold_pct
設定為非零值且壓縮失敗率通過臨界點時適用。有關更多資訊,請參閱第 17.9.1.6 節,「OLTP 工作負載的壓縮」。
-
命令列格式 --innodb-concurrency-tickets=#
系統變數 innodb_concurrency_tickets
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 5000
最小值 1
最大值 4294967295
決定可以同時進入
InnoDB
的執行緒數量。當執行緒嘗試進入InnoDB
時,如果執行緒數量已達到並行限制,則會將其放入佇列中。當允許執行緒進入InnoDB
時,會給予其與innodb_concurrency_tickets
值相等的 「票證」 數量,並且該執行緒可以自由地進出InnoDB
,直到用完其票證。在那之後,該執行緒下次嘗試進入InnoDB
時,將再次受到並行檢查(以及可能的排隊)。預設值為 5000。使用較小的
innodb_concurrency_tickets
值,僅需要處理少量資料列的小型交易可以與處理大量資料列的大型交易公平競爭。較小innodb_concurrency_tickets
值的缺點是,大型交易必須多次循環通過佇列才能完成,這會延長完成其任務所需的時間。使用較大的
innodb_concurrency_tickets
值,大型交易在佇列末端等待位置的時間(由innodb_thread_concurrency
控制)會減少,而花費在擷取資料列的時間會增加。大型交易也需要較少次數的佇列循環才能完成其任務。較大innodb_concurrency_tickets
值的缺點是,同時執行過多的大型交易可能會使小型交易等待更長的時間才能執行,而導致小型交易被「餓死」。使用非零的
innodb_thread_concurrency
值,您可能需要向上或向下調整innodb_concurrency_tickets
值,以找到大型交易和小型交易之間的最佳平衡。SHOW ENGINE INNODB STATUS
報告會顯示執行中交易在其當前佇列傳遞中剩餘的票證數量。此資料也可以從 Information SchemaINNODB_TRX
資料表的TRX_CONCURRENCY_TICKETS
欄位取得。如需更多資訊,請參閱第 17.8.4 節,〈設定 InnoDB 的線程並行性〉。
-
命令列格式 --innodb-data-file-path=file_name
系統變數 innodb_data_file_path
範圍 全域 動態 否 SET_VAR
提示適用否 類型 字串 預設值 ibdata1:12M:autoextend
定義
InnoDB
系統表空間資料檔案的名稱、大小和屬性。如果您未指定innodb_data_file_path
的值,預設行為是建立一個名為ibdata1
的單一自動擴展資料檔案,其大小略大於 12MB。資料檔案規格的完整語法包括檔案名稱、檔案大小、
autoextend
屬性和max
屬性file_name:file_size[:autoextend[:max:max_file_size]]
檔案大小以千位元組、百萬位元組或十億位元組指定,方法是在大小值後附加
K
、M
或G
。如果以千位元組指定資料檔案大小,請以 1024 的倍數指定。否則,KB 值會四捨五入到最接近的百萬位元組 (MB) 邊界。檔案大小的總和必須至少略大於 12MB。如需其他組態資訊,請參閱系統表空間資料檔案組態。如需調整大小的指示,請參閱調整系統表空間大小。
-
命令列格式 --innodb-data-home-dir=dir_name
系統變數 innodb_data_home_dir
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 InnoDB
系統表空間資料檔案的目錄路徑通用部分。預設值為 MySQLdata
目錄。此設定會與innodb_data_file_path
設定串連,除非該設定定義了絕對路徑。當為
innodb_data_home_dir
指定值時,必須包含尾部的斜線。例如[mysqld] innodb_data_home_dir = /path/to/myibdata/
此設定不會影響單表檔案表空間的位置。
如需相關資訊,請參閱第 17.8.1 節「InnoDB 啟動組態」。
-
命令列格式 --innodb-ddl-buffer-size=#
系統變數 innodb_ddl_buffer_size
範圍 Session 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1048576
最小值 65536
最大值 4294967295
單位 位元組 定義 DDL 作業的最大緩衝區大小。預設設定為 1048576 位元組(約 1 MB)。適用於建立或重建次要索引的線上 DDL 作業。請參閱第 17.12.4 節「線上 DDL 記憶體管理」。每個 DDL 執行緒的最大緩衝區大小是最大緩衝區大小除以 DDL 執行緒的數量 (
innodb_ddl_buffer_size
/innodb_ddl_threads
)。 innodb_ddl_log_crash_reset_debug
命令列格式 --innodb-ddl-log-crash-reset-debug[={OFF|ON}]
系統變數 innodb_ddl_log_crash_reset_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用此偵錯選項,可將 DDL 日誌當機注入計數器重設為 1。只有在使用
WITH_DEBUG
CMake 選項編譯偵錯支援時,此選項才可用。-
命令列格式 --innodb-ddl-threads=#
系統變數 innodb_ddl_threads
範圍 Session 動態 是 SET_VAR
提示適用否 類型 整數 預設值 4
最小值 1
最大值 64
定義索引建立的排序和建立階段的最大平行執行緒數量。適用於建立或重建次要索引的線上 DDL 作業。如需相關資訊,請參閱第 17.12.5 節「設定線上 DDL 作業的平行執行緒」和第 17.12.4 節「線上 DDL 記憶體管理」。
-
命令列格式 --innodb-deadlock-detect[={OFF|ON}]
系統變數 innodb_deadlock_detect
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
此選項用於停用死鎖偵測。在高並行系統上,當許多執行緒等待相同的鎖定時,死鎖偵測可能會導致速度減慢。有時,停用死鎖偵測並依賴
innodb_lock_wait_timeout
設定在發生死鎖時進行交易回滾可能更有效。如需相關資訊,請參閱第 17.7.5.2 節「死鎖偵測」。
-
命令列格式 --innodb-dedicated-server[={OFF|ON}]
系統變數 innodb_dedicated_server
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 OFF
當啟用
innodb_dedicated_server
時,InnoDB
會自動設定以下變數-
注意
innodb_log_file_size
和innodb_log_files_in_group
已棄用,並由innodb_redo_log_capacity
取代;請參閱第 17.6.5 節「重做日誌」。 在 MySQL 8.4 之前,也會自動設定
innodb_flush_method
。
僅當 MySQL 執行個體位於可以使用所有可用系統資源的專用伺服器上時,才考慮啟用
innodb_dedicated_server
。如果 MySQL 執行個體與其他應用程式共用系統資源,則不建議啟用innodb_dedicated_server
。如需更多資訊,請參閱第 17.8.12 節「啟用專用 MySQL 伺服器的自動組態」。
-
命令列格式 --innodb-default-row-format=value
系統變數 innodb_default_row_format
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 DYNAMIC
有效值 REDUNDANT
COMPACT
DYNAMIC
innodb_default_row_format
選項定義InnoDB
表格和使用者建立的暫存表格的預設資料列格式。預設設定為DYNAMIC
。其他允許的值為COMPACT
和REDUNDANT
。不支援在系統表空間中使用的COMPRESSED
資料列格式不能定義為預設值。當未明確指定
ROW_FORMAT
選項或使用ROW_FORMAT=DEFAULT
時,新建立的表格會使用由innodb_default_row_format
定義的資料列格式。當未明確指定
ROW_FORMAT
選項或使用ROW_FORMAT=DEFAULT
時,任何重建表格的操作也會將表格的資料列格式靜默變更為由innodb_default_row_format
定義的格式。如需更多資訊,請參閱定義表格的資料列格式。伺服器為處理查詢而建立的內部
InnoDB
暫存表格會使用DYNAMIC
資料列格式,無論innodb_default_row_format
設定為何。 -
命令列格式 --innodb-directories=dir_name
系統變數 innodb_directories
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 預設值 NULL
定義啟動時要掃描的表空間檔案目錄。此選項用於在伺服器離線時將表空間檔案移動或還原到新的位置。它也用於指定使用絕對路徑建立或位於資料目錄外部的表空間檔案目錄。
當機復原期間的表空間探索依賴
innodb_directories
設定來識別重做日誌中引用的表空間。如需更多資訊,請參閱當機復原期間的表空間探索。預設值為 NULL,但是由
innodb_data_home_dir
、innodb_undo_directory
和datadir
定義的目錄,在InnoDB
於啟動時建立要掃描的目錄列表時,總是會附加到innodb_directories
參數值。無論是否明確指定innodb_directories
設定,這些目錄都會被附加。innodb_directories
可以指定為啟動命令或 MySQL 選項檔案中的選項。參數值會用引號括住,因為否則某些命令直譯器會將分號 (;
) 解釋為特殊字元。(例如,Unix shell 會將其視為命令終止符。)啟動命令
mysqld --innodb-directories="directory_path_1;directory_path_2"
MySQL 選項檔案
[mysqld] innodb_directories="directory_path_1;directory_path_2"
不能使用萬用字元表達式來指定目錄。
innodb_directories
掃描也會遍歷指定目錄的子目錄。重複的目錄和子目錄會從要掃描的目錄列表中捨棄。如需更多資訊,請參閱第 17.6.3.6 節,「在伺服器離線時移動表空間檔案」。
innodb_disable_sort_file_cache
命令列格式 --innodb-disable-sort-file-cache[={OFF|ON}]
系統變數 innodb_disable_sort_file_cache
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
停用合併排序暫存檔案的作業系統檔案系統快取。效果是以相當於
O_DIRECT
的方式開啟此類檔案。-
命令列格式 --innodb-doublewrite=value
系統變數 innodb_doublewrite
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 ON
有效值 ON
OFF
DETECT_AND_RECOVER
DETECT_ONLY
innodb_doublewrite
變數控制雙寫緩衝。在大多數情況下,預設會啟用雙寫緩衝。您可以在啟動伺服器時將
innodb_doublewrite
設定為ON
或OFF
,以分別啟用或停用雙寫緩衝。DETECT_AND_RECOVER
與ON
相同。透過此設定,除了雙寫緩衝區完全啟用之外,資料庫頁面內容會寫入雙寫緩衝區,在復原期間會存取該緩衝區,以修正不完整的頁面寫入。使用DETECT_ONLY
時,只會將中繼資料寫入雙寫緩衝區。資料庫頁面內容不會寫入雙寫緩衝區,且復原不會使用雙寫緩衝區來修正不完整的頁面寫入。此輕量型設定僅用於偵測不完整的頁面寫入。MySQL 支援動態變更
innodb_doublewrite
設定,以在ON
、DETECT_AND_RECOVER
和DETECT_ONLY
之間啟用雙寫緩衝區。MySQL 不支援在啟用雙寫緩衝區的設定和OFF
之間或反之進行動態變更。如果雙寫緩衝區位於支援原子寫入的 Fusion-io 裝置上,則會自動停用雙寫緩衝區,並改為使用 Fusion-io 原子寫入執行資料檔案寫入。但是,請注意
innodb_doublewrite
設定是全域的。停用雙寫緩衝區時,會針對所有資料檔案 (包括不在 Fusion-io 硬體上的檔案) 停用。此功能僅在 Fusion-io 硬體上支援,並且僅針對 Linux 上的 Fusion-io NVMFS 啟用。為了充分利用此功能,建議使用O_DIRECT
的innodb_flush_method
設定。如需相關資訊,請參閱第 17.6.4 節,「雙寫緩衝區」。
-
命令列格式 --innodb-doublewrite-batch-size=#
系統變數 innodb_doublewrite_batch_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 256
此變數旨在表示在批次中寫入的雙寫頁面數。此功能已由
innodb_doublewrite_pages
取代。如需更多資訊,請參閱第 17.6.4 節,「雙寫緩衝區」。
-
命令列格式 --innodb-doublewrite-dir=dir_name
系統變數 innodb_doublewrite_dir
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 定義雙寫檔案的目錄。如果未指定任何目錄,則會在
innodb_data_home_dir
目錄中建立雙寫檔案,如果未指定,預設為資料目錄。如需更多資訊,請參閱第 17.6.4 節,「雙寫緩衝區」。
-
命令列格式 --innodb-doublewrite-files=#
系統變數 innodb_doublewrite_files
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 2
最小值 1
最大值 256
定義雙寫檔案的數量。預設情況下,會為每個緩衝池執行個體建立兩個雙寫檔案。
最少有兩個雙寫檔案。雙寫檔案的最大數量是緩衝池執行個體數的兩倍。(緩衝池執行個體的數量由
innodb_buffer_pool_instances
變數控制。)如需更多資訊,請參閱第 17.6.4 節,「雙寫緩衝區」。
-
命令列格式 --innodb-doublewrite-pages=#
系統變數 innodb_doublewrite_pages
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 128
最小值 1
最大值 512
定義每個執行緒批次寫入的雙寫頁面最大數量。如果未指定值,
innodb_doublewrite_pages
預設為 128。在 MySQL 8.4 之前,預設值是
innodb_write_io_threads
值,預設為 4。如需更多資訊,請參閱第 17.6.4 節,「雙寫緩衝區」。
-
命令列格式 --innodb=extend-and-initialize[={OFF|ON}]
系統變數 innodb_extend_and_initialize
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
控制如何在 Linux 系統上將空間配置給每個資料表的檔案和一般資料表空間。
啟用時,
InnoDB
會將 NULL 寫入新配置的頁面。停用時,會使用posix_fallocate()
呼叫配置空間,這會保留空間,而不會實際寫入 NULL。如需更多資訊,請參閱第 17.6.3.8 節,「在 Linux 上最佳化表空間空間配置」。
-
命令列格式 --innodb-fast-shutdown=#
系統變數 innodb_fast_shutdown
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1
有效值 0
1
2
InnoDB
關機模式。如果值為 0,InnoDB
會執行慢速關機,完整清除,並在關機前合併變更緩衝區。如果值為 1 (預設值),InnoDB
會在關機時略過這些作業,此過程稱為快速關機。如果值為 2,InnoDB
會刷新其日誌並冷關機,就像 MySQL 當機一樣;不會遺失任何已提交的交易,但當機復原作業會使下次啟動花費更長的時間。慢速關機可能需要幾分鐘,甚至在大量資料仍緩衝的情況下需要數小時。在 MySQL 主要版本之間升級或降級之前,請使用慢速關機技術,以便在升級程序更新檔案格式時,所有資料檔案都已完全準備好。
在緊急情況或疑難排解情況下,使用
innodb_fast_shutdown=2
,以便在資料有損壞風險時,獲得絕對最快的關機速度。 innodb_fil_make_page_dirty_debug
命令列格式 --innodb-fil-make-page-dirty-debug=#
系統變數 innodb_fil_make_page_dirty_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 2**32-1
預設情況下,將
innodb_fil_make_page_dirty_debug
設定為表空間的 ID 會立即弄髒表空間的第一頁。如果將innodb_saved_page_number_debug
設定為非預設值,則設定innodb_fil_make_page_dirty_debug
會弄髒指定的頁面。只有在使用WITH_DEBUG
CMake 選項編譯偵錯支援時,才能使用innodb_fil_make_page_dirty_debug
選項。-
命令列格式 --innodb-file-per-table[={OFF|ON}]
系統變數 innodb_file_per_table
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
啟用
innodb_file_per_table
時,預設會在每個資料表的檔案表空間中建立資料表。停用時,預設會在系統表空間中建立資料表。如需有關每個資料表的檔案表空間的資訊,請參閱第 17.6.3.2 節,「每個資料表的檔案表空間」。如需有關InnoDB
系統表空間的資訊,請參閱第 17.6.3.1 節,「系統表空間」。可以使用
SET GLOBAL
陳述式在執行階段設定innodb_file_per_table
變數,或在啟動時於命令列中指定,或在選項檔案中指定。在執行階段設定需要有足夠的權限來設定全域系統變數(請參閱章節 7.1.9.1,「系統變數權限」),並且會立即影響所有連線的操作。當位於每個資料表檔案表空間中的資料表被截斷或刪除時,釋放的空間會返回給作業系統。截斷或刪除位於系統表空間中的資料表只會釋放系統表空間中的空間。系統表空間中釋放的空間可以再次用於
InnoDB
資料,但不會返回給作業系統,因為系統表空間資料檔案永遠不會縮小。innodb_file_per-table
設定不會影響暫存資料表的建立;暫存資料表會在工作階段暫存表空間中建立。請參閱章節 17.6.3.5,「暫存表空間」。 -
命令列格式 --innodb-fill-factor=#
系統變數 innodb_fill_factor
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 100
最小值 10
最大值 100
InnoDB
在建立或重建索引時會執行大量載入。這種索引建立方法稱為「「排序索引建置」」。innodb_fill_factor
定義在排序索引建置期間,每個 B 樹頁面上填滿的空間百分比,其餘空間保留給未來的索引成長。例如,將innodb_fill_factor
設定為 80 會為未來的索引成長保留每個 B 樹頁面 20% 的空間。實際百分比可能會有所不同。innodb_fill_factor
設定被解讀為提示,而不是硬性限制。設定
innodb_fill_factor
為 100 會在叢集索引頁面中留下 1/16 的空間,以供未來索引成長。innodb_fill_factor
同時適用於 B 樹的葉子頁面和非葉子頁面。它不適用於TEXT
或BLOB
項目使用的外部頁面。如需更多資訊,請參閱章節 17.6.2.3,「排序索引建置」。
-
命令列格式 --innodb-flush-log-at-timeout=#
系統變數 innodb_flush_log_at_timeout
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1
最小值 1
最大值 2700
單位 秒 每
N
秒寫入並刷新日誌。innodb_flush_log_at_timeout
允許增加刷新之間的逾時期間,以減少刷新並避免影響二進位日誌群組提交的效能。innodb_flush_log_at_timeout
的預設設定為每秒一次。 innodb_flush_log_at_trx_commit
命令列格式 --innodb-flush-log-at-trx-commit=#
系統變數 innodb_flush_log_at_trx_commit
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 1
有效值 0
1
2
控制 commit 操作的嚴格 ACID 合規性與當重新排列並分批完成與提交相關的 I/O 操作時可能實現的更高效能之間的平衡。您可以透過變更預設值來獲得更好的效能,但接著您可能會在崩潰中遺失交易。
完全 ACID 合規性需要預設設定 1。日誌會在每次交易提交時寫入並刷新到磁碟。
在設定為 0 的情況下,日誌會每秒寫入並刷新到磁碟。在崩潰中可能會遺失未刷新日誌的交易。
在設定為 2 的情況下,日誌會在每次交易提交後寫入,並每秒刷新到磁碟。在崩潰中可能會遺失未刷新日誌的交易。
對於設定 0 和 2,無法 100% 保證每秒刷新一次。刷新可能因為 DDL 變更和其他內部
InnoDB
活動而更頻繁地發生,這些活動會導致日誌獨立於innodb_flush_log_at_trx_commit
設定進行刷新,有時會因為排程問題而較不頻繁地發生。如果日誌每秒刷新一次,則在崩潰中最多可能會遺失一秒鐘的交易。如果日誌刷新的頻率高於或低於每秒一次,則可能遺失的交易量會相應地變化。日誌刷新頻率由
innodb_flush_log_at_timeout
控制,可讓您將日誌刷新頻率設定為N
秒(其中N
為1 ... 2700
,預設值為 1)。然而,任何意外的 mysqld 處理序結束都可能會清除最多N
秒鐘的交易。DDL 變更和其他內部
InnoDB
活動會獨立於innodb_flush_log_at_trx_commit
設定來刷新日誌。InnoDB
崩潰復原無論innodb_flush_log_at_trx_commit
設定為何都能運作。交易會完全應用或完全清除。
為了在使用交易的
InnoDB
複寫設定中保持耐久性和一致性如果已啟用二進位日誌記錄,請設定
sync_binlog=1
。
如需有關複本上最能抵抗意外停止的設定組合的資訊,請參閱章節 19.4.2,「處理複本的意外停止」。
警告許多作業系統和一些磁碟硬體會欺騙刷新到磁碟操作。即使刷新尚未發生,它們也可能會告知 mysqld 刷新已發生。在這種情況下,即使使用建議的設定,也無法保證交易的耐久性,在最壞的情況下,斷電可能會損壞
InnoDB
資料。在 SCSI 磁碟控制器或磁碟本身中使用電池備份磁碟快取會加快檔案刷新速度,並使操作更安全。您也可以嘗試停用硬體快取中磁碟寫入的快取。-
命令列格式 --innodb-flush-method=value
系統變數 innodb_flush_method
範圍 全域 動態 否 SET_VAR
提示適用否 類型 字串 預設值 (Unix) 如果支援,則為 O_DIRECT,否則為 fsync
預設值 (Windows) 未緩衝
有效值 (Unix) fsync
O_DSYNC
littlesync
nosync
O_DIRECT
O_DIRECT_NO_FSYNC
有效值 (Windows) 未緩衝
正常
定義用於將資料 刷新到
InnoDB
資料檔案和 日誌檔案的方法,這可能會影響 I/O 輸送量。在類 Unix 系統上,預設值為
O_DIRECT
,如果支援,否則預設為fsync
。在 Windows 上,預設值為unbuffered
。用於類 Unix 系統的
innodb_flush_method
選項包括fsync
或0
:InnoDB
使用fsync()
系統呼叫來刷新資料檔案和日誌檔案。O_DSYNC
或1
:InnoDB
使用O_SYNC
來開啟和刷新日誌檔案,並使用fsync()
來刷新資料檔案。InnoDB
不直接使用O_DSYNC
,因為它在許多不同的 Unix 版本上都存在問題。littlesync
或2
:此選項用於內部效能測試,目前不受支援。使用風險自負。nosync
或3
:此選項用於內部效能測試,目前不受支援。使用風險自負。O_DIRECT
或4
:InnoDB
使用O_DIRECT
(或 Solaris 上的directio()
) 來開啟資料檔案,並使用fsync()
來刷新資料檔案和日誌檔案。此選項在某些 GNU/Linux 版本、FreeBSD 和 Solaris 上可用。O_DIRECT_NO_FSYNC
:InnoDB
在刷新 I/O 期間使用O_DIRECT
,但在每次寫入操作後會略過fsync()
系統呼叫。MySQL 在建立新檔案、增加檔案大小以及關閉檔案之後,會呼叫
fsync()
,以確保同步檔案系統中繼資料變更。在每次寫入操作後,仍然會略過fsync()
系統呼叫。如果重新執行日誌檔案和資料檔案位於不同的儲存裝置上,且在未以電池備份的裝置快取中刷新資料檔案寫入之前發生意外結束,則可能會遺失資料。如果您使用或打算對重新執行日誌檔案和資料檔案使用不同的儲存裝置,且您的資料檔案位於具有未以電池備份快取的裝置上,請改用
O_DIRECT
。
在支援
fdatasync()
系統呼叫的平台上,innodb_use_fdatasync
變數允許使用fsync()
的innodb_flush_method
選項改用fdatasync()
。fdatasync()
系統呼叫除非後續資料擷取需要,否則不會刷新對檔案中繼資料的變更,這提供潛在的效能優勢。用於 Windows 系統的
innodb_flush_method
選項包括unbuffered
或0
:InnoDB
使用非緩衝 I/O。注意不支援在 Windows 上於 4K 磁區硬碟上執行 MySQL 伺服器且使用
unbuffered
。解決方法是使用innodb_flush_method=normal
。normal
或1
:InnoDB
使用緩衝 I/O。
每個設定對效能的影響取決於硬體配置和工作負載。請針對您的特定配置進行基準測試,以決定要使用哪個設定,或是是否保持預設設定。檢查
Innodb_data_fsyncs
狀態變數,以查看每個設定的fsync()
呼叫總次數(如果啟用innodb_use_fdatasync
,則為fdatasync()
呼叫)。工作負載中讀取和寫入操作的組合會影響設定的效能。例如,在具有硬體 RAID 控制器和電池備份寫入快取的系統上,O_DIRECT
有助於避免InnoDB
緩衝池與作業系統檔案系統快取之間的雙重緩衝。在某些InnoDB
資料和日誌檔位於 SAN 上的系統中,對於主要是SELECT
陳述式的讀取密集型工作負載,預設值或O_DSYNC
可能會更快。請務必使用反映生產環境的硬體和工作負載來測試此參數。如需一般的 I/O 調整建議,請參閱 第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。 -
命令列格式 --innodb-flush-neighbors=#
系統變數 innodb_flush_neighbors
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 0
有效值 0
1
2
指定是否在從
InnoDB
緩衝池 刷新頁面時,也刷新相同 區段 中的其他髒頁。設定為 0 會停用
innodb_flush_neighbors
。不會刷新相同區段中的髒頁。設定為 1 會刷新相同區段中的連續髒頁。
設定為 2 會刷新相同區段中的髒頁。
當表格資料儲存在傳統 HDD 儲存裝置上時,與在不同時間刷新個別頁面相比,在一次操作中刷新此類相鄰頁面可以減少 I/O 負擔(主要用於磁碟搜尋操作)。對於儲存在 SSD 上的表格資料,搜尋時間不是一個重要因素,您可以將此選項設定為 0 以分散寫入操作。如需相關資訊,請參閱 第 17.8.3.5 節,「設定緩衝池刷新」。
-
命令列格式 --innodb-flush-sync[={OFF|ON}]
系統變數 innodb_flush_sync
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
預設情況下啟用的
innodb_flush_sync
變數,會導致在 檢查點發生的 I/O 活動爆發期間忽略innodb_io_capacity
和innodb_io_capacity_max
設定。若要遵循innodb_io_capacity
和innodb_io_capacity_max
定義的 I/O 速率,請停用innodb_flush_sync
。如需設定
innodb_flush_sync
變數的相關資訊,請參閱 第 17.8.7 節,「設定 InnoDB I/O 容量」。 -
命令列格式 --innodb-flushing-avg-loops=#
系統變數 innodb_flushing_avg_loops
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 30
最小值 1
最大值 1000
InnoDB
保留先前計算的刷新狀態快照的迭代次數,以控制自適應刷新對變更的工作負載的反應速度。增加此值會使刷新操作的速率隨著工作負載的變化而平穩地逐漸變化。降低此值會使自適應刷新快速調整以適應工作負載變化,如果工作負載突然增加和減少,則可能導致刷新活動出現峰值。如需相關資訊,請參閱 第 17.8.3.5 節,「設定緩衝池刷新」。
-
命令列格式 --innodb-force-load-corrupted[={OFF|ON}]
系統變數 innodb_force_load_corrupted
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 OFF
允許
InnoDB
在啟動時載入標記為損壞的表格。僅在疑難排解期間使用,以復原其他無法存取的資料。完成疑難排解後,停用此設定並重新啟動伺服器。 -
命令列格式 --innodb-force-recovery=#
系統變數 innodb_force_recovery
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 6
崩潰復原模式,通常僅在嚴重的疑難排解情況下才會變更。可能的值為 0 到 6。如需這些值的含義和關於
innodb_force_recovery
的重要資訊,請參閱 第 17.20.3 節,「強制 InnoDB 復原」。警告僅在緊急情況下將此變數設定為大於 0 的值,以便您可以啟動
InnoDB
並傾印您的表格。作為安全措施,當innodb_force_recovery
大於 0 時,InnoDB
會阻止INSERT
、UPDATE
或DELETE
操作。innodb_force_recovery
設定為 4 或更大會使InnoDB
進入唯讀模式。這些限制可能會導致複寫管理命令失敗並出現錯誤,因為複寫會將複本狀態日誌儲存在
InnoDB
表格中。 -
命令列格式 --innodb-fsync-threshold=#
系統變數 innodb_fsync_threshold
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 2**64-1
預設情況下,當
InnoDB
建立新的資料檔案時,例如新的日誌檔或表空間檔案,該檔案會先完全寫入作業系統快取,然後再刷新到磁碟,這可能會導致一次發生大量的磁碟寫入活動。若要強制從作業系統快取中進行較小、定期的資料刷新,您可以使用innodb_fsync_threshold
變數來定義以位元組為單位的閾值。當達到位元組閾值時,作業系統快取的內容會刷新到磁碟。預設值 0 會強制執行預設行為,這表示僅在檔案完全寫入快取後才將資料刷新到磁碟。在多個 MySQL 執行個體使用相同的儲存裝置的情況下,指定閾值來強制執行較小、定期的刷新可能會有益。例如,建立新的 MySQL 執行個體及其關聯的資料檔案可能會導致大量的磁碟寫入活動激增,從而妨礙使用相同儲存裝置的其他 MySQL 執行個體的效能。設定閾值有助於避免此類寫入活動激增。
-
系統變數 innodb_ft_aux_table
範圍 全域 動態 是 SET_VAR
提示適用否 類型 字串 指定包含
FULLTEXT
索引的InnoDB
表格的完整名稱。此變數旨在用於診斷目的,並且只能在執行階段設定。例如SET GLOBAL innodb_ft_aux_table = 'test/t1';
將此變數設定為格式為
的名稱後,db_name
/table_name
INFORMATION_SCHEMA
表格INNODB_FT_INDEX_TABLE
、INNODB_FT_INDEX_CACHE
、INNODB_FT_CONFIG
、INNODB_FT_DELETED
和INNODB_FT_BEING_DELETED
會顯示有關指定表格的搜尋索引的資訊。如需詳細資訊,請參閱 第 17.15.4 節,「InnoDB INFORMATION_SCHEMA FULLTEXT 索引表格」。
-
命令列格式 --innodb-ft-cache-size=#
系統變數 innodb_ft_cache_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 8000000
最小值 1600000
最大值 80000000
單位 位元組 為
InnoDB
FULLTEXT
搜尋索引快取分配的記憶體(以位元組為單位),該快取在建立InnoDB
FULLTEXT
索引時,將已剖析的文件保留在記憶體中。只有在達到innodb_ft_cache_size
大小限制時,才會將索引插入和更新提交到磁碟。innodb_ft_cache_size
會定義每個表格的快取大小。若要設定所有表格的全球限制,請參閱innodb_ft_total_cache_size
。如需詳細資訊,請參閱 InnoDB 全文索引快取。
-
命令列格式 --innodb-ft-enable-diag-print[={OFF|ON}]
系統變數 innodb_ft_enable_diag_print
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
是否啟用額外的全文搜尋 (FTS) 診斷輸出。此選項主要用於進階 FTS 偵錯,大多數使用者對此不感興趣。輸出會列印到錯誤日誌,並包含以下資訊:
FTS 索引同步進度(當達到 FTS 快取限制時)。例如
FTS SYNC for table test, deleted count: 100 size: 10000 bytes SYNC words: 100
FTS 最佳化進度。例如
FTS start optimize test FTS_OPTIMIZE: optimize "mysql" FTS_OPTIMIZE: processed "mysql"
FTS 索引建立進度。例如
Number of doc processed: 1000
對於 FTS 查詢,會列印查詢剖析樹狀結構、字詞權重、查詢處理時間和記憶體使用量。例如
FTS Search Processing time: 1 secs: 100 millisec: row(s) 10000 Full Search Memory: 245666 (bytes), Row: 10000
-
命令列格式 --innodb-ft-enable-stopword[={OFF|ON}]
系統變數 innodb_ft_enable_stopword
範圍 全域、工作階段 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定在建立索引時,將一組停用字詞與
InnoDB
FULLTEXT
索引相關聯。如果設定了innodb_ft_user_stopword_table
選項,則停用字詞會取自該表格。否則,如果設定了innodb_ft_server_stopword_table
選項,則停用字詞會取自該表格。否則,會使用內建的一組預設停用字詞。如需詳細資訊,請參閱 第 14.9.4 節,「全文停用字詞」。
-
命令列格式 --innodb-ft-max-token-size=#
系統變數 innodb_ft_max_token_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 84
最小值 10
最大值 84
儲存在
InnoDB
FULLTEXT
索引中的單字最大字元長度。設定此值的上限可減少索引大小,從而加快查詢速度,方法是省略長關鍵字或不是真實單字且不太可能成為搜尋詞彙的任意字母集合。更多資訊,請參閱第 14.9.6 節,「微調 MySQL 全文檢索」。
-
命令列格式 --innodb-ft-min-token-size=#
系統變數 innodb_ft_min_token_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 3
最小值 0
最大值 16
儲存在
InnoDB
FULLTEXT
索引中的單字最小長度。增加此值可減少索引大小,從而加快查詢速度,方法是省略在搜尋內容中不太可能重要的常用單字,例如英文單字 「a」 和 「to」。對於使用 CJK(中文、日文、韓文)字元集的內容,請指定值為 1。更多資訊,請參閱第 14.9.6 節,「微調 MySQL 全文檢索」。
-
命令列格式 --innodb-ft-num-word-optimize=#
系統變數 innodb_ft_num_word_optimize
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 2000
最小值 1000
最大值 10000
在
InnoDB
FULLTEXT
索引上每次OPTIMIZE TABLE
操作期間要處理的單字數量。因為對包含全文搜尋索引的表格進行大量插入或更新操作可能需要大量的索引維護才能合併所有變更,因此您可能會執行一系列的OPTIMIZE TABLE
陳述式,每個陳述式都從上一個陳述式停止的地方繼續。更多資訊,請參閱第 14.9.6 節,「微調 MySQL 全文檢索」。
-
命令列格式 --innodb-ft-result-cache-limit=#
系統變數 innodb_ft_result_cache_limit
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 2000000000
最小值 1000000
最大值 2**32-1
單位 位元組 每個全文搜尋查詢或每個執行緒的
InnoDB
全文搜尋查詢結果快取限制(以位元組定義)。中間和最終的InnoDB
全文搜尋查詢結果會在記憶體中處理。使用innodb_ft_result_cache_limit
可對全文搜尋查詢結果快取設定大小限制,以避免在非常大的InnoDB
全文搜尋查詢結果(例如數百萬或數億列)的情況下消耗過多的記憶體。在處理全文搜尋查詢時,會依需要配置記憶體。如果達到結果快取大小限制,則會傳回錯誤,指出查詢超過允許的最大記憶體。所有平台類型和位元大小的
innodb_ft_result_cache_limit
最大值為 2**32-1。 innodb_ft_server_stopword_table
命令列格式 --innodb-ft-server-stopword-table=db_name/table_name
系統變數 innodb_ft_server_stopword_table
範圍 全域 動態 是 SET_VAR
提示適用否 類型 字串 預設值 NULL
此選項用於為所有
InnoDB
表格指定您自己的InnoDB
FULLTEXT
索引停用字清單。若要為特定InnoDB
表格設定您自己的停用字清單,請使用innodb_ft_user_stopword_table
。將
innodb_ft_server_stopword_table
設定為包含停用字清單的表格名稱,格式為
。db_name
/table_name
停用字表格必須先存在,您才能設定
innodb_ft_server_stopword_table
。innodb_ft_enable_stopword
必須啟用,並且必須先設定innodb_ft_server_stopword_table
選項,才能建立FULLTEXT
索引。停用字表格必須是
InnoDB
表格,其中包含一個名為value
的單一VARCHAR
資料行。如需詳細資訊,請參閱 第 14.9.4 節,「全文停用字詞」。
-
命令列格式 --innodb-ft-sort-pll-degree=#
系統變數 innodb_ft_sort_pll_degree
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 2
最小值 1
最大值 16
在建立搜尋索引時,平行用於索引和標記
InnoDB
FULLTEXT
索引中文字的執行緒數量。如需相關資訊,請參閱第 17.6.2.4 節,「InnoDB 全文索引」和
innodb_sort_buffer_size
。 -
命令列格式 --innodb-ft-total-cache-size=#
系統變數 innodb_ft_total_cache_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 640000000
最小值 32000000
最大值 1600000000
單位 位元組 為所有表格的
InnoDB
全文搜尋索引快取配置的總記憶體(以位元組為單位)。建立大量表格,每個表格都有FULLTEXT
搜尋索引,可能會消耗大量可用記憶體。innodb_ft_total_cache_size
為所有全文搜尋索引定義全域記憶體限制,以協助避免消耗過多記憶體。如果索引操作達到全域限制,則會觸發強制同步處理。如需詳細資訊,請參閱 InnoDB 全文索引快取。
-
命令列格式 --innodb-ft-user-stopword-table=db_name/table_name
系統變數 innodb_ft_user_stopword_table
範圍 全域、工作階段 動態 是 SET_VAR
提示適用否 類型 字串 預設值 NULL
此選項用於在特定表格上指定您自己的
InnoDB
FULLTEXT
索引停用字清單。若要為所有InnoDB
表格設定您自己的停用字清單,請使用innodb_ft_server_stopword_table
。將
innodb_ft_user_stopword_table
設定為包含停用字清單的表格名稱,格式為
。db_name
/table_name
停用字表格必須先存在,您才能設定
innodb_ft_user_stopword_table
。innodb_ft_enable_stopword
必須啟用,並且必須先設定innodb_ft_user_stopword_table
,才能建立FULLTEXT
索引。停用字表格必須是
InnoDB
表格,其中包含一個名為value
的單一VARCHAR
資料行。如需詳細資訊,請參閱 第 14.9.4 節,「全文停用字詞」。
-
命令列格式 --innodb-idle-flush-pct=#
系統變數 innodb_idle_flush_pct
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 100
最小值 0
最大值 100
限制
InnoDB
閒置時的頁面刷新。innodb_idle_flush_pct
值是innodb_io_capacity
設定的百分比,該設定定義InnoDB
可用的每秒 I/O 操作次數。如需更多資訊,請參閱在閒置期間限制緩衝區刷新。 -
命令列格式 --innodb-io-capacity=#
系統變數 innodb_io_capacity
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 10000
最小值 100
最大值 2**32-1
innodb_io_capacity
變數定義InnoDB
背景工作可用的每秒 I/O 操作次數 (IOPS),例如從緩衝區集區刷新頁面,以及合併來自變更緩衝區的資料。如需有關設定
innodb_io_capacity
變數的資訊,請參閱第 17.8.7 節,「設定 InnoDB I/O 容量」。 -
命令列格式 --innodb-io-capacity-max=#
系統變數 innodb_io_capacity_max
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 2 * innodb_io_capacity
最小值 100
最大值 2**32-1
如果刷新活動落後,
InnoDB
可以更積極地刷新,其每秒 I/O 操作次數 (IOPS) 高於innodb_io_capacity
變數所定義的值。innodb_io_capacity_max
變數定義InnoDB
背景工作在這種情況下執行的最大 IOPS 次數。此選項不控制innodb_flush_sync
行為。預設值是
innodb_io_capacity
值的兩倍。如需有關設定
innodb_io_capacity_max
變數的資訊,請參閱第 17.8.7 節,「設定 InnoDB I/O 容量」。 innodb_limit_optimistic_insert_debug
命令列格式 --innodb-limit-optimistic-insert-debug=#
系統變數 innodb_limit_optimistic_insert_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 2**32-1
限制每個 B 樹頁面的記錄數量。預設值 0 表示不強制限制。只有在使用
WITH_DEBUG
CMake 選項編譯偵錯支援時,此選項才可用。-
命令列格式 --innodb-lock-wait-timeout=#
系統變數 innodb_lock_wait_timeout
範圍 全域、工作階段 動態 是 SET_VAR
提示適用否 類型 整數 預設值 50
最小值 1
最大值 1073741824
單位 秒 InnoDB
交易在放棄之前等待資料列鎖定的時間長度(以秒為單位)。預設值為 50 秒。嘗試存取另一個InnoDB
交易鎖定的資料列的交易,最多會等待這麼多秒鐘以取得資料列的寫入存取權,然後發出下列錯誤ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
發生鎖定等待逾時時,會回溯目前的陳述式(而不是整個交易)。若要讓整個交易回溯,請使用
--innodb-rollback-on-timeout
選項啟動伺服器。另請參閱第 17.20.5 節,「InnoDB 錯誤處理」。您可能會為了高度互動式應用程式或 OLTP 系統而減少此值,以快速顯示使用者意見反應或將更新放入佇列以供稍後處理。您可能會為了長時間執行的後端操作(例如資料倉儲中的轉換步驟,需要等待其他大型插入或更新操作完成)而增加此值。
innodb_lock_wait_timeout
適用於InnoDB
資料列鎖定。MySQL 表格鎖定不會在InnoDB
內部發生,而且此逾時不適用於等待表格鎖定。當啟用
innodb_deadlock_detect
(預設值)時,鎖定等待逾時值不適用於死結,因為InnoDB
會立即偵測到死結並回溯其中一個死結交易。當停用innodb_deadlock_detect
時,發生死結時,InnoDB
會依賴innodb_lock_wait_timeout
進行交易回溯。請參閱第 17.7.5.2 節,「死結偵測」。innodb_lock_wait_timeout
可以在執行時使用SET GLOBAL
或SET SESSION
陳述式進行設定。變更GLOBAL
設定需要足夠的權限來設定全域系統變數(請參閱第 7.1.9.1 節「系統變數權限」),並且會影響後續連線的所有用戶端的操作。任何用戶端都可以變更innodb_lock_wait_timeout
的SESSION
設定,這只會影響該用戶端。 -
命令列格式 --innodb-log-buffer-size=#
系統變數 innodb_log_buffer_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 67108864
最小值 1048576
最大值 4294967295
InnoDB
用於寫入磁碟上的日誌檔案的緩衝區大小(以位元組為單位)。預設值為 64MB。較大的日誌緩衝區可讓大型的交易在提交之前,無需將日誌寫入磁碟即可執行。因此,如果您有更新、插入或刪除多個資料列的交易,則增大日誌緩衝區可以節省磁碟 I/O。有關相關資訊,請參閱記憶體組態,以及第 10.5.4 節「最佳化 InnoDB 重做日誌」。有關一般 I/O 調整建議,請參閱第 10.5.8 節「最佳化 InnoDB 磁碟 I/O」。 innodb_log_checkpoint_fuzzy_now
命令列格式 --innodb-log-checkpoint-fuzzy-now[={OFF|ON}]
系統變數 innodb_log_checkpoint_fuzzy_now
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用此偵錯選項以強制
InnoDB
寫入模糊檢查點。只有在使用WITH_DEBUG
CMake 選項編譯時加入偵錯支援時,此選項才可用。-
命令列格式 --innodb-log-checkpoint-now[={OFF|ON}]
系統變數 innodb_log_checkpoint_now
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用此偵錯選項以強制
InnoDB
寫入檢查點。只有在使用WITH_DEBUG
CMake 選項編譯時加入偵錯支援時,此選項才可用。 -
命令列格式 --innodb-log-checksums[={OFF|ON}]
系統變數 innodb_log_checksums
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
啟用或停用重做日誌頁面的檢查總和。
innodb_log_checksums=ON
為重做日誌頁面啟用CRC-32C
檢查總和演算法。當停用innodb_log_checksums
時,重做日誌頁面檢查總和欄位的內容將會被忽略。重做日誌標頭頁面和重做日誌檢查點頁面的檢查總和永遠不會停用。
-
命令列格式 --innodb-log-compressed-pages[={OFF|ON}]
系統變數 innodb_log_compressed_pages
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定是否將重新壓縮的頁面映像寫入重做日誌。當對壓縮資料進行變更時,可能會發生重新壓縮。
預設情況下會啟用
innodb_log_compressed_pages
,以防止在復原期間使用不同版本的zlib
壓縮演算法時可能發生的損毀。如果您確定zlib
版本不會變更,則可以停用innodb_log_compressed_pages
,以減少修改壓縮資料的工作負載所產生的重做日誌。若要測量啟用或停用
innodb_log_compressed_pages
的影響,請在相同工作負載下比較這兩種設定的重做日誌產生量。測量重做日誌產生量的選項包括觀察SHOW ENGINE INNODB STATUS
輸出之LOG
區段中的Log sequence number
(LSN),或監控寫入重做日誌檔案的位元組數的Innodb_os_log_written
狀態。有關相關資訊,請參閱第 17.9.1.6 節「OLTP 工作負載的壓縮」。
-
命令列格式 --innodb-log-file-size=#
已棄用 是 系統變數 innodb_log_file_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 50331648
最小值 4194304
最大值 512GB / innodb_log_files_in_group
單位 位元組 注意innodb_log_file_size
和innodb_log_files_in_group
已被innodb_redo_log_capacity
取代;請參閱第 17.6.5 節「重做日誌」。日誌群組中每個日誌檔案的大小(以位元組為單位)。日誌檔案的總大小(
innodb_log_file_size
*innodb_log_files_in_group
)不能超過略小於 512GB 的最大值。例如,一對 255 GB 的日誌檔案接近限制,但未超過限制。預設值為 48MB。一般而言,日誌檔案的總大小應足夠大,使伺服器能夠平穩處理工作負載活動中的高峰和低谷,這通常表示有足夠的重做日誌空間來處理超過一小時的寫入活動。值越大,緩衝池中所需的檢查點刷新活動就越少,從而節省磁碟 I/O。較大的日誌檔案也會使當機復原速度較慢。
innodb_log_file_size
的最小值為 4MB。有關相關資訊,請參閱重做日誌組態。有關一般 I/O 調整建議,請參閱第 10.5.8 節「最佳化 InnoDB 磁碟 I/O」。
如果啟用
innodb_dedicated_server
,則會自動設定innodb_log_file_size
值(如果未明確定義)。有關更多資訊,請參閱第 17.8.12 節「為專用 MySQL 伺服器啟用自動組態」。 -
命令列格式 --innodb-log-files-in-group=#
已棄用 是 系統變數 innodb_log_files_in_group
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 2
最小值 2
最大值 100
注意innodb_log_file_size
和innodb_log_files_in_group
已被innodb_redo_log_capacity
取代;請參閱第 17.6.5 節「重做日誌」。日誌群組中的日誌檔案數量。
InnoDB
會以循環方式寫入檔案。預設值(也是建議值)為 2。檔案的位置由innodb_log_group_home_dir
指定。日誌檔案的總大小(innodb_log_file_size
*innodb_log_files_in_group
)最大可達 512GB。有關相關資訊,請參閱重做日誌組態。
如果啟用
innodb_dedicated_server
,則會自動設定innodb_log_files_in_group
(如果未明確定義)。有關更多資訊,請參閱第 17.8.12 節「為專用 MySQL 伺服器啟用自動組態」。 -
命令列格式 --innodb-log-group-home-dir=dir_name
系統變數 innodb_log_group_home_dir
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 InnoDB
重做日誌檔案的目錄路徑。有關相關資訊,請參閱重做日誌組態。
-
命令列格式 --innodb-log-spin-cpu-abs-lwm=#
系統變數 innodb_log_spin_cpu_abs_lwm
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 80
最小值 0
最大值 4294967295
定義 CPU 使用率的最小值,低於此值時,使用者執行緒在等待刷新的重做時不再旋轉。該值表示為 CPU 核心使用率的總和。例如,預設值 80 是單個 CPU 核心的 80%。在具有多核心處理器的系統上,值 150 表示一個 CPU 核心的 100% 使用率加上第二個 CPU 核心的 50% 使用率。
有關相關資訊,請參閱第 10.5.4 節「最佳化 InnoDB 重做日誌」。
-
命令列格式 --innodb-log-spin-cpu-pct-hwm=#
系統變數 innodb_log_spin_cpu_pct_hwm
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 50
最小值 0
最大值 100
定義 CPU 使用率的最大值,高於此值時,使用者執行緒在等待刷新的重做時不再旋轉。該值表示為所有 CPU 核心的組合總處理能力的百分比。預設值為 50%。例如,在具有四個 CPU 核心的伺服器上,兩個 CPU 核心的 100% 使用率是組合 CPU 處理能力的 50%。
innodb_log_spin_cpu_pct_hwm
變數會考量處理器親和性。例如,如果伺服器有 48 個核心,但 mysqld 程序只固定到四個 CPU 核心,則會忽略其他 44 個 CPU 核心。有關相關資訊,請參閱第 10.5.4 節「最佳化 InnoDB 重做日誌」。
innodb_log_wait_for_flush_spin_hwm
命令列格式 --innodb-log-wait-for-flush-spin-hwm=#
系統變數 innodb_log_wait_for_flush_spin_hwm
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 400
最小值 0
最大值 2**32-1
單位 微秒 定義使用者執行緒在等待 redo 記錄刷新時,不再自旋 (spin) 等待的最大平均日誌刷新時間。預設值為 400 微秒。
有關相關資訊,請參閱第 10.5.4 節「最佳化 InnoDB 重做日誌」。
-
命令列格式 --innodb-log-write-ahead-size=#
系統變數 innodb_log_write_ahead_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 8192
最小值 512 (日誌檔案區塊大小)
最大值 與 innodb_page_size 相同
單位 位元組 定義 redo 日誌的預寫區塊大小,以位元組為單位。為避免「寫入時讀取」(read-on-write),請將
innodb_log_write_ahead_size
設定為符合作業系統或檔案系統快取區塊大小。預設設定為 8192 位元組。當 redo 日誌區塊因 redo 日誌的預寫區塊大小與作業系統或檔案系統快取區塊大小不符,而未完全快取至作業系統或檔案系統時,就會發生寫入時讀取。innodb_log_write_ahead_size
的有效值為InnoDB
日誌檔案區塊大小 (2n) 的倍數。最小值為InnoDB
日誌檔案區塊大小 (512)。指定最小值時,不會發生預寫。最大值等於innodb_page_size
值。如果您為innodb_log_write_ahead_size
指定的值大於innodb_page_size
值,innodb_log_write_ahead_size
設定將截斷為innodb_page_size
值。相對於作業系統或檔案系統快取區塊大小,
innodb_log_write_ahead_size
值設定太低會導致「寫入時讀取」。設定值太高可能會因為一次寫入多個區塊,而對日誌檔案寫入的fsync
效能產生輕微影響。有關相關資訊,請參閱第 10.5.4 節「最佳化 InnoDB 重做日誌」。
-
命令列格式 --innodb-log-writer-threads[={OFF|ON}]
系統變數 innodb_log_writer_threads
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
啟用專用的日誌寫入器執行緒,以將 redo 日誌記錄從日誌緩衝區寫入系統緩衝區,並將系統緩衝區刷新到 redo 日誌檔案。專用的日誌寫入器執行緒可以提高高並行系統的效能,但對於低並行系統,停用專用的日誌寫入器執行緒可以提供更好的效能。
如需更多資訊,請參閱第 10.5.4 節,"最佳化 InnoDB Redo 日誌"。
-
命令列格式 --innodb-lru-scan-depth=#
系統變數 innodb_lru_scan_depth
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1024
最小值 100
最大值 2**32-1
一個影響
InnoDB
緩衝池 刷新 操作的演算法和啟發式方法的參數。主要用於效能專家調整 I/O 密集型工作負載。它指定每個緩衝池實例,頁面清理器執行緒掃描緩衝池 LRU 頁面列表多深以尋找要刷新的髒頁面。這是每秒執行一次的背景操作。小於預設值的設定通常適用於大多數工作負載。大於必要的值可能會影響效能。只有在典型工作負載下有備用的 I/O 容量時,才考慮增加該值。相反地,如果寫入密集型工作負載使 I/O 容量飽和,請減小該值,尤其是在大型緩衝池的情況下。
在調整
innodb_lru_scan_depth
時,從較低的值開始,然後向上配置設定,目標是很少看到零個可用頁面。此外,由於innodb_lru_scan_depth
*innodb_buffer_pool_instances
定義頁面清理器執行緒每秒執行的工作量,因此在變更緩衝池實例的數量時,請考慮調整innodb_lru_scan_depth
。如需相關資訊,請參閱第 17.8.3.5 節,"設定緩衝池刷新"。如需一般 I/O 調整建議,請參閱第 10.5.8 節,"最佳化 InnoDB 磁碟 I/O"。
-
命令列格式 --innodb-max-dirty-pages-pct=#
系統變數 innodb_max_dirty_pages_pct
範圍 全域 動態 是 SET_VAR
提示適用否 類型 數值 預設值 90
最小值 0
最大值 99.999
InnoDB
會嘗試從緩衝池刷新資料,以便髒頁面的百分比不超過此值。innodb_max_dirty_pages_pct
設定為刷新活動建立目標。它不會影響刷新的速率。如需有關管理刷新速率的資訊,請參閱第 17.8.3.5 節,"設定緩衝池刷新"。如需相關資訊,請參閱第 17.8.3.5 節,"設定緩衝池刷新"。如需一般 I/O 調整建議,請參閱第 10.5.8 節,"最佳化 InnoDB 磁碟 I/O"。
innodb_max_dirty_pages_pct_lwm
命令列格式 --innodb-max-dirty-pages-pct-lwm=#
系統變數 innodb_max_dirty_pages_pct_lwm
範圍 全域 動態 是 SET_VAR
提示適用否 類型 數值 預設值 10
最小值 0
最大值 99.999
定義一個低水位標記,表示啟用預先刷新以控制髒頁面比率的髒頁面百分比。值 0 會完全停用預先刷新行為。設定的值應始終低於
innodb_max_dirty_pages_pct
值。如需更多資訊,請參閱第 17.8.3.5 節,"設定緩衝池刷新"。-
命令列格式 --innodb-max-purge-lag=#
系統變數 innodb_max_purge_lag
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 4294967295
定義所需的最大清除延遲。如果超過此值,則會對
INSERT
、UPDATE
和DELETE
操作施加延遲,以便為清除趕上進度爭取時間。預設值為 0,表示沒有最大清除延遲,也沒有延遲。如需更多資訊,請參閱第 17.8.9 節,"清除設定"。
-
命令列格式 --innodb-max-purge-lag-delay=#
系統變數 innodb_max_purge_lag_delay
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 10000000
單位 微秒 指定當超過
innodb_max_purge_lag
閾值時,施加的延遲的最大微秒數。指定的innodb_max_purge_lag_delay
值是innodb_max_purge_lag
公式計算的延遲期間的上限。如需更多資訊,請參閱第 17.8.9 節,"清除設定"。
-
命令列格式 --innodb-max-undo-log-size=#
系統變數 innodb_max_undo_log_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1073741824
最小值 10485760
最大值 2**64-1
單位 位元組 定義還原表空間的閾值大小。如果還原表空間超過閾值,則在啟用
innodb_undo_log_truncate
時,可以將其標記為截斷。預設值為 1073741824 位元組 (1024 MiB)。如需更多資訊,請參閱截斷還原表空間。
innodb_merge_threshold_set_all_debug
命令列格式 --innodb-merge-threshold-set-all-debug=#
系統變數 innodb_merge_threshold_set_all_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 50
最小值 1
最大值 50
定義索引頁面的頁面填滿百分比值,該值會覆寫字典快取中目前所有索引的
MERGE_THRESHOLD
設定。僅當使用WITH_DEBUG
CMake 選項編譯進偵錯支援時,此選項才可用。如需相關資訊,請參閱第 17.8.11 節,"設定索引頁面的合併閾值"。-
命令列格式 --innodb-monitor-disable={counter|module|pattern|all}
系統變數 innodb_monitor_disable
範圍 全域 動態 是 SET_VAR
提示適用否 類型 字串 此變數充當開關,停用
InnoDB
指標計數器。可以使用 Information SchemaINNODB_METRICS
表格查詢計數器資料。如需使用資訊,請參閱第 17.15.6 節,"InnoDB INFORMATION_SCHEMA 指標表格"。innodb_monitor_disable='latch'
會停用SHOW ENGINE INNODB MUTEX
的統計資料收集。如需更多資訊,請參閱第 15.7.7.16 節,"SHOW ENGINE 陳述式"。 -
命令列格式 --innodb-monitor-enable={counter|module|pattern|all}
系統變數 innodb_monitor_enable
範圍 全域 動態 是 SET_VAR
提示適用否 類型 字串 此變數作為一個開關,啟用
InnoDB
度量計數器。可以使用 Information SchemaINNODB_METRICS
表格查詢計數器資料。有關使用資訊,請參閱第 17.15.6 節,「InnoDB INFORMATION_SCHEMA 度量表格」。innodb_monitor_enable='latch'
啟用SHOW ENGINE INNODB MUTEX
的統計資料收集。如需更多資訊,請參閱第 15.7.7.16 節,「SHOW ENGINE 陳述式」。 -
命令列格式 --innodb-monitor-reset={counter|module|pattern|all}
系統變數 innodb_monitor_reset
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 NULL
有效值 counter
module
pattern
all
此變數作為一個開關,將
InnoDB
度量計數器的計數值重設為零。可以使用 Information SchemaINNODB_METRICS
表格查詢計數器資料。有關使用資訊,請參閱第 17.15.6 節,「InnoDB INFORMATION_SCHEMA 度量表格」。innodb_monitor_reset='latch'
重設SHOW ENGINE INNODB MUTEX
報告的統計資料。如需更多資訊,請參閱第 15.7.7.16 節,「SHOW ENGINE 陳述式」。 -
命令列格式 --innodb-monitor-reset-all={counter|module|pattern|all}
系統變數 innodb_monitor_reset_all
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 NULL
有效值 counter
module
pattern
all
此變數作為一個開關,重設
InnoDB
度量計數器的所有值(最小值、最大值等等)。可以使用 Information SchemaINNODB_METRICS
表格查詢計數器資料。有關使用資訊,請參閱第 17.15.6 節,「InnoDB INFORMATION_SCHEMA 度量表格」。 -
命令列格式 --innodb-numa-interleave[={OFF|ON}]
系統變數 innodb_numa_interleave
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 ON
啟用 NUMA 交錯記憶體原則,以分配
InnoDB
緩衝池。當啟用innodb_numa_interleave
時,mysqld 程序的 NUMA 記憶體原則會設定為MPOL_INTERLEAVE
。在分配InnoDB
緩衝池後,NUMA 記憶體原則會設定回MPOL_DEFAULT
。若要使innodb_numa_interleave
選項可用,MySQL 必須在啟用 NUMA 的 Linux 系統上編譯。如果系統支援,預設值為ON
,否則預設值為OFF
。CMake 會根據目前平台是否支援
NUMA
,設定預設的WITH_NUMA
值。如需更多資訊,請參閱第 2.8.7 節,「MySQL 來源組態選項」。 -
命令列格式 --innodb-old-blocks-pct=#
系統變數 innodb_old_blocks_pct
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 37
最小值 5
最大值 95
指定用於舊區塊子列表的
InnoDB
緩衝池的大約百分比。值的範圍是 5 到 95。預設值是 37(也就是池的 3/8)。通常與innodb_old_blocks_time
組合使用。如需更多資訊,請參閱第 17.8.3.3 節,「使緩衝池具有掃描抵抗能力」。如需有關緩衝池管理、LRU 演算法和逐出原則的資訊,請參閱第 17.5.1 節,「緩衝池」。
-
命令列格式 --innodb-old-blocks-time=#
系統變數 innodb_old_blocks_time
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1000
最小值 0
最大值 2**32-1
單位 毫秒 非零值可防止緩衝池被僅在短時間內參考的資料填滿,例如在完整表格掃描期間。增加此值可提供更多保護,防止完整表格掃描干擾緩衝池中快取的資料。
指定插入到舊子列表的區塊,在第一次存取後,必須在其中停留多少毫秒,才能移至新的子列表。如果值為 0,則插入到舊子列表的區塊,在第一次存取時會立即移至新的子列表,無論存取發生在插入後多久。如果該值大於 0,則區塊會保留在舊子列表中,直到存取發生在第一次存取後至少這麼多毫秒。例如,值為 1000 會導致區塊在第一次存取後於舊子列表中停留 1 秒,然後才有資格移至新的子列表。
預設值為 1000。
此變數通常與
innodb_old_blocks_pct
組合使用。如需更多資訊,請參閱第 17.8.3.3 節,「使緩衝池具有掃描抵抗能力」。如需有關緩衝池管理、LRU 演算法和逐出原則的資訊,請參閱第 17.5.1 節,「緩衝池」。 innodb_online_alter_log_max_size
命令列格式 --innodb-online-alter-log-max-size=#
系統變數 innodb_online_alter_log_max_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 134217728
最小值 65536
最大值 2**64-1
單位 位元組 指定在
InnoDB
表格的線上 DDL 作業期間使用的臨時記錄檔大小的上限(以位元組為單位)。對於正在建立的每個索引或正在變更的表格,都有一個這樣的記錄檔。此記錄檔會儲存在 DDL 作業期間插入、更新或刪除在表格中的資料。臨時記錄檔會根據需要以innodb_sort_buffer_size
的值擴充,直到innodb_online_alter_log_max_size
指定的最大值為止。如果臨時記錄檔超過大小上限,則ALTER TABLE
作業會失敗,並且所有未提交的並行 DML 作業都會復原。因此,此選項的較大值允許在線上 DDL 作業期間發生更多 DML,但也延長了 DDL 作業結束時鎖定表格以應用記錄中資料的時間。-
命令列格式 --innodb-open-files=#
系統變數 innodb_open_files
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 -1
(表示自動調整大小;請勿指派此文字值)最小值 10
最大值 2147483647
指定
InnoDB
一次可以開啟的最大檔案數量。最小值為 10。如果停用innodb_file_per_table
,則預設值為 300;否則,預設值為 300 或table_open_cache
設定(以較高者為準)。可以使用
SELECT innodb_set_open_files_limit(
陳述式在執行階段設定N
)innodb_open_files
限制,其中N
是所需的innodb_open_files
限制;例如mysql> SELECT innodb_set_open_files_limit(1000);
此陳述式會執行設定新限制的預存程序。如果程序成功,它會傳回新設定的限制值;否則,會傳回失敗訊息。
不允許使用
SET
陳述式設定innodb_open_files
。若要在執行階段設定innodb_open_files
,請使用上述的SELECT innodb_set_open_files_limit(
陳述式。N
)不支援設定
innodb_open_files=default
。僅允許使用整數值。為了防止非 LRU 管理的檔案耗盡整個
innodb_open_files
限制,非 LRU 管理的檔案會限制為此限制的 90%,這會為 LRU 管理的檔案保留 10% 的限制。 -
命令列格式 --innodb-optimize-fulltext-only[={OFF|ON}]
系統變數 innodb_optimize_fulltext_only
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
變更
OPTIMIZE TABLE
在InnoDB
表格上的運作方式。目的是在維護具有FULLTEXT
索引的InnoDB
表格期間暫時啟用。預設情況下,
OPTIMIZE TABLE
會重新組織資料表中叢集索引中的資料。當啟用此選項時,OPTIMIZE TABLE
會略過資料表的重新組織,而是處理InnoDB
FULLTEXT
索引中新加入、刪除和更新的符記資料。如需更多資訊,請參閱最佳化 InnoDB 全文索引。 -
命令列格式 --innodb-page-cleaners=#
系統變數 innodb_page_cleaners
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 innodb_buffer_pool_instances
最小值 1
最大值 64
從緩衝池實例刷新髒頁的頁面清除執行緒數量。頁面清除執行緒會執行刷新列表和 LRU 刷新。當有多個頁面清除執行緒時,每個緩衝池實例的緩衝池刷新任務會被派發到閒置的頁面清除執行緒。
innodb_page_cleaners
的預設值設定為與innodb_buffer_pool_instances
相同的值。如果指定的頁面清除執行緒數量超過緩衝池實例的數量,則innodb_page_cleaners
會自動設定為與innodb_buffer_pool_instances
相同的值。如果您的工作負載在將髒頁從緩衝池實例刷新到資料檔案時受寫入 I/O 限制,並且您的系統硬體有可用容量,則增加頁面清除執行緒的數量可能會有助於提高寫入 I/O 的輸送量。
多執行緒頁面清除器支援擴展到關機和復原階段。
在支援的 Linux 平台上,且 mysqld 執行使用者有權將
page_cleaner
執行緒的優先順序高於其他 MySQL 和InnoDB
執行緒,以協助頁面刷新跟上目前的工作負載時,會使用setpriority()
系統呼叫。setpriority()
支援由以下InnoDB
啟動訊息表示[Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
對於系統啟動和關閉不是由 systemd 管理的系統,可以在
/etc/security/limits.conf
中設定 mysqld 執行使用者授權。例如,如果 mysqld 在mysql
使用者下執行,您可以透過將這些行新增至/etc/security/limits.conf
來授權mysql
使用者mysql hard nice -20 mysql soft nice -20
對於 systemd 管理的系統,可以透過在本地化的 systemd 設定檔案中指定
LimitNICE=-20
來實現相同的目的。例如,在/etc/systemd/system/mysqld.service.d/override.conf
中建立一個名為override.conf
的檔案,並新增此項目[Service] LimitNICE=-20
建立或變更
override.conf
之後,請重新載入 systemd 設定,然後告知 systemd 重新啟動 MySQL 服務systemctl daemon-reload systemctl restart mysqld # RPM platforms systemctl restart mysql # Debian platforms
如需更多關於使用本地化 systemd 設定檔案的資訊,請參閱為 MySQL 設定 systemd。
授權 mysqld 執行使用者之後,請使用 cat 命令驗證 mysqld 程序的已設定
Nice
限制$> cat /proc/mysqld_pid/limits | grep nice Max nice priority 18446744073709551596 18446744073709551596
-
命令列格式 --innodb-page-size=#
系統變數 innodb_page_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 列舉 預設值 16384
有效值 4096
8192
16384
32768
65536
指定
InnoDB
表空間的頁面大小。值可以用位元組或千位元組指定。例如,16 千位元組的頁面大小值可以指定為 16384、16KB 或 16k。innodb_page_size
只能在初始化 MySQL 執行個體之前設定,之後無法變更。如果未指定任何值,則執行個體會使用預設頁面大小初始化。請參閱第 17.8.1 節,「InnoDB 啟動組態」。對於 32KB 和 64KB 頁面大小,最大資料列長度大約為 16000 個位元組。當
innodb_page_size
設定為 32KB 或 64KB 時,不支援ROW_FORMAT=COMPRESSED
。對於innodb_page_size=32KB
,範圍大小為 2MB。對於innodb_page_size=64KB
,範圍大小為 4MB。使用 32KB 或 64KB 頁面大小時,innodb_log_buffer_size
應至少設定為 16MB (預設值為 64MB)。預設的 16KB 頁面大小或更大的頁面大小適用於各種工作負載,特別是對於涉及資料表掃描和涉及批量更新的 DML 操作的查詢。較小的頁面大小對於涉及許多小寫入的 OLTP 工作負載可能更有效率,在這種情況下,當單一頁面包含許多資料列時,爭用可能會成為問題。較小的頁面對於SSD 儲存裝置也可能有效率,這些裝置通常使用較小的區塊大小。使
InnoDB
頁面大小接近儲存裝置區塊大小,可以盡量減少重新寫入磁碟的未變更資料量。第一個系統表空間資料檔案 (
ibdata1
) 的最小檔案大小會根據innodb_page_size
值而有所不同。如需更多資訊,請參閱innodb_data_file_path
選項說明。使用特定
InnoDB
頁面大小的 MySQL 執行個體無法使用來自使用不同頁面大小的執行個體的資料檔案或記錄檔。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。
-
命令列格式 --innodb-parallel-read-threads=#
系統變數 innodb_parallel_read_threads
範圍 Session 動態 是 SET_VAR
提示適用否 類型 整數 預設值 (可用的邏輯處理器 / 8),最小值為 4
最小值 1
最大值 256
定義可用於平行叢集索引讀取的執行緒數量。也支援平行掃描分割區。平行讀取執行緒可以改善
CHECK TABLE
的效能。InnoDB
在CHECK TABLE
操作期間會讀取叢集索引兩次。第二次讀取可以平行執行。此功能不適用於次要索引掃描。必須將innodb_parallel_read_threads
工作階段變數設定為大於 1 的值,才會發生平行叢集索引讀取。用於執行平行叢集索引讀取的實際執行緒數量由innodb_parallel_read_threads
設定或要掃描的索引子樹數量決定,取兩者較小者。掃描期間讀取到緩衝池的頁面會保留在緩衝池 LRU 清單的尾端,以便在需要可用緩衝池頁面時可以快速捨棄。平行讀取執行緒的最大數量 (256) 是所有用戶端連線的執行緒總數。如果達到執行緒限制,連線會回退為使用單一執行緒。預設值是透過系統上可用的邏輯處理器數量除以 8 計算得出,預設最小值為 4。
在 MySQL 8.4 之前,預設值始終為 4。
-
命令列格式 --innodb-print-all-deadlocks[={OFF|ON}]
系統變數 innodb_print_all_deadlocks
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
當啟用此選項時,
InnoDB
使用者交易中所有死鎖的資訊會記錄在mysqld
錯誤記錄中。否則,您只會看到使用SHOW ENGINE INNODB STATUS
陳述式時,關於最後一個死鎖的資訊。偶爾出現InnoDB
死鎖不一定是問題,因為InnoDB
會立即偵測到情況,並自動回復其中一個交易。您可以使用此選項來疑難排解為何會發生死鎖,如果應用程式沒有適當的錯誤處理邏輯來偵測回覆並重試其操作。大量死鎖可能表示需要重新建構發出多個資料表的 DML 或SELECT ... FOR UPDATE
陳述式的交易,以便每個交易以相同的順序存取資料表,從而避免死鎖情況。如需相關資訊,請參閱第 17.7.5 節,「InnoDB 中的死鎖」。
-
命令列格式 --innodb-print-ddl-logs[={OFF|ON}]
系統變數 innodb_print_ddl_logs
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用此選項會使 MySQL 將 DDL 記錄寫入
stderr
。如需更多資訊,請參閱檢視 DDL 記錄。 -
命令列格式 --innodb-purge-batch-size=#
系統變數 innodb_purge_batch_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 300
最小值 1
最大值 5000
定義從歷史列表中,清除操作在一個批次中解析和處理的 undo 日誌頁面數量。在多執行緒清除配置中,協調器清除執行緒會將
innodb_purge_batch_size
除以innodb_purge_threads
,並將該數量的頁面分配給每個清除執行緒。innodb_purge_batch_size
變數也定義了清除操作在每次遍歷 undo 日誌 128 次迭代後所釋放的 undo 日誌頁面數量。innodb_purge_batch_size
選項旨在與innodb_purge_threads
設定結合使用,進行進階效能調整。大多數使用者不需要將innodb_purge_batch_size
從預設值變更。如需相關資訊,請參閱第 17.8.9 節,「清除配置」。
-
命令列格式 --innodb-purge-threads=#
系統變數 innodb_purge_threads
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 如果可用的邏輯處理器數量 <= 16,則為 1;否則為 4
最小值 1
最大值 32
專用於
InnoDB
清除操作的背景執行緒數量。增加此值會建立額外的清除執行緒,這可以提高在多個表格上執行 DML 操作的系統的效率。如需相關資訊,請參閱第 17.8.9 節,「清除配置」。
innodb_purge_rseg_truncate_frequency
命令列格式 --innodb-purge-rseg-truncate-frequency=#
系統變數 innodb_purge_rseg_truncate_frequency
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 128
最小值 1
最大值 128
定義清除系統釋放回滾段的頻率,以清除操作的調用次數來表示。在回滾段被釋放之前,undo 表空間無法截斷。通常,清除系統在每次調用清除操作 128 次後會釋放回滾段。預設值為 128。減少此值會增加清除執行緒釋放回滾段的頻率。
innodb_purge_rseg_truncate_frequency
旨在與innodb_undo_log_truncate
一起使用。如需更多資訊,請參閱截斷 Undo 表空間。-
命令列格式 --innodb-random-read-ahead[={OFF|ON}]
系統變數 innodb_random_read_ahead
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用隨機預讀技術,以最佳化
InnoDB
I/O。如需不同類型預讀請求的效能考量詳細資訊,請參閱第 17.8.3.4 節,「設定 InnoDB 緩衝池預先提取(預讀)」。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。
-
命令列格式 --innodb-read-ahead-threshold=#
系統變數 innodb_read_ahead_threshold
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 56
最小值 0
最大值 64
控制
InnoDB
用於預先提取頁面到緩衝池的線性預讀靈敏度。如果InnoDB
從一個區塊(64 頁)連續讀取至少innodb_read_ahead_threshold
頁面,它會為後續的整個區塊啟動非同步讀取。允許的值範圍為 0 到 64。值為 0 會停用預讀。對於預設值 56,InnoDB
必須從一個區塊連續讀取至少 56 頁才能為後續區塊啟動非同步讀取。了解透過預讀機制讀取的頁面數量,以及這些頁面中有多少在從未被存取的情況下從緩衝池中逐出,對於微調
innodb_read_ahead_threshold
設定會很有幫助。SHOW ENGINE INNODB STATUS
輸出會顯示來自Innodb_buffer_pool_read_ahead
和Innodb_buffer_pool_read_ahead_evicted
全域狀態變數的計數器資訊,這些變數會報告由預讀請求帶入緩衝池的頁面數量,以及這些頁面中有多少在從未被存取的情況下從緩衝池逐出。狀態變數會報告自上次伺服器重新啟動以來的全域值。SHOW ENGINE INNODB STATUS
也會顯示預讀頁面的讀取速率,以及這些頁面在未被存取的情況下逐出的速率。每秒平均值是根據自上次調用SHOW ENGINE INNODB STATUS
以來收集的統計資料,並顯示在SHOW ENGINE INNODB STATUS
輸出的BUFFER POOL AND MEMORY
區段中。如需更多資訊,請參閱第 17.8.3.4 節,「設定 InnoDB 緩衝池預先提取(預讀)」。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。
-
命令列格式 --innodb-read-io-threads=#
系統變數 innodb_read_io_threads
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 (可用的邏輯處理器 / 2),最小值為 4
最小值 1
最大值 64
用於
InnoDB
中讀取操作的 I/O 執行緒數量。它的寫入執行緒對應項是innodb_write_io_threads
。如需更多資訊,請參閱第 17.8.5 節,「設定背景 InnoDB I/O 執行緒的數量」。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。預設值是系統上可用邏輯處理器的數量除以 2,最小值為預設值 4。在 MySQL 8.4 之前,預設值始終為 4。
注意在 Linux 系統上,使用
innodb_read_io_threads
、innodb_write_io_threads
和 Linuxaio-max-nr
設定的預設設定執行多個 MySQL 伺服器(通常超過 12 個)可能會超出系統限制。理想情況下,增加aio-max-nr
設定;作為替代方案,您可以減少一個或兩個 MySQL 變數的設定。 -
命令列格式 --innodb-read-only[={OFF|ON}]
系統變數 innodb_read_only
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 OFF
以唯讀模式啟動
InnoDB
。適用於在唯讀媒體上發布資料庫應用程式或資料集。也可以在資料倉儲中使用,以在多個執行個體之間共用相同的資料目錄。如需更多資訊,請參閱第 17.8.2 節,「設定 InnoDB 以進行唯讀操作」。啟用
innodb_read_only
會阻止所有儲存引擎(而不僅僅是InnoDB
)建立和刪除表格。任何儲存引擎的表格建立和刪除操作都會修改mysql
系統資料庫中的資料字典表格,但這些表格使用InnoDB
儲存引擎,並且在啟用innodb_read_only
時無法修改。相同的原則適用於需要修改資料字典表格的其他表格操作。範例如果啟用
innodb_read_only
系統變數,ANALYZE TABLE
可能會失敗,因為它無法更新資料字典中使用的InnoDB
統計資料表格。對於更新索引鍵分佈的ANALYZE TABLE
操作,即使該操作更新表格本身(例如,如果它是MyISAM
表格),也可能會發生失敗。若要取得更新的分佈統計資料,請設定information_schema_stats_expiry=0
。ALTER TABLE
會失敗,因為它會更新儲存在資料字典中的儲存引擎指定。tbl_name
ENGINE=engine_name
此外,
mysql
系統資料庫中的其他表格會使用InnoDB
儲存引擎。將這些表格設為唯讀會導致對修改它們的操作產生限制。範例帳戶管理陳述式(例如
CREATE USER
和GRANT
)會失敗,因為授與表格使用InnoDB
。INSTALL PLUGIN
和UNINSTALL PLUGIN
外掛程式管理陳述式會失敗,因為mysql.plugin
系統表格使用InnoDB
。CREATE FUNCTION
和DROP FUNCTION
可載入函式管理陳述式會失敗,因為mysql.func
系統表格使用InnoDB
。
-
命令列格式 --innodb-redo-log-archive-dirs
系統變數 innodb_redo_log_archive_dirs
範圍 全域 動態 是 SET_VAR
提示適用否 類型 字串 預設值 NULL
定義可建立重做日誌封存檔案的已標記目錄。您可以在以分號分隔的清單中定義多個已標記的目錄。例如:
innodb_redo_log_archive_dirs='label1:/backups1;label2:/backups2'
標籤可以是任何字元字串,但冒號 (:) 除外,不允許使用冒號。也允許使用空標籤,但這種情況下仍然需要冒號 (:)。
必須指定路徑,且目錄必須存在。路徑可以包含冒號 (:),但不允許使用分號 (;)。
-
命令列格式 --innodb-redo-log-capacity=#
系統變數 innodb_redo_log_capacity
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 104857600
最小值 8388608
最大值 549755813888
單位 位元組 定義重做日誌檔案所佔用的磁碟空間量。
innodb_redo_log_capacity
取代了innodb_log_files_in_group
和innodb_log_file_size
變數,如果定義了innodb_redo_log_capacity
,則會忽略這兩個變數。如果未定義
innodb_redo_log_capacity
,且未定義innodb_log_file_size
或innodb_log_files_in_group
,則會使用預設的innodb_redo_log_capacity
值。如果未定義
innodb_redo_log_capacity
,且定義了innodb_log_file_size
和/或innodb_log_files_in_group
,則 InnoDB 重做日誌容量會計算為 (innodb_log_files_in_group * innodb_log_file_size)。此計算不會修改未使用的innodb_redo_log_capacity
設定值。Innodb_redo_log_capacity_resized
伺服器狀態變數表示所有重做日誌檔案的重做日誌總容量。如果啟用
innodb_dedicated_server
,則如果未明確定義innodb_redo_log_capacity
值,則會自動設定該值。如需詳細資訊,請參閱 第 17.8.12 節,「為專用 MySQL 伺服器啟用自動組態」。如需詳細資訊,請參閱 第 17.6.5 節,「重做日誌」。
-
命令列格式 --innodb-redo-log-encrypt[={OFF|ON}]
系統變數 innodb_redo_log_encrypt
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
控制使用
InnoDB
靜態資料加密功能加密的表格之重做日誌資料加密。預設會停用重做日誌資料加密。如需詳細資訊,請參閱 重做日誌加密。 -
命令列格式 --innodb-replication-delay=#
系統變數 innodb_replication_delay
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 4294967295
單位 毫秒 如果達到
innodb_thread_concurrency
,複本伺服器上的複寫執行緒延遲,以毫秒為單位。 -
命令列格式 --innodb-rollback-on-timeout[={OFF|ON}]
系統變數 innodb_rollback_on_timeout
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 OFF
預設情況下,
InnoDB
在交易逾時時只會回滾最後一個陳述式。如果指定了--innodb-rollback-on-timeout
,則交易逾時會導致InnoDB
中止並回滾整個交易。如需詳細資訊,請參閱 第 17.20.5 節,「InnoDB 錯誤處理」。
-
命令列格式 --innodb-rollback-segments=#
系統變數 innodb_rollback_segments
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 128
最小值 1
最大值 128
innodb_rollback_segments
定義分配給每個還原資料表空間和全域暫時資料表空間的回滾區段數量,以供產生還原記錄的交易使用。每個回滾區段支援的交易數量取決於InnoDB
的頁面大小,以及每個交易分配的還原日誌數量。如需詳細資訊,請參閱 第 17.6.6 節,「還原日誌」。如需相關資訊,請參閱 第 17.3 節,「InnoDB 多版本控制」。如需還原資料表空間的相關資訊,請參閱 第 17.6.3.4 節,「還原資料表空間」。
innodb_saved_page_number_debug
命令列格式 --innodb-saved-page-number-debug=#
系統變數 innodb_saved_page_number_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 2**32-1
儲存頁碼。設定
innodb_fil_make_page_dirty_debug
選項會將innodb_saved_page_number_debug
定義的頁面標記為髒頁。innodb_saved_page_number_debug
選項僅在使用WITH_DEBUG
CMake 選項編譯時,才會提供除錯支援。-
命令列格式 --innodb-segment-reserve-factor=#
系統變數 innodb_segment_reserve_factor
範圍 全域 動態 是 SET_VAR
提示適用否 類型 數值 預設值 12.5
最小值 0.03
最大值 40
定義保留為空頁面的資料表空間檔案區段頁面百分比。此設定適用於每個表格的檔案和一般資料表空間。
innodb_segment_reserve_factor
預設設定為 12.5%,這與先前 MySQL 版本中保留的頁面百分比相同。如需詳細資訊,請參閱 設定保留檔案區段頁面的百分比。
-
命令列格式 --innodb-sort-buffer-size=#
系統變數 innodb_sort_buffer_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 1048576
最小值 65536
最大值 67108864
單位 位元組 此變數定義在 線上 DDL 作業期間記錄並行 DML 時,臨時日誌檔案擴充的大小,以及臨時日誌檔案讀取緩衝區和寫入緩衝區的大小。
如需詳細資訊,請參閱 第 17.12.3 節,「線上 DDL 空間需求」。
-
命令列格式 --innodb-spin-wait-delay=#
系統變數 innodb_spin_wait_delay
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 6
最小值 0
最大值 1000
旋轉鎖定的輪詢之間的最大延遲。此機制的低階實作會因硬體和作業系統的組合而異,因此延遲不對應於固定的時間間隔。
可與
innodb_spin_wait_pause_multiplier
變數結合使用,以更精確地控制旋轉鎖定輪詢延遲的持續時間。如需詳細資訊,請參閱 第 17.8.8 節,「設定旋轉鎖定輪詢」。
innodb_spin_wait_pause_multiplier
命令列格式 --innodb-spin-wait-pause-multiplier=#
系統變數 innodb_spin_wait_pause_multiplier
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 50
最小值 0
最大值 100
定義一個乘數值,用於決定當執行緒等待取得互斥鎖或讀寫鎖時,旋轉等待迴圈中 PAUSE 指令的數量。
如需詳細資訊,請參閱 第 17.8.8 節,「設定旋轉鎖定輪詢」。
-
命令列格式 --innodb-stats-auto-recalc[={OFF|ON}]
系統變數 innodb_stats_auto_recalc
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
導致
InnoDB
在表格中的資料發生重大變更後,自動重新計算永久統計資料。閾值為表格中列的 10%。此設定適用於啟用innodb_stats_persistent
選項時建立的表格。也可以在CREATE TABLE
或ALTER TABLE
陳述式中指定STATS_AUTO_RECALC=1
來設定自動統計資料重新計算。用於產生統計資料的資料取樣量由innodb_stats_persistent_sample_pages
變數控制。如需詳細資訊,請參閱 第 17.8.10.1 節,「設定永久最佳化工具統計資料參數」。
innodb_stats_include_delete_marked
命令列格式 --innodb-stats-include-delete-marked[={OFF|ON}]
系統變數 innodb_stats_include_delete_marked
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
預設情況下,
InnoDB
在計算統計資料時會讀取未提交的資料。在未提交的交易從表格中刪除列的情況下,InnoDB
在計算列估計值和索引統計資料時,會排除標記為已刪除的記錄,這可能會導致其他使用交易隔離層級(而非READ UNCOMMITTED
)並行操作表格的交易產生非最佳的執行計畫。為了避免這種情況,可以啟用innodb_stats_include_delete_marked
,以確保InnoDB
在計算永久最佳化工具統計資料時,會包含標記為已刪除的記錄。啟用
innodb_stats_include_delete_marked
時,ANALYZE TABLE
在重新計算統計資料時會考慮標記為已刪除的記錄。innodb_stats_include_delete_marked
是一個全域設定,會影響所有InnoDB
表格。它僅適用於永久最佳化工具統計資料。如需相關資訊,請參閱 第 17.8.10.1 節,「設定永久最佳化工具統計資料參數」。
-
命令列格式 --innodb-stats-method=value
系統變數 innodb_stats_method
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 nulls_equal
有效值 nulls_equal
nulls_unequal
nulls_ignored
伺服器在收集
InnoDB
表格的索引值分佈的統計資料時,如何處理NULL
值。允許的值為nulls_equal
、nulls_unequal
和nulls_ignored
。對於nulls_equal
,所有NULL
索引值都被視為相等,並形成一個單一的值群組,其大小等於NULL
值的數量。對於nulls_unequal
,NULL
值被視為不相等,且每個NULL
值形成大小為 1 的不同值群組。對於nulls_ignored
,會忽略NULL
值。產生表格統計資料的方法會影響最佳化工具如何選擇查詢執行的索引,如 第 10.3.8 節,「InnoDB 和 MyISAM 索引統計資料收集」中所述。
-
命令列格式 --innodb-stats-on-metadata[={OFF|ON}]
系統變數 innodb_stats_on_metadata
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
此選項僅適用於將最佳化工具的統計資訊設定為非持久性時。當
innodb_stats_persistent
停用時,或當使用STATS_PERSISTENT=0
建立或變更個別資料表時,最佳化工具統計資訊不會保存到磁碟。如需更多資訊,請參閱第 17.8.10.2 節,「設定非持久性最佳化工具統計資訊參數」。當啟用
innodb_stats_on_metadata
時,InnoDB
會在執行諸如SHOW TABLE STATUS
之類的元資料陳述式時,或在存取 Information Schema 的TABLES
或STATISTICS
資料表時,更新非持久性的統計資訊。(這些更新類似於ANALYZE TABLE
所發生的情況。)當停用時,InnoDB
不會在這些操作期間更新統計資訊。停用此設定可以提高具有大量資料表或索引的結構描述的存取速度。它還可以提高涉及InnoDB
資料表的查詢的執行計畫的穩定性。要變更此設定,請發出陳述式
SET GLOBAL innodb_stats_on_metadata=
,其中mode
為mode
ON
或OFF
(或1
或0
)。變更此設定需要足夠的權限來設定全域系統變數(請參閱第 7.1.9.1 節,「系統變數權限」),並立即影響所有連線的操作。 -
命令列格式 --innodb-stats-persistent[={OFF|ON}]
系統變數 innodb_stats_persistent
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定是否將
InnoDB
索引統計資訊保存到磁碟。否則,統計資訊可能會頻繁重新計算,這可能會導致查詢執行計畫的變化。此設定會在建立資料表時與每個資料表一起儲存。您可以在建立資料表之前,在全域層級設定innodb_stats_persistent
,或使用CREATE TABLE
和ALTER TABLE
陳述式的STATS_PERSISTENT
子句來覆寫系統範圍的設定,並為個別資料表設定持久性統計資訊。如需詳細資訊,請參閱 第 17.8.10.1 節,「設定永久最佳化工具統計資料參數」。
innodb_stats_persistent_sample_pages
命令列格式 --innodb-stats-persistent-sample-pages=#
系統變數 innodb_stats_persistent_sample_pages
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 20
最小值 1
最大值 18446744073709551615
在估計索引欄位的基數和其他統計資訊時要取樣的索引頁面數量,例如由
ANALYZE TABLE
計算的那些。增加此值可提高索引統計資訊的準確性,進而改善查詢執行計畫,但代價是在執行ANALYZE TABLE
以處理InnoDB
資料表時會增加 I/O。如需更多資訊,請參閱第 17.8.10.1 節,「設定持久性最佳化工具統計資訊參數」。注意為
innodb_stats_persistent_sample_pages
設定較高的值可能會導致ANALYZE TABLE
執行時間過長。要估計ANALYZE TABLE
存取的資料庫頁面數量,請參閱第 17.8.10.3 節,「估計 InnoDB 資料表的 ANALYZE TABLE 複雜性」。innodb_stats_persistent_sample_pages
僅在為資料表啟用innodb_stats_persistent
時適用;當停用innodb_stats_persistent
時,則改為套用innodb_stats_transient_sample_pages
。innodb_stats_transient_sample_pages
命令列格式 --innodb-stats-transient-sample-pages=#
系統變數 innodb_stats_transient_sample_pages
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 8
最小值 1
最大值 18446744073709551615
在估計索引欄位的基數和其他統計資訊時要取樣的索引頁面數量,例如由
ANALYZE TABLE
計算的那些。預設值為 8。增加此值可提高索引統計資訊的準確性,進而改善查詢執行計畫,但代價是在開啟InnoDB
資料表或重新計算統計資訊時會增加 I/O。如需更多資訊,請參閱第 17.8.10.2 節,「設定非持久性最佳化工具統計資訊參數」。注意為
innodb_stats_transient_sample_pages
設定較高的值可能會導致ANALYZE TABLE
執行時間過長。要估計ANALYZE TABLE
存取的資料庫頁面數量,請參閱第 17.8.10.3 節,「估計 InnoDB 資料表的 ANALYZE TABLE 複雜性」。innodb_stats_transient_sample_pages
僅在為資料表停用innodb_stats_persistent
時適用;當啟用innodb_stats_persistent
時,則改為套用innodb_stats_persistent_sample_pages
。取代了 MySQL 8.0 中移除的innodb_stats_sample_pages
。如需更多資訊,請參閱第 17.8.10.2 節,「設定非持久性最佳化工具統計資訊參數」。-
命令列格式 --innodb-status-output[={OFF|ON}]
系統變數 innodb_status_output
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用或停用標準
InnoDB
監視器的定期輸出。也與innodb_status_output_locks
結合使用,以啟用或停用InnoDB
鎖定監視器的定期輸出。如需更多資訊,請參閱第 17.17.2 節,「啟用 InnoDB 監視器」。 -
命令列格式 --innodb-status-output-locks[={OFF|ON}]
系統變數 innodb_status_output_locks
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用或停用
InnoDB
鎖定監視器。啟用時,InnoDB
鎖定監視器會在SHOW ENGINE INNODB STATUS
輸出和定期輸出到 MySQL 錯誤日誌中列印有關鎖定的其他資訊。對於InnoDB
鎖定監視器的定期輸出,會作為標準InnoDB
監視器輸出的一部分列印。因此,必須啟用標準InnoDB
監視器,InnoDB
鎖定監視器才能定期將資料列印到 MySQL 錯誤日誌。如需更多資訊,請參閱第 17.17.2 節,「啟用 InnoDB 監視器」。 -
命令列格式 --innodb-strict-mode[={OFF|ON}]
系統變數 innodb_strict_mode
範圍 全域、工作階段 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
當啟用
innodb_strict_mode
時,InnoDB
在檢查無效或不相容的資料表選項時,會傳回錯誤而不是警告。它會檢查
KEY_BLOCK_SIZE
、ROW_FORMAT
、DATA DIRECTORY
、TEMPORARY
和TABLESPACE
選項是否彼此相容以及是否與其他設定相容。innodb_strict_mode=ON
還會在建立或變更資料表時啟用列大小檢查,以防止由於記錄對於所選頁面大小而言過大而導致INSERT
或UPDATE
失敗。您可以在啟動
mysqld
時,或在 MySQL 設定檔中,於命令列上啟用或停用innodb_strict_mode
。您也可以使用陳述式SET [GLOBAL|SESSION] innodb_strict_mode=
在執行時啟用或停用mode
innodb_strict_mode
,其中
為mode
ON
或OFF
。變更GLOBAL
設定需要足夠的權限來設定全域系統變數(請參閱第 7.1.9.1 節,「系統變數權限」),並影響後續連線的所有用戶端的操作。任何用戶端都可以變更innodb_strict_mode
的SESSION
設定,並且該設定僅影響該用戶端。設定此系統變數的工作階段值是受限制的操作。工作階段使用者必須具有足夠的權限來設定受限制的工作階段變數。請參閱第 7.1.9.1 節,「系統變數權限」。
-
命令列格式 --innodb-sync-array-size=#
系統變數 innodb_sync_array_size
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 1
最小值 1
最大值 1024
定義互斥鎖/鎖等待陣列的大小。增加此值會分割用於協調執行緒的內部資料結構,以便在有大量等待執行緒的工作負載中實現更高的並行性。此設定必須在 MySQL 執行個體啟動時進行設定,之後無法變更。建議對於頻繁產生大量等待執行緒的工作負載(通常大於 768)增加此值。
-
命令列格式 --innodb-sync-spin-loops=#
系統變數 innodb_sync_spin_loops
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 30
最小值 0
最大值 4294967295
執行緒在暫停之前,等待
InnoDB
互斥鎖被釋放的次數。 -
命令列格式 --innodb-sync-debug[={OFF|ON}]
系統變數 innodb_sync_debug
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 OFF
啟用
InnoDB
儲存引擎的同步偵錯檢查。只有在使用WITH_DEBUG
CMake 選項編譯偵錯支援時,此選項才可用。 -
命令列格式 --innodb-table-locks[={OFF|ON}]
系統變數 innodb_table_locks
範圍 全域、工作階段 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
如果
autocommit = 0
,InnoDB
會遵守LOCK TABLES
;MySQL 在所有其他執行緒釋放對該表的所有鎖定之前,不會從LOCK TABLES ... WRITE
返回。innodb_table_locks
的預設值為 1,這表示如果autocommit = 0
,LOCK TABLES
會導致 InnoDB 在內部鎖定表。innodb_table_locks = 0
對於使用LOCK TABLES ... WRITE
明確鎖定的表沒有影響。它確實對使用LOCK TABLES ... WRITE
隱式鎖定(例如,透過觸發器)或使用LOCK TABLES ... READ
鎖定以進行讀取或寫入的表有影響。有關相關資訊,請參閱 第 17.7 節,「InnoDB 鎖定和交易模型」。
-
命令列格式 --innodb-temp-data-file-path=file_name
系統變數 innodb_temp_data_file_path
範圍 全域 動態 否 SET_VAR
提示適用否 類型 字串 預設值 ibtmp1:12M:autoextend
定義全域暫存資料表空間資料檔的相對路徑、名稱、大小和屬性。全域暫存資料表空間儲存對使用者建立的暫存表所做的變更的回滾區段。
如果未指定
innodb_temp_data_file_path
的值,預設行為是在innodb_data_home_dir
目錄中建立一個名為ibtmp1
的單一自動延伸資料檔。初始檔案大小略大於 12MB。全域暫存資料表空間資料檔規格的語法包括檔案名稱、檔案大小以及
autoextend
和max
屬性file_name:file_size[:autoextend[:max:max_file_size]]
全域暫存資料表空間資料檔的名稱不能與另一個
InnoDB
資料檔相同。任何無法建立全域暫存資料表空間資料檔的情況或錯誤都會被視為致命錯誤,並且伺服器啟動會被拒絕。檔案大小以 KB、MB 或 GB 指定,方法是在大小值附加
K
、M
或G
。檔案大小的總和必須略大於 12MB。個別檔案的大小限制由作業系統決定。在支援大型檔案的作業系統上,檔案大小可以超過 4GB。不支援將原始磁碟分割用於全域暫存資料表空間資料檔。
autoextend
和max
屬性只能用於在innodb_temp_data_file_path
設定中最後指定的資料檔。例如[mysqld] innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500M
autoextend
選項會在資料檔可用空間不足時自動增加其大小。autoextend
增量預設為 64MB。若要修改增量,請變更innodb_autoextend_increment
變數設定。全域暫存資料表空間資料檔的目錄路徑是透過串連
innodb_data_home_dir
和innodb_temp_data_file_path
定義的路徑來形成的。在以唯讀模式執行
InnoDB
之前,請將innodb_temp_data_file_path
設定為資料目錄以外的位置。路徑必須相對於資料目錄。例如--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend
如需詳細資訊,請參閱 全域暫存資料表空間。
-
命令列格式 --innodb-temp-tablespaces-dir=dir_name
系統變數 innodb_temp_tablespaces_dir
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 預設值 #innodb_temp
定義
InnoDB
在啟動時建立工作階段暫存資料表空間池的位置。預設位置是資料目錄中的#innodb_temp
目錄。允許使用完整路徑或相對於資料目錄的路徑。工作階段暫存資料表空間始終儲存使用者建立的暫存表和最佳化工具使用
InnoDB
建立的內部暫存表。(先前,內部暫存表的磁碟儲存引擎由internal_tmp_disk_storage_engine
系統變數決定,該變數不再受支援。請參閱 用於磁碟內部暫存表的儲存引擎。)如需詳細資訊,請參閱 工作階段暫存資料表空間。
-
命令列格式 --innodb-thread-concurrency=#
系統變數 innodb_thread_concurrency
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 1000
定義
InnoDB
內部允許的最大執行緒數。值 0(預設值)會解譯為無限並行性(無限制)。此變數旨在用於高並行系統的效能調整。InnoDB
會嘗試將InnoDB
內部的執行緒數保持小於或等於innodb_thread_concurrency
限制。等待鎖定的執行緒不會計入同時執行的執行緒數。正確的設定取決於工作負載和運算環境。如果您的 MySQL 執行個體與其他應用程式共用 CPU 資源,或者如果您的工作負載或並行使用者數量正在增加,請考慮設定此變數。測試一系列值以確定提供最佳效能的設定。
innodb_thread_concurrency
是一個動態變數,允許在即時測試系統上試驗不同的設定。如果特定設定效能不佳,您可以快速將innodb_thread_concurrency
設定回 0。使用下列準則來協助尋找和維護適當的設定
如果工作負載的並行使用者執行緒數始終很小,並且不會影響效能,請設定
innodb_thread_concurrency=0
(無限制)。如果您的工作負載始終很繁重或偶爾會激增,請設定
innodb_thread_concurrency
值並進行調整,直到找到提供最佳效能的執行緒數。例如,假設您的系統通常有 40 到 50 個使用者,但週期性地使用者數會增加到 60 個、70 個或更多。透過測試,您發現效能在限制為 80 個並行使用者時大致保持穩定。在這種情況下,請將innodb_thread_concurrency
設定為 80。如果您不希望
InnoDB
使用超過特定數量的虛擬 CPU 來執行使用者執行緒(例如,20 個虛擬 CPU),請將innodb_thread_concurrency
設定為此數(或可能更低,取決於效能測試)。如果您的目標是將 MySQL 與其他應用程式隔離,請考慮將mysqld
處理程序專門繫結到虛擬 CPU。但是,請注意,如果mysqld
處理程序不始終處於忙碌狀態,則獨佔繫結可能會導致非最佳硬體使用。在這種情況下,您可以將mysqld
處理程序繫結到虛擬 CPU,但允許其他應用程式使用部分或全部虛擬 CPU。注意從作業系統的角度來看,使用資源管理解決方案來管理應用程式之間如何共用 CPU 時間可能比繫結
mysqld
處理程序更可取。例如,您可以將 90% 的虛擬 CPU 時間分配給給定的應用程式,而其他重要處理程序未執行,並且當其他重要處理程序正在執行時,將該值縮減回 40%。在某些情況下,最佳的
innodb_thread_concurrency
設定可能小於虛擬 CPU 的數量。過高的
innodb_thread_concurrency
值可能會由於系統內部和資源的爭用增加而導致效能下降。定期監控和分析您的系統。工作負載、使用者數量或運算環境的變更可能需要您調整
innodb_thread_concurrency
設定。
值 0 會停用
InnoDB 內的查詢
和佇列中的查詢
計數器,這些計數器位於SHOW ENGINE INNODB STATUS
輸出的ROW OPERATIONS
區段中。有關相關資訊,請參閱 第 17.8.4 節,「設定 InnoDB 的執行緒並行性」。
-
命令列格式 --innodb-thread-sleep-delay=#
系統變數 innodb_thread_sleep_delay
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 10000
最小值 0
最大值 1000000
單位 微秒 InnoDB
執行緒在加入InnoDB
佇列之前休眠的時間(以微秒為單位)。預設值為 10000。值 0 會停用休眠。您可以將innodb_adaptive_max_sleep_delay
設定為允許innodb_thread_sleep_delay
的最高值,並且InnoDB
會根據目前的執行緒排程活動自動向上或向下調整innodb_thread_sleep_delay
。此動態調整有助於執行緒排程機制在系統負載較輕或接近滿載時順暢運作。如需更多資訊,請參閱第 17.8.4 節,〈設定 InnoDB 的線程並行性〉。
-
命令列格式 --innodb-tmpdir=dir_name
系統變數 innodb_tmpdir
範圍 全域、工作階段 動態 是 SET_VAR
提示適用否 類型 目錄名稱 預設值 NULL
用於定義在重建表的線上
ALTER TABLE
作業期間建立的暫存排序檔的替代目錄。線上
ALTER TABLE
操作會重建資料表,同時也會在原始資料表所在的目錄中建立一個中間資料表檔案。innodb_tmpdir
選項不適用於中間資料表檔案。有效的數值可以是 MySQL 資料目錄路徑以外的任何目錄路徑。如果數值為 NULL(預設值),則會在 MySQL 暫存目錄中建立暫存檔案(在 Unix 上為
$TMPDIR
,在 Windows 上為%TEMP%
,或是由--tmpdir
組態選項指定的目錄)。如果指定了目錄,則只有在使用SET
陳述式設定innodb_tmpdir
時,才會檢查目錄是否存在以及權限。如果在目錄字串中提供了符號連結,則會解析該符號連結並以絕對路徑儲存。路徑不應超過 512 個位元組。如果innodb_tmpdir
設定為無效的目錄,則線上ALTER TABLE
操作會回報錯誤。innodb_tmpdir
會覆寫 MySQLtmpdir
設定,但僅適用於線上ALTER TABLE
操作。設定
innodb_tmpdir
需要FILE
權限。引入
innodb_tmpdir
選項是為了協助避免tmpfs
檔案系統上的暫存檔案目錄溢位。當線上ALTER TABLE
操作重建資料表時,可能會因建立大型暫存排序檔案而發生溢位。在複寫環境中,只有在所有伺服器都具有相同的作業系統環境時,才考慮複寫
innodb_tmpdir
設定。否則,當執行線上ALTER TABLE
操作重建資料表時,複寫innodb_tmpdir
設定可能會導致複寫失敗。如果伺服器作業環境不同,建議您在每部伺服器上個別設定innodb_tmpdir
。如需更多資訊,請參閱第 17.12.3 節,「線上 DDL 空間需求」。如需線上
ALTER TABLE
操作的相關資訊,請參閱第 17.12 節,「InnoDB 和線上 DDL」。 innodb_trx_purge_view_update_only_debug
命令列格式 --innodb-trx-purge-view-update-only-debug[={OFF|ON}]
系統變數 innodb_trx_purge_view_update_only_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
暫停清除已標記為刪除的記錄,同時允許更新清除檢視。此選項會人為地建立一種情況,其中清除檢視已更新,但尚未執行清除。只有在使用
WITH_DEBUG
CMake 選項編譯偵錯支援時,此選項才可用。-
命令列格式 --innodb-trx-rseg-n-slots-debug=#
系統變數 innodb_trx_rseg_n_slots_debug
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 0
最小值 0
最大值 1024
設定一個偵錯旗標,將
TRX_RSEG_N_SLOTS
限制為特定值,以便trx_rsegf_undo_find_free
函數尋找復原日誌區段的可用插槽。只有在使用WITH_DEBUG
CMake 選項編譯偵錯支援時,此選項才可用。 -
命令列格式 --innodb-undo-directory=dir_name
系統變數 innodb_undo_directory
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 InnoDB
建立復原表格空間的路徑。通常用於將復原表格空間放置在不同的儲存裝置上。沒有預設值(為 NULL)。如果未定義
innodb_undo_directory
變數,則會在資料目錄中建立復原表格空間。當初始化 MySQL 執行個體時建立的預設復原表格空間(
innodb_undo_001
和innodb_undo_002
)一律位於innodb_undo_directory
變數定義的目錄中。使用
CREATE UNDO TABLESPACE
語法建立的復原表格空間會建立在innodb_undo_directory
變數定義的目錄中(如果未指定不同的路徑)。如需更多資訊,請參閱第 17.6.3.4 節,「復原表格空間」。
-
命令列格式 --innodb-undo-log-encrypt[={OFF|ON}]
系統變數 innodb_undo_log_encrypt
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
控制使用
InnoDB
靜態資料加密功能加密的資料表的復原日誌資料加密。僅適用於位於個別復原表格空間中的復原日誌。請參閱第 17.6.3.4 節,「復原表格空間」。系統表格空間中復原日誌資料不支援加密。如需更多資訊,請參閱復原日誌加密。 -
命令列格式 --innodb-undo-log-truncate[={OFF|ON}]
系統變數 innodb_undo_log_truncate
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
啟用後,超過
innodb_max_undo_log_size
定義之臨界值的復原表格空間會標記為截斷。只能截斷復原表格空間。不支援截斷位於系統表格空間中的復原日誌。若要發生截斷,必須至少有兩個復原表格空間。可以使用
innodb_purge_rseg_truncate_frequency
變數來加速截斷復原表格空間。如需更多資訊,請參閱截斷還原表空間。
-
命令列格式 --innodb-undo-tablespaces=#
已棄用 是 系統變數 innodb_undo_tablespaces
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 2
最小值 2
最大值 127
定義
InnoDB
使用的復原表格空間數量。預設值和最小值為 2。注意innodb_undo_tablespaces
變數已淘汰;設定它沒有任何作用。您應該預期它會在未來的 MySQL 版本中移除。如需更多資訊,請參閱第 17.6.3.4 節,「復原表格空間」。
-
命令列格式 --innodb-use-fdatasync[={OFF|ON}]
系統變數 innodb_use_fdatasync
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 ON
在支援
fdatasync()
系統呼叫的平台上,啟用innodb_use_fdatasync
允許使用fdatasync()
而不是fsync()
系統呼叫來進行作業系統刷新。fdatasync()
呼叫不會刷新對檔案中繼資料的變更,除非後續資料擷取需要,否則可提供潛在的效能優勢。innodb_flush_method
設定的子集(例如fsync
、O_DSYNC
和O_DIRECT
)使用fsync()
系統呼叫。當使用這些設定時,innodb_use_fdatasync
變數適用。在 MySQL 8.4 之前,預設會停用此選項。
-
命令列格式 --innodb-use-native-aio[={OFF|ON}]
系統變數 innodb_use_native_aio
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 ON
指定是否使用非同步 I/O 子系統。伺服器執行時無法變更此變數。通常,您不需要設定此選項,因為預設會啟用它。
此功能可改善大量 I/O 繫結系統的延展性,這類系統通常會在
SHOW ENGINE INNODB STATUS
輸出中顯示許多擱置的讀取/寫入。在 Linux 系統上執行大量
InnoDB
I/O 執行緒,尤其是在同一部伺服器機器上執行多個此類執行個體,可能會超出容量限制。在這種情況下,您可能會收到以下錯誤EAGAIN: The specified maxevents exceeds the user's limit of available events.
您通常可以透過將較高的限制寫入
/proc/sys/fs/aio-max-nr
來解決此錯誤。但是,如果作業系統中的非同步 I/O 子系統出現問題,導致
InnoDB
無法啟動,您可以啟動伺服器並使用innodb_use_native_aio=0
。如果InnoDB
偵測到潛在的問題(例如tmpdir
位置、tmpfs
檔案系統,以及 Linux 核心不支援tmpfs
上的 AIO 的組合),也可能會在啟動期間自動停用此選項。如需更多資訊,請參閱第 17.8.6 節,「在 Linux 上使用非同步 I/O」。
innodb_validate_tablespace_paths
命令列格式 --innodb-validate-tablespace-paths[={OFF|ON}]
系統變數 innodb_validate_tablespace_paths
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 ON
控制表格空間檔案路徑驗證。在啟動時,
InnoDB
會根據資料字典中儲存的表格空間檔案路徑,驗證已知表格空間檔案的路徑,以防表格空間檔案已移至不同的位置。innodb_validate_tablespace_paths
變數允許停用表格空間路徑驗證。此功能適用於未移動表格空間檔案的環境。停用路徑驗證可縮短具有大量表格空間檔案的系統的啟動時間。警告在移動表格空間檔案後,以停用表格空間路徑驗證的方式啟動伺服器可能會導致未定義的行為。
如需更多資訊,請參閱第 17.6.3.7 節,「停用表格空間路徑驗證」。
InnoDB
版本號碼。這是一個舊版變數,值與 MySQL 伺服器version
相同。-
命令列格式 --innodb-write-io-threads=#
系統變數 innodb_write_io_threads
範圍 全域 動態 否 SET_VAR
提示適用否 類型 整數 預設值 4
最小值 1
最大值 64
InnoDB
中寫入操作的 I/O 執行緒數。預設值為 4。其對應的讀取執行緒為innodb_read_io_threads
。如需更多資訊,請參閱第 17.8.5 節,「設定背景 InnoDB I/O 執行緒的數量」。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。注意在 Linux 系統上,使用
innodb_read_io_threads
、innodb_write_io_threads
和 Linuxaio-max-nr
設定的預設設定執行多個 MySQL 伺服器(通常超過 12 個)可能會超出系統限制。理想情況下,增加aio-max-nr
設定;作為替代方案,您可以減少一個或兩個 MySQL 變數的設定。同時也請考慮
sync_binlog
的值,它控制二進制日誌同步到磁碟的行為。如需一般 I/O 調整建議,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」。