[昌哥IT課堂]MySQL8.0 中的自動調整配置參數_MySQL

介紹

MySQL 提供了許多配置變量,用於修改其行為並啓用某些功能。能夠提供最佳可靠性和性能的配置不僅取決於工作負載類型,還取決於服務器可用的系統資源。這使得在將 MySQL 服務器部署到生產環境時確定理想配置變得極具挑戰性。因此,我們決定將默認配置設置為生產就緒。

與 MySQL 8.0 相比,MySQL 8.4 對內置配置的默認值進行了更改。這些配置參數的默認值旨在自動適應運行 MySQL 服務器的機器。所有功能均未移除,升級到 8.4 後,您可以繼續使用 8.0 版本中您偏好的值。只需在 8.4 配置文件中設置相應的值即可覆蓋默認配置。這些更改適用於 MySQL 8.4 社區版、企業版和 HeatWave。

技術概述

現在,您只需設置這兩個變量,其餘變量使用內置默認值,即可使用默認配置將 MySQL 服務器遷移到生產環境:

[mysqld]

max_connections = N

innodb_dedicated_server = ON

max_connections控制服務器可同時連接的最大客户端數量。其默認值為 151,最大值為 100000。

innodb_dedicated_server告訴 InnoDB 服務器運行在專用機器上。這使得 InnoDB 能夠針對給定系統確定其關鍵配置的最佳值。它使 InnoDB 可以按如下方式擴展innodb_buffer_pool_sizeinnodb_redo_log_capacity

innodb_buffer_pool_size是根據可用物理內存(例如M)確定的,計算公式為:

如果M < 1 GB,則為 128 MB

如果1 GB ≤ M ≤ 4 GB,則M * 0.50 GB

如果M > 4 GB ,則M * 0.75 GB

innodb_redo_log_capacity 值根據邏輯 CPU 的數量(例如N)確定,計算公式為 ( N /2) GB,上限為 16 GB。

默認情況下, `innodb_dedicated_server`處於禁用狀態。這樣做是為了保持 MySQL 的下載便捷性。您可以在筆記本電腦上下載並啓動 MySQL,而無需擔心 MySQL 佔用過多系統資源。 在 MySQL 8.0 和 MySQL 8.4 中, `innodb_buffer_pool_size``innodb_redo_log_capacity`的默認值分別為128 MB 和1 GB。

MySQL 8.4 的默認設置使其適用於任何機器,並可自動調整默認值,從而確保其在生產環境中穩定運行。服務器會根據邏輯 CPU 數量、總物理內存、操作系統以及其他相關配置(例如 innodb_buffer_pool_sizeinnodb_buffer_pool_instances的值來確定最佳配置值。這使得 MySQL 能夠根據運行機器的類型進行調整和擴展。

此表總結了 MySQL 8.4 相對於 MySQL 8.0 的默認設置變更。您可以看到,MySQL 8.4 中某些功能默認處於禁用狀態。這樣做是為了確保用户安全,並不表示這些功能已被棄用。建議用户在啓用這些功能之前瞭解其潛在的副作用。

[昌哥IT課堂]MySQL8.0 中的自動調整配置參數_MySQL_02

撤銷更改

這些更改僅影響默認值,因此您可以隨時通過覆蓋這些更改來撤銷它們。以下是一個示例配置文件,其中包含 8.4 版本中更改的配置的 8.0 版本默認值。請務必手動編輯特定於您的操作系統和依賴配置的值:

[mysqld]

innodb_adaptive_hash_index=ON

innodb_buffer_pool_in_core_file=ON

innodb_change_buffering=all

innodb_io_capacity=200

innodb_io_capacity_max=2000

innodb_log_buffer_size=16777216

innodb_numa_interleave=OFF

innodb_page_cleaners=4

innodb_parallel_read_threads=4

innodb_purge_threads=4

innodb_read_io_threads=4

innodb_use_fdatasync=OFF

temptable_max_mmap=1073741824

temptable_max_ram=1073741824

temptable_use_mmap=ON

# When innodb_buffer_pool_size >= 1 GB

innodb_buffer_pool_instances=8

# When innodb_buffer_pool_size < 1 GB

innodb_buffer_pool_instances=1

# innodb_doublewrite_files was 2 * innodb_buffer_pool_instances.

# By default, this is either 2 * 1 = 2; or 2 * 8 = 16.

innodb_doublewrite_files=2

# innodb_doublewrite_pages was innodb_write_io_threads. This is 4

innodb_doublewrite_pages=4

# Unix:

innodb_flush_method=fsync

# Windows:

innodb_flush_method=unbuffered

結論:

MySQL 8.4 開箱即用,已針對生產環境進行了優化,這意味着它安全、高性能且穩定可靠。它配備了適用於生產環境的默認配置,可根據可用系統資源(例如邏輯 CPU 數量和物理內存)進行擴展。

您可以使用默認配置,啓用innodb_dedicated_server並適當設置max_connections ,輕鬆地將 MySQL 服務器遷移到生產環境。

再次強調,沒有任何內容被移除,升級到 8.4 後,您可以繼續使用您偏好的 8.0 版本值。所有這些功能在 MySQL 8.4 社區版和企業版以及 HeatWave 中均可用。

感謝您使用 MySQL!