萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL my.cnf CPU 過高優化調參指南:tmp_table_size、連線超時、優先級、快取與記憶體分配公式

關鍵參數調整

參數建議值作用
tmp_table_size200M (視記憶體)內部臨時表最大記憶體,超過轉磁碟 MyISAM
max_heap_table_size同 tmp_table_sizeMEMORY 表/臨時表上限,取兩者較小值
wait_timeout10-30 秒非互動連線閒置斷開,防連線洩漏
interactive_timeout60-300 秒互動式客戶端閒置斷開
low_priority_updates0 (關閉)開啟則 SELECT 優先於 INSERT/UPDATE (MyISAM)
table_open_cache / table_cache1024-4096表描述符快取,減少開關表開銷
thread_cache_size100-200執行緒快取,減少建立/銷毀開銷

PHP 程式端配合

  • 使用連線池 (mysqli 持久連線 mysqli::real_connect with MYSQLI_CLIENT_PERSISTENT)
  • 腳本結束**顯式關閉連線** 或依賴 wait_timeout 清理
  • 避免長連線持有鎖

記憶體分配估算公式 (參考)


總記憶體 = 系統保留 (1-2GB)
         + 全域緩衝區
           + innodb_buffer_pool_size (建議 50-70% 實體記憶體)
           + key_buffer_size (MyISAM 索引,若無 MyISAM 表可設小)
           + query_cache_size (MySQL 8.0 移除,舊版建議 0 或小值)
         + 線程獨享 * 最大連線數
           + sort_buffer_size (2-8MB)
           + join_buffer_size (2-8MB)
           + read_buffer_size (1-2MB)
           + read_rnd_buffer_size (1-2MB)
           + thread_stack (256KB-512KB)
         + 其他 (binlog cache, 等)

CPU 高常見原因排查清單

  1. 慢查詢:開啟 slow_query_log,EXPLAIN 分析、加索引、改寫 SQL
  2. 無索引/錯誤索引:全表掃描消耗 CPU
  3. 頻繁建立/銷毀連線:啟用連線池、調大 thread_cache_size
  4. 臨時表轉磁碟:調大 tmp_table_size/max_heap_table_size 或優化 SQL 避免臨時表
  5. 鎖爭用:SHOW ENGINE INNODB STATUS 分析鎖等待、死鎖
  6. 統計資訊過期:ANALYZE TABLE 更新

監控指標


SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';  -- 磁碟臨時表計數
SHOW GLOBAL STATUS LIKE 'Created_tmp_tables';       -- 總臨時表
SHOW GLOBAL STATUS LIKE 'Threads_created';          -- 執行緒建立次數 (應緩慢增長)
SHOW PROCESSLIST;                                   -- 即時活動
copyright © 萬盛學電腦網 all rights reserved