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

9.11 查看哪些语句使用了临时表

使用statements_with_temp_tables视图可以查看使用了临时表的语句,在默认情况下按照磁盘临时表数量和内存临时表数量进行降序排列。数据来源:performance_schema.events_statements_summary_by_digest。

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

mysql> select * from statements_with_temp_tables limit 1\G
*************************** 1. row ***************************
                  query: SELECT`performance_schema`.  ... name`. `SUM_TIMER_WAIT`DESC # 经过标准化转换的语句字符串
                    db: sys       # 语句对应的默认数据库,如果没有默认数据库,则该字段值为NULL
              exec_count: 2        # 语句执行的总次数
          total_latency: 1.53 s    # 语句执行的总延迟时间(执行时间)
      memory_tmp_tables: 458       # 语句执行时创建的内部内存临时表的总数量
        disk_tmp_tables: 38        # 语句执行时创建的内部磁盘临时表的总数量
avg_tmp_tables_per_query: 229     # 对于使用了内存临时表的语句,每条语句使用内存临时表的平均数量见视图查询语句文本中的SUM_CREATED_TMP_TABLES/COUNT_STAR)
  tmp_tables_to_disk_pct: 8  # 内存临时表的总数量与磁盘临时表的总数量百分比,表示磁盘临时表的转换率见视图查询语句文本中的SUM_CREATED_TMP_DISK_TABLES/SUM_CREATED_TMP_TABLES)
              first_seen: 2017-09-07 11:18:31  # 该语句第一次出现的时间
              last_seen: 2017-09-07 11:19:43   # 该语句最近一次出现的时间
                  digest: 6f58edd9cee71845f592cf5347f8ecd7
                                        # 语句摘要计算的MD5 hash
1 row in set(0.00 sec)

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

SELECT sys.format_statement(DIGEST_TEXT)AS query,
      SCHEMA_NAME as db,
      COUNT_STAR AS exec_count,
      sys.format_time(SUM_TIMER_WAIT)as total_latency,
      SUM_CREATED_TMP_TABLES AS memory_tmp_tables,
      SUM_CREATED_TMP_DISK_TABLES AS disk_tmp_tables,
      ROUND(IFNULL(SUM_CREATED_TMP_TABLES / NULLIF(COUNT_STAR, 0), 0))AS avg_tmp_tables_per_query,
    ROUND(IFNULL(SUM_CREATED_TMP_DISK_TABLES / NULLIF(SUM_CREATED_TMP_TABLES, 0), 0)* 100)AS tmp_tables_to_disk_pct,
      FIRST_SEEN as first_seen,
      LAST_SEEN as last_seen,
      DIGEST AS digest
  FROM performance_schema.events_statements_summary_by_digest
WHERE SUM_CREATED_TMP_TABLES > 0
ORDER BY SUM_CREATED_TMP_DISK_TABLES DESC, SUM_CREATED_TMP_TABLES DESC;

温馨提示:关于sys系统库更详细的内容,可参阅微信公众号“沃趣技术”,其中我们用15个章节对其进行了全方位的介绍。