Mysql查询统计
Posted
技术标签:
【中文标题】Mysql查询统计【英文标题】:Mysql Query Statistics 【发布时间】:2020-10-21 20:03:56 【问题描述】:以下是我用来获取表单工作台的一些查询统计信息。我正在寻找自动化。我正在编写一个可以执行查询并提供其统计信息的 python 脚本。我使用了分析(现在已弃用)。给出查询时如何获取所有这些统计数据?
Query Execution Time :
Execution time: 0:00:0.00824800
Table lock wait time: 0:00:0.00021400
Temporary Tables :
Temporary disk tables created: 1
Temporary tables created: 1
Join per type :
Full table scans (Select_scan): 1
Joins using table scans (Select_full_join): 0
Joins using range search (Select_full_range_join): 1
Joins with range checks (Select_range_check): 0
Joins using range (Select_range): 0
Sorting :
Sorted rows (Sort_rows): 0
Sort merge passes (Sort_merge_passes): 0
Sorts with ranges (Sort_range): 0
Sorts with table scans (Sort_scan): 0
请推荐一个我可以与 python 或 java 一起使用的性能和统计测量框架/工具。
【问题讨论】:
【参考方案1】:EXPLAIN FORMAT=JSON
(提示:这让您知道哪个步骤需要“文件排序”,以及多个步骤是否需要它。)
EXPLAIN ANALYZE
(仅在最新版本中)
优化器跟踪。
Slowlog 有一些信息。推荐pt-query-digest
总结一下。 (提示:最适合查找“最差”的查询。)
一般日志有一些信息。 (提示:谨慎使用;它将大量写入磁盘。)
上述任何一个日志都可以写入TABLE
,但信息量可能不如FILE
。
performance_schema
我主要将此技术用于“处理程序”计数,但也可以使用其他东西:
FLUSH STATUS;
run the query
SHOW SESSION STATUS LIKE 'Handler%';
对于不特定于会话的事物,例如大多数 `Innodb_% 状态值,请使用以下内容。然后,从第一个输出中减去第二个输出。
SHOW STATUS LIKE 'Handler%';
run the query
SHOW STATUS LIKE 'Handler%';
注意:Sort_merge_passes
虽然是特定于会话的,但会继续增加。
当我被要求提供性能帮助时,我会从这些开始:http://mysql.rjweb.org/doc.php/mysql_analysis
(除了 99% 的时间之外,“个人资料”很少显示任何其他状态,例如神秘的“正在发送数据”。我很高兴它会消失。)
【讨论】:
关于如何将它与 python 集成的任何想法?我使用 mysql 5.6。假设我有一个选择查询。我需要在 python 中获取这些统计信息。 @INDIANDECODER - 状态值可通过普通的SELECT
语句在information_schema.SESSION_STATUS
中获得。
@INDIANDECODER - 运行 SHOW
就像运行 SELECT
。以上是关于Mysql查询统计的主要内容,如果未能解决你的问题,请参考以下文章