問題分析
實時問題分析,歷史問題分析可以通過慢查詢日志或genrary日志分析SQL語句的性能
從操作系統級命令檢查資源使用情況
top命令檢查系統資源使用情況
top
檢查mysqld進程信息
ps -ef|grep mysqld
檢查mysql線程資源占用情況
# top -H -p <mysql進程id>
top -H -p 6836
從DB層面檢查分析
檢查數據庫當前連接進程信息
show processlist;
show full processlist;
show status like 'Thread%';
登陸mysql中查詢定位SQL
SELECT a.THREAD_OS_ID,b.user,b.host,b.db,b.command,b.time,b.state, b.info
FROM performance_schema.threads a,information_schema.processlist b
WHERE b.id = a.processlist_id
and a.THREAD_OS_ID = 6886 -- 上圖top命令獲取到的 OS_Thread_PID
;
分析上面的SQL的執行計划
explain SELECT * FROM t_log_details WHERE log_id= 255 AND type=2;
從上面的語句中,需要從表中掃描792060行記錄,消耗的邏輯IO高
檢查表結構
show create table t_log_details\G
show index from t_log_details;
建議添加索引優化SQL。
解決方案
- 建議在t_log_details表的log_id列創建索引