optimizer_trace
它可以跟踪优化器做出的各种决策(比如访问表的方法、各种开销计算、各种转换等),并将跟踪结果记录到
information_schema 数据库中的 optimizer_trace 表中。
mysql 默认是关闭 追踪的
开启、并设置格式为 josn,同时设置trace最大能够使用的内存大小,避免解析过程中因默认内存过小而不能完整展示
set optimizer_trace=“enabled=on”,end_markers_in_json=on;
set optimizer_trace_max_mem_size=100000;开启后,可分析如下语句
select
insert
replace
update
delete
explain
set
declare
case
if
return
call
Sys schema 视图摘要
- 主机相关:以host_summary 开头,主要汇总了IO延迟的信息
- InnoDB 相关:以innodb开头,汇总了innodb buffer 信息和事务等待innodb锁的信息
- I/O相关:以io开头,汇总了等待I/O、I/O 使用量情况
- 内存使用情况:以memory开头,从主机、线程、事件等角度展示内存的使用情况
- 连接与会话信息:processlist和session相关视图,总结了会话相关信息
- 表相关:以schema_table 开头的视图,展示了表的统计信息
- 索引信息:统计了索引的使用情况,包含冗余索引和未使用的索引情况
- 语句相关:以statement开头,包含执行全表扫描、使用临时表、排序的语句信息。
- 用户相关:以user开头的视图,统计了用户使用的文件I/O、执行语句统计信息。
10.等待事件相关信息:以wait开头,展示等待事件的延迟情况。
索引情况
查询冗余索引
select * from sys.schema_redundant_indexes;
查询未使用过的索引
select * from sys。schema_unused_indexes;
查询索引的使用情况
select index_name,rows_selected,rows_inserted,rows_updated,rows_deleted
from sys.schema_index_statistics where table_name=‘xxx’;
表相关
查询表的访问量
select table_schema,table_name,sum(io_read_requests+io_write_requests) as io
from sys.schema_table_statistics group by table_schema,table_name order by io desc;
查询占用 bufferpool较多的表
select object_schema,object_name,allocated data
from sys,innodb_buffer_stats_by_table
group by object_schema,object_name
order by allocated limit 10;
查看表的全表扫描情况
select * from sys。statements_with_full_table_scans where db=‘xxx’;