【问题标题】:Mysql Query StatisticsMysql查询统计
【发布时间】: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 一起使用的性能和统计测量框架/工具。

【问题讨论】:

    标签: python mysql performance mysql-workbench mysql-python


    【解决方案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
    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2012-08-31
    • 2019-02-16
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多