千金良方:MySQL性能优化金字塔法则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

9.10 查看哪些语句使用了文件排序

使用statements_with_sorting视图可以查看执行了文件排序的语句,在默认情况下按照语句总延迟时间(执行时间)降序排列。数据来源:performance_schema.events_statements_summary_by_digest。

下面是使用statements_with_sorting视图查询的结果集。

mysql> select * from statements_with_sorting limit 1\G
*************************** 1. row ***************************
            query: SELECT IF((`locate`(? , ` ...  . `COMPRESSED_SIZE`))DESC  #经过标准化转换的语句字符串
              db: sys  # 语句对应的默认数据库,如果没有默认数据库,则该字段值为NULL
      exec_count: 4   # 语句执行的总次数
    total_latency: 46.53 s         # 语句执行的总延迟时间(执行时间)
sort_merge_passes: 48             # 语句执行发生的语句排序合并的总次数
  avg_sort_merges: 12              # 针对发生排序合并的语句,每条语句的平均排序合并次数见视图查询语句文本中的SUM_SORT_MERGE_PASSES/COUNT_STAR)
sorts_using_scans: 16             # 语句排序执行全表扫描的总次数
sort_using_range: 0                # 语句排序执行范围扫描的总次数
      rows_sorted: 415391          # 语句执行发生排序的总数据行数
  avg_rows_sorted: 103848         # 针对发生排序的语句,每条语句的平均排序数据行数见视图查询语句文本中的SUM_SORT_ROWS/COUNT_STAR)
      first_seen: 2017-09-07 12:36:58       # 该语句第一次出现的时间
        last_seen: 2017-09-07 12:38:37      # 该语句最近一次出现的时间
          digest: 59abe341d11b5307fbd8419b0b9a7bc3
                        # 语句摘要计算的MD5 hash
1 row in set(0.00 sec)

下面贴出视图查询语句文本。

SELECT sys.format_statement(DIGEST_TEXT)AS query,
      SCHEMA_NAME db,
      COUNT_STAR AS exec_count,
      sys.format_time(SUM_TIMER_WAIT)AS total_latency,
      SUM_SORT_MERGE_PASSES AS sort_merge_passes,
      ROUND(IFNULL(SUM_SORT_MERGE_PASSES / NULLIF(COUNT_STAR, 0), 0))AS avg_sort_merges,
      SUM_SORT_SCAN AS sorts_using_scans,
      SUM_SORT_RANGE AS sort_using_range,
      SUM_SORT_ROWS AS rows_sorted,
      ROUND(IFNULL(SUM_SORT_ROWS / NULLIF(COUNT_STAR, 0), 0))AS avg_rows_sorted,
      FIRST_SEEN as first_seen,
      LAST_SEEN as last_seen,
      DIGEST AS digest
  FROM performance_schema.events_statements_summary_by_digest
WHERE SUM_SORT_ROWS > 0
ORDER BY SUM_TIMER_WAIT DESC;