慢查詢日誌分析問題sql
slow_query_log 啓動或者停止慢查詢日誌
slow_query_log_file 指定慢查詢日誌的存儲路徑和文件
long_query_time 指定記錄慢查詢日誌的閾值通常改爲0.001秒也就是1毫秒
long_queries_not_using_indexs 是否記錄未使用索引的sql
常用的慢查詢日誌分析工具
mysqldumpslow
pt-query-digest
實時獲取問題sql
select id,user,host,DB,command,time,state,info from
information_schema.PROCESSLIST where TIME>60
SQL的解析預處理以及執行計劃
- 客戶端發送sql請求給服務器
- 服務器檢查是否可以在查詢緩存中命中該sql
查詢緩存對性能的影響(讀寫頻繁可以關閉)
query_cache_type 設置查詢緩存是否可用
query_cache_size 設置查詢緩存的內存大小
query_cache_limit 設置查詢緩存可用存儲的最大值
query_cache_wlock_invalidate 數據表被鎖後是否返回緩存中的數據
query_cache_min_res_unit 設置查詢緩存分配的內存塊最小單位
- 服務器執行sql解析,預處理,再由優化器生成對應的執行計劃
- 根據執行計劃調用存儲引擎API來查詢數據
- 將結果返回給客戶端
如何確定查詢處理各個階段所消耗的時間?
使用profile //session 級別
set profiling = 1;
執行查詢
show profiles //查看每一個查詢所消耗的總時間的信息
show profile for query N //查詢每個階段所消耗的時間 N是上過命令的id
使用performance_schema //全局級別
如何優化特定的sql?
如何修改大表的結構
pt-online-schema-change //可以參考這個https://blog.csdn.net/yangshangwei/article/details/104152835