萬盛學電腦網

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

PHP + MySQL 性能優化實戰筆記:配置參數、連接管理、慢查詢治理

MySQL 關鍵配置參數(my.cnf/[mysqld])

# 臨時表內存上限,減少磁盤臨時表
tmp_table_size = 200M
max_heap_table_size = 200M

# 讀優先策略(讀多寫少場景)
low_priority_updates = 1

# 連接超時,防止長連接佔用槽位
wait_timeout = 10
interactive_timeout = 10

# 表緩存,根據物理內存調整
table_cache = 1024

# 核心緩衝區(MyISAM 為主場景)
key_buffer_size = 1024M
sort_buffer_size = 256M
read_buffer_size = 1024M
join_buffer_size = 512M
read_rnd_buffer_size = 1024M

# 限制鍵掃描次數
max_seeks_for_key = 1000

內存分配估算模型(參考)

  • 系統保留:~800M
  • 線程獨享(按 151 連接估算):~4.5GB
    • sort_buffer_size: 10M
    • join_buffer_size: 10M
    • read_buffer_size: 5M
    • read_rnd_buffer_size: 5M
    • thread_stack: 512K
  • MyISAM Key Cache:key_buffer_size 2.4G
  • InnoDB Buffer Pool:視實際引擎佔比分配(本例無 InnoDB 表)。

PHP 端最佳實踐

  1. 及時關閉連接:腳本結束前顯式 mysqli_close() 或使用短連接模式。
  2. 預處理語句:mysqli_stmt 防注入、提高重複執行效率。
  3. 批量操作:INSERT ... VALUES (),(),() 替代循環單條插入。
  4. 避免 SELECT *:按需選列,減少網絡傳輸與緩存壓力。
  5. 合理分頁:大偏移量改用游標/ID 範圍查詢。

連接數控制

單 CPU 核心建議最大連接數 ≤ 300。超過需拆分讀寫、引入連接池(ProxySQL、MaxScale)或升級硬件。

監控與慢查詢治理

  • 開啟慢查詢日志:slow_query_log=1, long_query_time=1, log_queries_not_using_indexes=1。
  • 定期 mysqldumpslow -s t -t 10 /var/log/mysql/slow.log 分析 Top 10 耗時查詢。
  • 配合 EXPLAIN、SHOW PROFILE 定位優化點。
copyright © 萬盛學電腦網 all rights reserved