系統變數為 true 或 false 可在伺服器啟動時透過命名它們來啟用,或使用
--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
選項中指定的最大值。該值表示微秒數。此選項在繁忙的系統中非常有用,尤其是當InnoDB
線程數大於 16 個時。(實際上,它對於具有數百甚至數千個同時連線的 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
的值。innodb_buffer_pool_chunk_size
可以以 1MB (1048576 位元組) 為單位增加或減少。變更
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
的組合,以使每個緩衝池實例至少為 1GB。如果
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 位元區塊,比innodb
檢查和演算法 (一次掃描 8 位元區塊) 快。值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 Schema 的INNODB_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
的值,預設行為是建立一個自動擴展的資料檔案,略大於 12MB,名為ibdata1
。資料檔案規格的完整語法包括檔案名稱、檔案大小、
autoextend
屬性和max
屬性file_name:file_size[:autoextend[:max:max_file_size]]
檔案大小以 KB、MB 或 GB 為單位指定,方法是在大小值後附加
K
、M
或G
。如果以 KB 為單位指定資料檔案大小,請以 1024 的倍數執行。否則,KB 值會四捨五入到最接近的 MB 邊界。檔案大小的總和必須至少略大於 12MB。如需其他組態資訊,請參閱系統表空間資料檔案組態。如需調整大小的指示,請參閱調整系統表空間的大小。
-
命令列格式 --innodb-data-home-dir=dir_name
系統變數 innodb_data_home_dir
範圍 全域 動態 否 SET_VAR
提示適用否 類型 目錄名稱 InnoDB
系統表空間資料檔案的目錄路徑的通用部分。預設值是 MySQL 的data
目錄。除非該設定定義了絕對路徑,否則此設定會與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
範圍 工作階段 動態 是 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
範圍 工作階段 動態 是 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_directories
引數值,當InnoDB
在啟動時建立要掃描的目錄清單時。無論是否明確指定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
會將指定的頁面設為髒頁。innodb_fil_make_page_dirty_debug
選項僅在使用WITH_DEBUG
CMake 選項編譯偵錯支援時才可用。-
命令列格式 --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 合規性與重新排列和分批完成 commit 相關 I/O 操作時可能實現的更高效能之間的平衡。您可以透過變更預設值來實現更好的效能,但隨後您可能會在當機時遺失交易。
完全符合 ACID 合規性需要預設設定值 1。每次交易 commit 時,都會將日誌寫入並刷新到磁碟。
設定為 0 時,日誌會每秒寫入並刷新到磁碟一次。在當機時,日誌尚未刷新的交易可能會遺失。
設定為 2 時,日誌會在每次交易 commit 後寫入,並每秒刷新到磁碟一次。在當機時,日誌尚未刷新的交易可能會遺失。
對於設定 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) unbuffered
有效值 (Unix) fsync
O_DSYNC
littlesync
nosync
O_DIRECT
O_DIRECT_NO_FSYNC
有效值 (Windows) unbuffered
normal
定義將資料 刷新到
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
最大值 (64 位元平台,8.4.0) 2**64-1
最大值 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
可以更積極地刷新,以比innodb_io_capacity
變數定義更高的每秒 I/O 操作數 (IOPS) 速率。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 節,「死結偵測」。可以使用
SET GLOBAL
或SET SESSION
陳述式在執行階段設定innodb_lock_wait_timeout
。變更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
最大值 (64 位元平台,8.4.0) 2**64-1
最大值 2**32-1
單位 微秒 定義最大平均日誌刷新時間,超過此時間使用者執行緒在等待刷新重做日誌時將不再自旋。預設值為 400 微秒。
如需相關資訊,請參閱第 10.5.4 節,「最佳化 InnoDB 重做日誌」。
-
命令列格式 --innodb-log-write-ahead-size=#
系統變數 innodb_log_write_ahead_size
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 8192
最小值 512 (日誌檔案區塊大小)
最大值 與 innodb_page_size 相等
單位 位元組 定義重做日誌的預寫區塊大小,以位元組為單位。為了避免「寫入時讀取」,請將
innodb_log_write_ahead_size
設定為與作業系統或檔案系統快取區塊大小相符。預設設定為 8192 位元組。「寫入時讀取」發生於當重做日誌區塊由於重做日誌的預寫區塊大小與作業系統或檔案系統快取區塊大小不符,而未完全快取至作業系統或檔案系統時。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
啟用專用的日誌寫入器執行緒,以將重做日誌記錄從日誌緩衝區寫入到系統緩衝區,並將系統緩衝區刷新到重做日誌檔案。專用的日誌寫入器執行緒可以提高高並發系統的效能,但對於低並發系統,停用專用的日誌寫入器執行緒可提供更好的效能。
有關更多資訊,請參閱第 10.5.4 節,〈最佳化 InnoDB 重做日誌〉。
-
命令列格式 --innodb-lru-scan-depth=#
系統變數 innodb_lru_scan_depth
範圍 全域 動態 是 SET_VAR
提示適用否 類型 整數 預設值 1024
最小值 100
最大值 (64 位元平台,8.4.0) 2**64-1
最大值 2**32-1
一個影響
InnoDB
緩衝池的刷新操作演算法和啟發法的參數。主要供調整 I/O 密集型工作負載的效能專家使用。它指定每個緩衝池實例,頁面清除器執行緒在掃描緩衝池 LRU 頁面清單時,尋找要刷新的髒頁的深度。這是一個每秒執行一次的背景操作。對於大多數工作負載,小於預設值的設定通常是合適的。如果數值遠高於實際需要,可能會影響效能。只有在典型工作負載下有足夠的 I/O 容量時,才應考慮增加此值。反之,如果寫入密集型工作負載使您的 I/O 容量飽和,則應降低此值,特別是在大型緩衝池的情況下。
在調整
innodb_lru_scan_depth
時,請從較低的值開始,並將設定值向上配置,目標是很少看到零可用頁面。此外,當變更緩衝池實例的數量時,也請考慮調整innodb_lru_scan_depth
,因為innodb_lru_scan_depth
*innodb_buffer_pool_instances
定義了頁面清除器執行緒每秒執行的工作量。有關相關資訊,請參閱第 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
指標計數器的所有值(最小值、最大值等等)。計數器資料可使用資訊綱要INNODB_METRICS
表格查詢。如需使用資訊,請參閱第 17.15.6 節,「InnoDB INFORMATION_SCHEMA 指標表格」。 -
命令列格式 --innodb-numa-interleave[={OFF|ON}]
系統變數 innodb_numa_interleave
範圍 全域 動態 否 SET_VAR
提示適用否 類型 布林值 預設值 ON
為
InnoDB
緩衝池的配置啟用 NUMA 交錯記憶體原則。當啟用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 平台上,會使用
setpriority()
系統呼叫,並且 mysqld 執行使用者已授權可將page_cleaner
執行緒的優先順序設定高於其他 MySQL 和InnoDB
執行緒,以協助頁面刷新與目前的工作負載保持一致。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
表空間的頁面大小。值可以指定為位元組或 KB。例如,16 KB 的頁面大小值可以指定為 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
,extent 大小為 2MB。對於innodb_page_size=64KB
,extent 大小為 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
範圍 工作階段 動態 是 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
定義清除從歷史清單中,以一個批次解析和處理的復原日誌頁面數。在多執行緒清除組態中,協調器清除執行緒會將
innodb_purge_batch_size
除以innodb_purge_threads
,並將該數目的頁面指派給每個清除執行緒。innodb_purge_batch_size
變數也定義清除在每次通過復原日誌 128 次反覆運算後釋放的復原日誌頁面數。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
定義清除系統釋放復原區段的頻率,以呼叫清除的次數表示。在復原區段釋放之前,無法截斷復原表空間。通常,清除系統會在每次呼叫清除 128 次後釋放復原區段一次。預設值為 128。減少此值會增加清除執行緒釋放復原區段的頻率。
innodb_purge_rseg_truncate_frequency
旨在與innodb_undo_log_truncate
搭配使用。如需更多資訊,請參閱截斷復原表空間。-
命令列格式 --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
定義了分配給每個 undo 表空間和全域臨時表空間的回滾段數量,這些回滾段用於產生 undo 紀錄的事務。每個回滾段支援的事務數量取決於InnoDB
頁面大小以及分配給每個事務的 undo 日誌數量。更多資訊請參閱第 17.6.6 節,「Undo 日誌」。相關資訊請參閱第 17.3 節,「InnoDB 多版本並行控制」。關於 undo 表空間的資訊,請參閱第 17.6.3.4 節,「Undo 表空間」。
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
定義表空間檔案區段頁面中保留為空白頁面的百分比。此設定適用於每個表檔案 (file-per-table) 和通用表空間。
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=值
系統變數 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
時,當執行SHOW TABLE STATUS
等中繼資料陳述式,或存取資訊綱要TABLES
或STATISTICS
表時,InnoDB
會更新非持久統計資訊。(這些更新類似於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 在內部鎖定資料表。對於使用
LOCK TABLES ... WRITE
明確鎖定的資料表,innodb_table_locks = 0
沒有任何作用。它對於使用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 會停用
SHOW ENGINE INNODB STATUS
輸出中ROW OPERATIONS
區段的queries inside InnoDB
和queries in queue
計數器。如需相關資訊,請參閱第 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()
呼叫不會刷新對檔案中繼資料的變更,從而提供潛在的效能優勢。諸如
fsync
、O_DSYNC
和O_DIRECT
等innodb_flush_method
設定的子集使用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
輸出中顯示許多待處理的讀取/寫入。使用大量的
InnoDB
I/O 執行緒執行,尤其是在同一伺服器機器上執行多個此類實例,可能會超出 Linux 系統的容量限制。在這種情況下,您可能會收到以下錯誤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
檔案系統和不支援tmpfs
上 AIO 的 Linux 核心的組合,此選項也可能在啟動期間自動停用。更多資訊,請參閱第 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」。