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

MySQL 效能調優 101 條建議:硬體、配置、架構、查詢與備份完整清單

     編輯:MySQL 綜合教學

MySQL 效能調優 101 條建議:硬體、配置、架構、查詢與備份完整清單

本文整理自實戰經驗與社區最佳實踐,涵蓋 101 條調優建議,分為五大類。部分建議針對特定環境,但核心思路通用。建議配合上一篇《MySQL 效能優化 100 條實戰建議》對照閱讀,形成完整知識體系。

一、伺服器硬體與作業系統調校

  1. 足夠實體記憶體裝下整個 InnoDB 資料集
  2. 不惜一切代價避免 Swap
  3. 使用電池備援記憶體(BBWC)
  4. 採用 RAID 10+,避免 RAID 5 校驗開銷
  5. OS 與資料分區物理隔離
  6. 臨時空間、Relay Log、資料三分離
  7. 磁碟空間越大越快
  8. 選用更快磁碟
  9. SAS/SSD 替代 SATA
  10. 小容量磁碟組 RAID 優於大容量單盤
  11. 啟用 BBWC RAID 控制器
  12. 拒絕軟體 RAID
  13. 考慮 PCIe NVMe/固態 IO 卡(2GB/s+ 寫入)
  14. Linux vm.swappiness=0
  15. 掛載加 noatime,nodiratime
  16. 優先 XFS,避免 ext3 雙重緩衝問題
  17. 調整 XFS 日誌與緩衝參數
  18. I/O 排程器用 NOOP/DEADLINE
  19. 強制 64 位元 OS
  20. 精簡系統服務與套件
  21. /etc/hosts 預解析主機名
  22. 嚴禁 kill -9 mysqld
  23. 專機專用,減少背景進程爭搶

二、MySQL 核心參數配置

  1. 寫入時用 innodb_flush_method=O_DIRECT 避免雙重緩衝
  2. 避免 O_DIRECT 搭配 EXT3
  3. innodb_buffer_pool_size 覆蓋熱資料集
  4. innodb_log_file_size 不宜過大,加速崩潰恢復
  5. 勿混用 innodb_thread_concurrency 與 thread_concurrency
  6. max_connections 設定保守值
  7. thread_cache_size ≥ 16
  8. skip-name-resolve 跳過 DNS
  9. 查詢快取視場景啟用(高寫入慎用)
  10. 增大 tmp_table_size 防臨時表落盤
  11. 增大 max_heap_table_size 防臨時表落盤
  12. sort_buffer_size 不宜過大
  13. 依 Key_read_requests/Key_reads 調 key_buffer_size
  14. innodb_flush_log_at_trx_commit=0/2 提升寫入但犧牲持久性
  15. 建立獨立測試環境驗證配置

三、Schema 設計與索引優化

  1. 保持資料模型整潔
  2. 歸檔冷資料
  3. 高頻查詢欄位加索引
  4. 避免過度索引
  5. 壓縮 TEXT/BLOB
  6. UTF8/UTF16 效能低於 latin1
  7. 謹慎使用 Trigger
  8. 去除冗余欄位
  9. 多對多用關聯表
  10. 選用最小足夠資料型別
  11. 大欄位低頻存取時垂直拆分
  12. 定期 ANALYZE/OPTIMIZE TABLE
  13. InnoDB 表定期重建聚簇索引
  14. 大批量加欄位:Drop 索引 → 加欄位 → 建索引
  15. 業務選擇儲存引擎
  16. Archive 引擎存日誌/審計表
  17. Session 資料放 Redis/Memcached
  18. 可變長字串優先 VARCHAR
  19. Schema 變更小步快跑
  20. 測試環境模擬生產數據量驗證
  21. 勿隨意改動配置檔
  22. 配置檔「少即是多」
  23. 無把握時用官方通用配置模板

配置參考圖

四、查詢優化實戰技巧

  1. Slow Query Log 捕捉慢查詢
  2. EXPLAIN 分析執行計畫
  3. 定期回歸測試核心 SQL
  4. 避免 COUNT(*) 全表掃描
  5. SQL 寫法一致性利用 Query Cache
  6. GROUP BY 替代 DISTINCT
  7. WHERE/GROUP BY/ORDER BY 欄位加索引
  8. 索引保持簡潔
  9. 優化器選錯索引用 USE INDEX
  10. 啟用 SQL_MODE=STRICT
  11. 低基數欄位 UNION 用 LIMIT
  12. Upsert 用 INSERT ... ON DUPLICATE KEY UPDATE
  13. 求最大值用 ORDER BY desc LIMIT 1
  14. 禁用 ORDER BY RAND()
  15. LIMIT M,N 深分頁慎用
  16. 子查詢改 JOIN/UNION
  17. 更新用 LOCK IN SHARE MODE 減少排他鎖
  18. 重啟後預熱 Buffer Pool
  19. 清空大表用 TRUNCATE 或 DROP+CREATE
  20. 嚴禁 SELECT *
  21. 使用長連接/連線池
  22. 壓測含背景負載
  23. 高負載時 SHOW PROCESSLIST 定位問題
  24. 可疑 SQL 在鏡像資料驗證

五、備份與災難恢復策略

  1. 從從庫備份
  2. 備份期間停止 SQL 執行緒
  3. 冷備份:停庫複製資料檔
  4. mysqldump 同步備份 Binlog
  5. 不信任 LVM 快照
  6. 單表導出加速單表恢復
  7. mysqldump 加 --opt
  8. 備份前 CHECK/OPTIMIZE TABLE
  9. 匯入前關閉 FK 與唯一性檢查
  10. 記錄庫/表/索引大小趨勢
  11. 自動化監控主從延遲與錯誤
  12. 定期排程備份
  13. 定期演練恢復
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved