首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MySQL 效能調優五大核心配置:連線、查詢快取、暫存表、會話記憶體、慢查詢日誌

     編輯:關於SqlServer

一、連線層配置

參數建議值說明
max_connections應用峰值併發 + 緩衝 (通常 500-2000)每連線消耗會話記憶體,過大導致 OOM
max_allowed_packet64MB-1GB大欄位/批次操作需求,mysqldump 需更大
thread_cache_size100-256 (或 max_connections 10%)緩存執行緒避免頻繁建銷,Threads_created 穩定即佳
aborted_connects監控計數器持續增長 = 連線錯誤 (網路、認證、SSL)

二、查詢快取 (Query Cache) —— MySQL 8.0 已移除

注意:MySQL 8.0 移除 Query Cache (縮放性差、鎖爭用劇烈)。5.7 及以前版本參考:

參數建議
query_cache_typeDEMAND (按需,SQL_CACHE 提示才快取)
query_cache_size64MB-256MB (過大鎖爭用反而慢)
query_cache_limit1MB-4MB (大結果集不快取)
query_cache_min_res_unit4KB-8KB (減少碎片)

命中率公式:Qcache_hits / (Qcache_hits + Com_select)。
現代替代:應用層快取 (Redis/Memcached)、資料庫層面結果集快取 (ProxySQL、Vitess)。

三、暫存表與內部排序

參數建議值說明
tmp_table_size64MB-256MB記憶體暫存表上限,超過轉 MyISAM 磁碟表
max_heap_table_size同 tmp_table_size實際生效值為兩者較小者

關鍵:含 BLOB/TEXT/JSON、GROUP BY/DISTINCT 無索引、UNION 等強制磁碟暫存表。
優化策略:
1. 縮小結果集 (只選需要欄位)
2. 加索引支援排序/群組
3. 分頁查詢避免大 OFFSET
4. 監控 Created_tmp_disk_tables / Created_tmp_tables 比率

四、會話記憶體 (Per-Session Buffers)

每連線獨立分配,總量 = 單值 × 併發數,必須極度謹慎:

參數預設建議值調整策略
read_buffer_size128KB256KB-1MB全表掃描頻繁時調大,會話級 SET SESSION
read_rnd_buffer_size256KB1MB-2MB排序後隨機讀取,會話級調大
sort_buffer_size256KB1MB-2MBORDER BY/GROUP BY 排序,會話級調大
join_buffer_size256KB1MB-2MB無索引 JOIN (Block Nested Loop),會話級調大
binlog_cache_size32KB64KB-256KB大交易二進位日誌快取

實測法:啟動所有連線 → top -p -H 觀察 VIRT/RES 穩定值 → 扣除基礎記憶體 → 除以連線數 = 實際會話均攤。

五、慢查詢日誌

參數建議值說明
slow_query_logON啟用
slow_query_log_file/var/log/mysql/slow.log專用磁碟、logrotate
long_query_time0.5-1 秒 (5.7.21+ 支援微秒)微秒級:0.05 = 50ms,早期發現問題
log_queries_not_using_indexesON記錄全表掃描,配合 log_throttle_queries_not_using_indexes 限流
log_slow_admin_statementsON記錄管理指令 (ALTER, ANALYZE 等)
log_slow_slave_statementsON記錄複寫慢 SQL

分析工具鏈

  1. mysqldumpslow -s t -t 20 /var/log/mysql/slow.log:內建彙總
  2. pt-query-digest (Percona Toolkit):深度分析、指紋分組、EXPLAIN 關聯
  3. sys.schema_table_statistics / sys.statements_with_full_table_scans:系統視圖快速定位

綜合調優順序

  1. 慢查詢日誌 → 定位 Top SQL
  2. EXPLAIN 分析 → 缺索引、錯誤連接順序、臨時表
  3. Schema/Index 調整 → 覆蓋索引、刪除冗餘索引
  4. SQL 改寫 → 避免 SELECT *、大 OFFSET、隱式轉換
  5. 參數微調 → 僅在硬體資源確定、SQL 已優化後
  6. 持續監控 → PMM、Grafana、Prometheus

版本遷移提醒

  • MySQL 8.0:移除 Query Cache、預設 caching_sha2_password、innodb_dedicated_server=ON 自動調整記憶體
  • InnoDB 專用:innodb_buffer_pool_size (實體 RAM 70-80%)、innodb_log_file_size (1-4GB)、innodb_flush_log_at_trx_commit=1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved