MySQL 優化非一日之功,而是隨業務成長持續演進的系統工程。資深運維專家總結五大階段優化體系,從表設計到架構擴展再到日常維護,涵蓋參數調優、核心調度、硬體選型、主從讀寫分離、分庫分表分區、緩存引入、備份恢復與監控指標,為中小型企業提供可落地的完整優化路線圖。
INT、VARCHAR、避免 TEXT/BLOB 混存)user_id % 100),為未來水平拆分鋪路noatime,nodiratime 掛載,減少元數據寫入datadir、tmpdir、binlog 分區ulimit -n 65535、tcp_tw_reuse=1、swappiness=0[mysqld]
innodb_buffer_pool_size = 物理記憶體 60-70%
innodb_buffer_pool_instances = 4~8
innodb_flush_log_at_trx_commit = 2 (非強一致業務)
innodb_file_per_table = ON
innodb_log_file_size = 1G
innodb_log_buffer_size = 16M
max_connections = 3000
query_cache_type = OFF (高並發寫入場景建議關閉)
deadline 或 noop (SSD)echo never > /sys/kernel/mm/transparent_hugepage/enabled| 策略 | 適用場景 | 實現複雜度 |
|---|---|---|
| 垂直分庫 | 業務模組解耦 (web/bbs/blog) | 低 |
| 垂直分表 | 大字段/冷熱分離 | 中 |
| 水平分表 | 單表 > 5000萬/1億行 | 高 (需中間件或應用改造) |
| 分區表 | 時間序列/範圍查詢為主 | 低 (透明於應用) |
QPS = Questions / Uptime
TPS = (Com_commit + Com_rollback) / Uptime
-- 亦可用 Com_select/insert/delete/update 間差值計算
-- 開啟慢查詢
SET GLOBAL slow_query_log=ON;
SET GLOBAL long_query_time=1;
SET GLOBAL log_queries_not_using_indexes=ON;
-- 分析工具
mysqldumpslow -t 10 /var/log/mysql/slow.log
pt-query-digest /var/log/mysql/slow.log -- 功能更全
mysqldump --single-transaction --master-data=2 僅適合小庫myisamchk -r -q (需停庫)mysqlcheck -r -q (線上可用)swappiness=0innodb_flush_method=O_DIRECT 避免雙重緩衝innodb_buffer_pool_size 覆蓋熱資料max_connections 設 80% 上限,thread_cache_size=16EXPLAIN + 基準測試 = 優化鐵三角SELECT *、ORDER BY RAND()、大 OFFSET優化無終點,唯有持續觀測、分析、調整,才能讓 MySQL 在業務快速增長中穩健前行。