首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysql-nt.exe 記憶體暴漲?my.ini 關鍵參數調優清單

     編輯:MySQL 資料庫相關知識

現象

Windows 上 mysql-nt.exe (mysqld) 記憶體持續增長,甚至觸發 OOM 或系統卡頓。

核心參數建議值(以 4GB~8GB 記憶體伺服器為例)

參數建議值預設值說明
table_open_cache512~10242000 (8.0) / 400 (5.7)表快取數,過大佔記憶體,依 Opened_tables 調整
innodb_buffer_pool_size物理記憶體 60~70%128M最關鍵,InnoDB 資料+索引快取池
innodb_log_file_size256M~1G48MRedo Log 大小,減少 checkpoint 刷盤
innodb_log_buffer_size16M~64M16M大事務受益
innodb_flush_log_at_trx_commit211=最安全,2=折中,0=最快但可能丟 1 秒
key_buffer_size128M~256M8MMyISAM 索引快取,純 InnoDB 可設小
tmp_table_size64M~256M16M記憶體臨時表上限,超過轉 MyISAM 磁碟表
max_heap_table_size同 tmp_table_size16M配合 tmp_table_size 使用
sort_buffer_size2M~4M256K每執行緒排序緩衝,過大易 OOM
read_buffer_size1M~2M128K全表掃描緩衝
read_rnd_buffer_size4M~8M256K排序後隨機讀緩衝
join_buffer_size2M~4M256KJOIN 無索引時緩衝
thread_cache_size50~100自動執行緒復用,減少建立/銷毀
max_connections500~1000151配合 thread_cache_size,避免過大導致記憶體爆炸
innodb_thread_concurrency0 (自動) 或 2*CPU核心00=無限制,現代版本建議 0

my.ini 範例片段

[mysqld]
# 基礎
basedir=C:/Program Files/MySQL/MySQL Server 8.0
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
port=3306

# 記憶體核心
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_log_buffer_size=32M
innodb_flush_log_at_trx_commit=2
key_buffer_size=128M
tmp_table_size=128M
max_heap_table_size=128M

# 連線與執行緒
max_connections=800
thread_cache_size=100
table_open_cache=1024

# 排序與 JOIN
sort_buffer_size=2M
read_buffer_size=1M
read_rnd_buffer_size=4M
join_buffer_size=2M

# 其他
innodb_file_per_table=1
skip-name-resolve=1
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci

調優驗證指標

-- 觀察緩衝區命中率
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
-- Innodb_buffer_pool_read_requests / (read_requests + read_ahead + read) > 99%

-- 觀察臨時表落地比例
SHOW GLOBAL STATUS LIKE 'Created_tmp%';
-- Created_tmp_disk_tables / Created_tmp_tables < 10%

-- 觀察排序溢寫磁碟
SHOW GLOBAL STATUS LIKE 'Sort_merge_passes';
-- 應為 0 或極低

-- 觀察開啟表快取命中
SHOW GLOBAL STATUS LIKE 'Open_table%';
-- Open_tables / Opened_tables 高比例

避坑提醒

  1. 參數不生效: 修改 my.ini 後必須 重啟服務。
  2. 32 位元限制: 32 位 MySQL 進程虛擬記憶體上限 2~3GB,innodb_buffer_pool_size 不能超過 1.5GB,必須升級 64 位版本。
  3. Windows 記憶體管理: 系統保留 ~1GB,MySQL 實際可用 < 物理記憶體 - 1GB。
  4. 監控工具: 使用 PerfMon 觀察 Process(mysql)\Private Bytes、Working Set。

總結

mysql-nt.exe 記憶體暴漲 90% 是 innodb_buffer_pool_size 未設或設太小導致頻繁磁碟 I/O、或 sort/join/read_buffer 過大乘以連線數爆炸。按上表依機器記憶體調整核心參數、重啟驗證指標,即可穩定運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved