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查询统计的主要内容,如果未能解决你的问题,请参考以下文章

mysql统计每秒执行多少个查询,有啥办法吗?

MySQL使用笔记统计函数和分组数据记录查询

mysql按年度季度月度周日统计查询的sql语句

mysql加强~分组(统计)查询

mysql 按年度季度月度周日SQL统计查询

MySQL优化COUNT()查询