系統變數為 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 秒將pidSHOW 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有效值 012用於產生自動遞增值的鎖定模式。允許的值為 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_DEBUGCMake 選項編譯偵錯支援時才可用。 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最大值 64InnoDB緩衝池所劃分的區域數量。對於具有數 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最大值 50InnoDB變更緩衝區的最大大小,以 緩衝池總大小的百分比表示。您可能會為具有大量插入、更新和刪除活動的 MySQL 伺服器增加此值,或為用於報告且資料不變的 MySQL 伺服器減少此值。有關詳細資訊,請參閱第 17.5.2 節「變更緩衝區」。有關一般 I/O 調整建議,請參閱第 10.5.8 節「最佳化 InnoDB 磁碟 I/O」。 -
命令列格式 --innodb-change-buffering=value系統變數 innodb_change_buffering範圍 全域 動態 是 SET_VAR提示適用否 類型 列舉 預設值 none有效值 noneinsertsdeleteschangespurgesall是否
InnoDB執行變更緩衝,這是一種最佳化,會延遲對次要索引的寫入操作,以便可以循序執行 I/O 操作。允許的值如下表所述。也可以使用數值指定值。表 17.24 innodb_change_buffering 的允許值
值 數值 描述 none0預設值。不緩衝任何操作。 inserts1緩衝插入操作。 deletes2緩衝刪除標記操作;嚴格來說,是指在清除操作期間標記索引記錄以便稍後刪除的寫入操作。 changes3緩衝插入和刪除標記操作。 purges4緩衝在背景中發生的實際刪除操作。 all5緩衝插入、刪除標記操作和清除。 在 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_DEBUGCMake 選項編譯時,才能使用此選項。 -
命令列格式 --innodb-checkpoint-disabled[={OFF|ON}]系統變數 innodb_checkpoint_disabled範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF這是一個偵錯選項,僅供專家偵錯使用。它會停用檢查點,以便在伺服器刻意結束時一律啟動
InnoDB復原。它應僅在短時間內啟用,通常是在執行 DML 操作之前,這些操作會寫入需要伺服器結束後復原的重做日誌項目。只有在使用WITH_DEBUGCMake 選項編譯時,才能使用此選項。 -
命令列格式 --innodb-checksum-algorithm=value系統變數 innodb_checksum_algorithm範圍 全域 動態 是 SET_VAR提示適用否 類型 列舉 預設值 crc32有效值 crc32strict_crc32innodbstrict_innodbnonestrict_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有效值 nonezliblz4lz4hc使用指定的壓縮演算法壓縮所有表,而無需為每個表定義
COMPRESSION屬性。只有在使用WITH_DEBUGCMake 選項編譯時,才能使用此選項。如需相關資訊,請參閱第 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_DEBUGCMake 選項編譯偵錯支援時,此選項才可用。-
命令列格式 --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有效值 REDUNDANTCOMPACTDYNAMICinnodb_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有效值 ONOFFDETECT_AND_RECOVERDETECT_ONLYinnodb_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有效值 012InnoDB關機模式。如果值為 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_DEBUGCMake 選項編譯偵錯支援時才可用。-
命令列格式 --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最大值 100InnoDB在建立或重建索引時執行大量載入。這種索引建立方法稱為「排序索引建立」。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有效值 012控制 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) fsyncO_DSYNClittlesyncnosyncO_DIRECTO_DIRECT_NO_FSYNC有效值 (Windows) unbufferednormal定義將資料 刷新到
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有效值 012指定從
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最大值 1000InnoDB保留先前計算的刷新狀態快照的迭代次數,控制自適應刷新如何快速回應不斷變化的工作負載。增加此值會使刷新操作速率隨著工作負載的變化而平滑且逐漸地變化。減少此值會使自適應刷新快速調整以適應工作負載的變化,如果工作負載突然增加和減少,可能會導致刷新活動出現峰值。如需相關資訊,請參閱第 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_nameINFORMATION_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單位 位元組 為
InnoDBFULLTEXT搜尋索引快取配置的記憶體(以位元組為單位),該快取會在建立InnoDBFULLTEXT索引時,將剖析的文件保留在記憶體中。只有在達到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: 100FTS 優化進度。例如:
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指定在建立索引時,與
InnoDBFULLTEXT索引相關聯的一組停用詞。如果設定了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儲存在
InnoDBFULLTEXT索引中的單字最大字元長度。設定此值的限制可以減少索引的大小,從而加快查詢速度,方法是省略長關鍵字或不是真正單字且不太可能是搜尋詞的任意字母組合。如需更多資訊,請參閱章節 14.9.6,「微調 MySQL 全文檢索」。
-
命令列格式 --innodb-ft-min-token-size=#系統變數 innodb_ft_min_token_size範圍 全域 動態 否 SET_VAR提示適用否 類型 整數 預設值 3最小值 0最大值 16儲存在
InnoDBFULLTEXT索引中的單字最小長度。增加此值可以減少索引的大小,從而加快查詢速度,方法是省略在搜尋上下文中不太可能重要的常用單字,例如英文單字 「a」 和 「to」。對於使用 CJK(中文、日文、韓文)字元集的內容,請指定值為 1。如需更多資訊,請參閱章節 14.9.6,「微調 MySQL 全文檢索」。
-
命令列格式 --innodb-ft-num-word-optimize=#系統變數 innodb_ft_num_word_optimize範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 2000最小值 1000最大值 10000在
InnoDBFULLTEXT索引上每次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表格的自訂InnoDBFULLTEXT索引停用詞清單。若要為特定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在建立搜尋索引時,用於平行索引和標記
InnoDBFULLTEXT索引中文字的執行緒數量。如需相關資訊,請參閱章節 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此選項用於指定特定表格上的自訂
InnoDBFULLTEXT索引停用詞清單。若要為所有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-1innodb_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_DEBUGCMake 選項編譯偵錯支援時,此選項才可用。-
命令列格式 --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_DEBUGCMake 選項編譯偵錯支援時,才能使用此選項。-
命令列格式 --innodb-log-checkpoint-now[={OFF|ON}]系統變數 innodb_log_checkpoint_now範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF啟用此偵錯選項,以強制
InnoDB寫入檢查點。只有在使用WITH_DEBUGCMake 選項編譯偵錯支援時,才能使用此選項。 -
命令列格式 --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.999InnoDB嘗試從緩衝池刷新資料,以便髒頁的百分比不超過此值。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_DEBUGCMake 選項編譯偵錯支援時,此選項才可用。有關相關資訊,請參閱第 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有效值 countermodulepatternall此變數充當一個開關,將
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有效值 countermodulepatternall此變數作為一個開關,會重設
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會略過資料表資料的重新組織,而是處理InnoDBFULLTEXT索引的新增、刪除和更新的權杖資料。更多資訊請參閱最佳化 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有效值 40968192163843276865536指定
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啟用隨機預讀技術,以最佳化
InnoDBI/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_nameENGINE=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最大值 128innodb_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_DEBUGCMake 選項編譯時才可用。-
命令列格式 --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_equalnulls_unequalnulls_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為modeON或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=,來啟用或停用modeinnodb_strict_mode,其中為modeON或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_DEBUGCMake 選項編譯偵錯支援時,此選項才可用。 -
命令列格式 --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:500Mautoextend選項會在資料檔可用空間不足時,使其自動增加大小。預設情況下,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_DEBUGCMake 選項編譯時加入偵錯支援時,此選項才可用。-
命令列格式 --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_DEBUGCMake 選項編譯時加入偵錯支援時,此選項才可用。 -
命令列格式 --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輸出中顯示許多待處理的讀取/寫入。使用大量的
InnoDBI/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最大值 64InnoDB中寫入操作的 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」。