找到“元凶”SQL,并理解其为什么慢。
专业操作步骤:
启用并分析慢查询日志(Slow Query Log):
关键配置(MySQL示例):
slow_query_log = 1slow_query_log_file = /var/lib/mysql/slow.loglong_query_time = 1.0 # 定义“慢”的阈值(单位:秒),建议从1秒开始,逐步收紧至0.1秒。log_queries_not_using_indexes = 1 # 捕获未使用索引的查询,非常重要!log_throttle_queries_not_using_indexes = 100 # 避免日志被刷爆
分析工具: 使用 mysqldumpslow 或更强大的 pt-query-digest (Percona Toolkit) 对慢查询日志进行聚合分析。
bashpt-query-digest /var/lib/mysql/slow.log > slow_report.txtpt-query-digest
会生成一份报告,列出:
1.最耗时的查询(按总时间排序)
2.执行次数最多的查询
3.最锁表的查询
实时数据库诊断:
查询进程列表: SHOW FULL PROCESSLIST; 查看当前正在执行的所有SQL,观察是否有长时间处于 "Sending data", "Copying to tmp table", "Sorting result" 状态的查询。
利用性能模式(Performance Schema)和 sys Schema: (MySQL 5.7+/8.0+)
sql-- 查找哪些SQL消耗了最多的总时间SELECT * FROM sys.statement_analysis ORDER BY total_latency DESC LIMIT 10;-- 查看全表扫描最多的语句SELECT * FROM sys.statements_with_full_table_scans LIMIT 10;
解剖单个慢查询:使用 EXPLAIN(执行计划)
将抓到的慢SQL,在前面加上 EXPLAIN (或 EXPLAIN FORMAT=JSON) 来查看其执行计划。
关注以下字段:
1.type: 访问类型。性能从优到劣:system > const > eq_ref > ref > range > index > ALL(全表扫描,必须优化)。
2.key: 实际使用的索引。如果为NULL,说明未使用索引。
3.rows: 预估需要扫描的行数。这个值越大,性能越差。
4.Extra: 额外信息。出现 Using filesort(文件排序)、Using temporary(使用临时表)通常是性能杀手。
文章标签: 软件产品登记测试 软件产品登记 软件登记 软件第三方测试 第三方软件检测 第三方数据库检测 软件数据库测试 数据库系统检测 第三方软件数据库测试 第三方数据库测试 第三方数据库系统检测