| 指標 | 計算公式 | 獲取命令 |
| QPS | Questions / Uptime | SHOW GLOBAL STATUS LIKE 'Questions'; |
| TPS | (Com_commit + Com_rollback) / Uptime | SHOW STATUS LIKE 'Com_commit'; |
| Key Buffer 命中率 | (1 - Key_reads/Key_read_requests) × 100% | SHOW STATUS LIKE 'Key%'; |
| InnoDB Buffer 命中率 | (1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) × 100% | SHOW STATUS LIKE 'innodb_buffer_pool_read%'; |
| Query Cache 命中率 | (Qcache_hits - Qcache_inserts) / Qcache_hits × 100% | SHOW STATUS LIKE 'Qcache%'; |
| Table Cache 狀態 | Open_tables / Opened_tables | SHOW STATUS LIKE 'Open%tables'; |
| Thread Cache 命中率 | (1 - Threads_created/Connections) × 100% | SHOW STATUS LIKE 'Thread%'; |
三、慢查詢配置與分析
1. 開啟慢查詢日誌
[mysqld]
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=1 # 秒級
long_query_time=0.1 # 5.6+ 支援毫秒級
或動態開啟:SET GLOBAL slow_query_log=ON; SET GLOBAL long_query_time=0.1;(重啟失效)。
2. mysqldumpslow 分析工具
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log # 按次數 Top 10
mysqldumpslow -s t -t 10 -g "left join" slow.log # 按耗時 Top 10 含 left join
參數:-s 排序(c/t/l/r),-t Top N,-g 正則過濾。
3. EXPLAIN 執行計劃分析
關鍵欄位:
type:system > const > eq_ref > ref > range > index > ALL(由好到壞)
key:實際使用索引
rows:預估掃描行數
Extra:Using index(覆蓋索引)、Using where、Using temporary、Using filesort
4. PROFILING 精準剖析
SET profiling=1;
SELECT * FROM test;
SHOW PROFILES;
SHOW PROFILE FOR QUERY 1; -- 顯示每階段耗時:Opening tables, Sending data, ...
SET profiling=0;
四、索引與查詢優化
索引類型
- 普通、唯一、主鍵、全文(
FULLTEXT)
- 單列 vs 多列(複合索引,最多 16 列,支援前綴)
最左前綴原則
複合索引 (a,b,c) 可支援 a、a,b、a,b,c 三種查詢條件。
導致索引失效的常見寫法
WHERE col != ... / NOT IN / <>
WHERE func(col) = ...(函數運算)
LIKE '%xxx%'(前導通配符)
- 隱式類型轉換(字串比數字)
SQL 寫法微優化
- 單行結果加
LIMIT 1
- 禁用
SELECT *,明確列名
- 用
JOIN 替代子查詢(避免臨時表)
- 優先
NOT NULL、固定長度、ENUM/CHAR 代替 VARCHAR
- 大批量
DELETE/INSERT 分批執行
五、核心參數配置優化
連線相關
max_connections:理想值 Max_used_connections / max_connections ≈ 85%
back_log:預設 50,高併發調 128~512
interactive_timeout:預設 28800,建議 7200
緩衝區相關(全域/會話)
key_buffer_size(MyISAM 索引):命中率 > 99.9%
query_cache_size:碎片率 > 20% 執行 FLUSH QUERY CACHE 或調 query_cache_min_res_unit
- 會話級:
read_buffer_size, read_rnd_buffer_size, sort_buffer_size, join_buffer_size(建議 16M,注意 × 連線數)
table_open_cache:1G 機器 128-256,4G 機器 256-384
tmp_table_size / max_heap_table_size:64-256M,磁盤臨時表比例 < 25%
thread_cache_size:預設 110,建議 80
thread_concurrency:CPU 核心數 × 2
InnoDB 專屬參數
innodb_buffer_pool_size:單實例機器物理記憶體 50%-80%(2G 機器建議 1G)
innodb_flush_log_at_trx_commit:1(最安全) 2(折中) 0(最快,可能丟 1 秒數據)。批次寫入建議合併事務。
innodb_log_buffer_size:4-8M
innodb_additional_mem_pool_size:20M 起步
innodb_thread_concurrency:2 × (CPU + 磁碟數)
copyright ©
萬盛學電腦網 all rights reserved