介紹
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_size和innodb_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_size和 innodb_buffer_pool_instances)的值來確定最佳配置值。這使得 MySQL 能夠根據運行機器的類型進行調整和擴展。
此表總結了 MySQL 8.4 相對於 MySQL 8.0 的默認設置變更。您可以看到,MySQL 8.4 中某些功能默認處於禁用狀態。這樣做是為了確保用户安全,並不表示這些功能已被棄用。建議用户在啓用這些功能之前瞭解其潛在的副作用。
撤銷更改
這些更改僅影響默認值,因此您可以隨時通過覆蓋這些更改來撤銷它們。以下是一個示例配置文件,其中包含 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!