定位MySQL全表扫描语句和临时表语句
演示环境MySQL版本mysql5.7.22
查看哪些语句使用了全表扫描:
sys.statements_with_full_table_scans视图可以查看全表扫描或者没有使用最优索引的语句。在默认情况下 按照全表扫描次数与语句总次数百分比和语句总延迟时间(执行时间)降序排列 数据来源是performance_schema.events_statements_summary_by_digest表
'tidb03' root@localhost 19:48:31 (none)>select * from sys.statements_with_full_table_scans limit 1\G
*************************** 1. row ***************************
query: SELECT * FROM `db_risk` . `t_credit_apply` GROUP BY STATUS #经过标准化转换的语句字符串
db: db_mall #语句对应的默认数据库,如果没有默认数据库,此字段为NULL
exec_count: 1 #语句执行的总次数
total_latency: 958.87 ms #语句执行的总的延迟时间(执行时间)
no_index_used_count: 1 #执行语句没有使用索引扫描表(而是全表扫描)的总次数
no_good_index_used_count: 0 #语句没有使用更好的索引扫描表的总的次数
no_index_used_pct: 100 #执行语句没有使用索引扫描表(而是全表扫描)的次数与语句执行总次数的比分比
rows_sent: 3 #语句执行从表返回给客户端的总数据行数
rows_examined: 155203 #语句执行从存储引擎检查的总数据行数
rows_sent_avg: 3 #每条语句执行从表返回给客户端的平均数据行数
rows_examined_avg: 155203 #每条语句执行从存储引擎读取的平均数据行数
first_seen: 2021-09-11 16:29:32 #语句第一次出现的时间
last_seen: 2021-09-11 16:29:32 #语句最近一次出现的时间
digest: ea2054392088be609f92085b7009c68b #语句摘要计算的MD5 hash 值
10 rows in set (0.12 sec)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
查看哪些语句使用了临时表:
sys.statements_with_temp_tables 视图可以查看使用临时表的语句。默认采用临时表数量和内存临时表数量进行降序排列
'db-read4' root@localhost 09:58:34 (none)>select * from sys.statements_with_temp_tables limit 2\G
*************************** 1. row ***************************
query: SELECT DISTINCTROW `oro` . `id ... , `oro` . `recycle_date` FROM # 经过标准化转换的语句字符串
db: db_crm #语句对应的默认数据库,如果没有默认数据库,此字段为NULL
exec_count: 1533000 #语句执行的总次数
total_latency: 4.18 h #语句执行的总的延迟时间(执行时间)
memory_tmp_tables: 1533002 ##语句执行创建的内部内存临时表的总数量
disk_tmp_tables: 781 #语句执行创建的内部磁盘临时表的总数量
avg_tmp_tables_per_query: 1 #对于使用了内存临时表的语句,每条语句使用内存临时表的平均数量
tmp_tables_to_disk_pct: 0 #内存临时表的总数量和磁盘临时表的总数量的百分比,表示磁盘临时表的转换率
first_seen: 2021-08-31 19:27:40 #语句第一次出现的时间
last_seen: 2021-09-21 09:57:39 #语句最近一次出现的时间
digest: bc4e497cc1db3e882c95bd2d864282c2
*************************** 2. row ***************************
query: SELECT `trigger_name` , `event ... NARY `event_object_table` = ?
db: db_crm
exec_count: 392
total_latency: 3.47 s
memory_tmp_tables: 392
disk_tmp_tables: 392
avg_tmp_tables_per_query: 1
tmp_tables_to_disk_pct: 100
first_seen: 2021-09-01 20:42:27
last_seen: 2021-09-03 11:52:42
digest: e2a54b56b20eddbe5042266529cc2983
2 rows in set (0.04 sec)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
查看哪些语句使用了文件排序:
sys.statements_with_sorting 视图查询的结果集
'db-read4' root@localhost 10:08:32 (none)>select * from sys.statements_with_sorting limit 2\G
*************************** 1. row ***************************
query: SELECT COUNT ( `tsl` . `id` ) ... ROUP BY `tsl` . `new_user_id`
db: db_crm
exec_count: 3349
total_latency: 6.64 h
sort_merge_passes: 0
avg_sort_merges: 0
sorts_using_scans: 1925
sort_using_range: 0
rows_sorted: 368842
avg_rows_sorted: 110
first_seen: 2021-08-31 19:38:57
last_seen: 2021-09-19 00:22:46
digest: c283a0367d88ccdc6f66b115d6862e71
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.