[mysqld] slow_query_log = 1 long_query_time = 5 log_queries_not_using_indexes = 1
記錄執行 >5s 或未用索引的查詢。

SET profiling = 1; # 開啟(部分版本不支援) -- 執行 SQL -- SHOW PROFILES; # 耗時總覽 SHOW PROFILE CPU, BLOCK IO FOR QUERY; # 細粒度分析
| 級別 | 引擎 | 關鍵特性 |
|---|---|---|
| 表級 | MyISAM, Memory, CSV | 讀寫隊列優先級:寫鎖阻塞讀,READ_HIGH_PRIORITY 讀鎖阻塞寫 |
| 行級 | InnoDB, NDB Cluster | 盡量走索引避免升級表鎖、縮小鎖範圍、減少範圍查詢間隙鎖、控制事務大小、降低隔離級別 |
| 頁級 | BerkeleyDB | 折衷方案 |
監控:SHOW STATUS LIKE '%table_locks%'(MyISAM)、SHOW STATUS LIKE '%Innodb_row_lock%'(InnoDB)
# 自動生成 SQL mysqlslap --concurrency=50,100 --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 # 指定腳本 mysqlslap --concurrency=25,50 --create-schema=test --query=/path/test.sql
!= / <> 無法用索引ABS(col))LIKE '%abc' 通配符開頭重點關注:type(訪問類型:ALL/index/range/ref/eq_ref/const...)、key(實際用索引)、rows(預估掃描行)、Extra(Using index/temporary/filesort/where...)
時間類型選擇:TIMESTAMP 4 字節(1970~2038)、DATETIME 8 字節(1001~9999)。
sync_binlog=1:最安全,性能損耗 ~5 倍;=0 最快但 Crash 丟緩存事務binlog_cache_size / max_binlog_cache_size:多語句事務調大max_binlog_size=512M~1G:事務跨文件不切分高併發下 Hash 開銷、頻繁失效導致命中率低、Result Set 重複緩存浪費記憶體。寫多讀少場景建議關閉。
(Connections - Threads_created) / Connections * 100% → 目標 ≥ 90%
系統 800MB + 線程獨佔 2GB + MyISAM Key Cache 1.5GB = InnoDB Buffer Pool 3.7GB。