DBA 專屬:MySQL 服務器參數與硬件層面優化指南
普通用戶只能優化 SQL 與索引;DBA 還能從服務器變量、作業系統、硬件架構三個維度提升吞吐。本文聚焦**僅管理員可操作**的優化點。
一、關鍵服務器變量調優
| 變量 | 作用 | 調優建議 |
delayed_queue_size | INSERT DELAYED 隊列長度 | 寫入峰值大時增大,減少客戶端阻塞 |
key_buffer_size | MyISAM 索引塊緩存 | **核心參數**;專用 DB 服務器設為物理內存 25%-30%;配合 --init-file 預熱熱點只讀表至 HEAP 表 |
table_open_cache | 表緩存數量 | 監控 Opened_tables,調大直到穩定 |
sort_buffer_size | 每線程排序緩存 | 複雜排序查詢多時適度增大(如 2-4MB),避免磁碟臨時表 |
read_rnd_buffer_size | 隨機讀緩存 | 大範圍 ORDER BY 優化 |
修改生效:動態變量 SET GLOBAL 即時生效;靜態變量需修改 my.cnf 並重啟。生效前請在測試環境驗證。
二、硬件層面優化清單
- 內存為王:盡可能裝滿主板支持的最大內存。大內存 = 大緩存 = 少磁碟 I/O。InnoDB
innodb_buffer_pool_size 設為物理內存 70%-80%。
- 禁用 Swap 或降低 Swappiness:
vm.swappiness=1 或完全關閉 Swap(需內存極大)。防止 MySQL 進程被換出導致延遲抖動。
- 高速存儲:NVMe SSD > SATA SSD > SAS HDD > SATA HDD。關注 **IOPS** 與 **延遲**,而非吞吐帶寬。RAID 10 平衡讀寫與冗余。
- I/O 隔離:數據目錄、二進制日志、Redo Log、臨時目錄(**tmpdir**)掛載到**不同物理設備**。分區隔離無效,因共用磁頭。
- 避免爭用:不要把數據庫放在高負載 Web 服務器、日志服務器同一磁碟。
- 靜態鏈接:編譯安裝時
--enable-static,減少動態鏈接開銷(< 5% 提升),但失去 UDF 動態加載能力。
三、監控驗證閉環
# 關鍵指標
SHOW GLOBAL STATUS LIKE 'Key_read_requests';
SHOW GLOBAL STATUS LIKE 'Key_reads'; -- 命中率 = 1 - Key_reads/Key_read_requests
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables'; -- 磁碟臨時表計數
iostat -xmt 1 -- 磁碟利用率、await、svctm
建立基線 → 調整參數/硬件 → 對比指標 → 固化配置 → 文檔歸檔。
- 上一篇文章: MySQL 可用 API 全景:C API、Perl DBI、PHP API 架構與選擇
- 下一篇文章: MySQL 不支持的功能清單與替代方案:子查詢、事務、外鍵、存儲過程等
Copyright ©
程式碼之家 All Rights Reserved