性能监控工具
SHOW GLOBAL STATUS LIKE 'Connections' ;
SHOW GLOBAL STATUS LIKE 'Uptime' ;
SHOW GLOBAL STATUS LIKE 'Slow_queries' ;
SHOW GLOBAL STATUS LIKE 'Innodb_rows_read' ;
SHOW GLOBAL STATUS LIKE 'Innodb_rows_inserted' ;
SHOW GLOBAL STATUS LIKE 'Innodb_rows_updated' ;
SHOW GLOBAL STATUS LIKE 'Innodb_rows_deleted' ;
SHOW GLOBAL STATUS LIKE 'Com_select' ;
SHOW GLOBAL STATUS LIKE 'Com_insert' ;
SHOW GLOBAL STATUS LIKE 'Com_update' ;
SHOW GLOBAL STATUS LIKE 'Com_delete' ;
统计sql执行扫描页数
SELECT student_id, class_id, NAME, create_time FROM student_info
WHERE id = 900001 ;
SHOW STATUS LIKE 'last_query_cost' ;
SELECT student_id, class_id, NAME, create_time FROM student_info
WHERE id BETWEEN 900001 AND 900100 ;
SHOW STATUS LIKE 'last_query_cost' ;
慢查询日志
show GLOBAL variables like 'slow_query_log%'
set global slow_query_log= 'ON' ;
show variables like '%long_query_time%' ;
set global long_query_time = 1
SHOW GLOBAL STATUS LIKE '%Slow_queries%' ;
[ mysqld]
slow_query_log= NO
slow_query_log_file= / var/ mysql/ slow. log
long_query_time= 3
log_output= FILE
查看sql执行成本
show variables like 'profiling' ;
set profiling = 'ON' ;
show profiles;
show profile for query 57 ;
show profile
EXPLAIN ,sql的执行计划, 工具参数说明
参数 描述 table 对应几张表 id 每个select 对应一个ID,有时候我们写的子查询优化器直接给我吗优化成对表连接了, ID越大表示越先被执行, ID相同按照顺序执行 selectType 查询中不包含Union 或者 子查询的都叫 Simple; 不相关子查询里面的叫 SubQuery; 相关子查询叫 DEPENDENT SUBQUERY;外面的叫PRIMARY type*
system; cons(参数为常量级别, 并且列有唯一索引); eq_ref(多表连接, 被驱动表是主键关联或有索引); ref当一个普通索引与常量查询的时候;index_merge (当两个列都有索引 都为单值索引的时候这两个索引都可以使用到);range (当我们使用 in 或者>< 的时候); index(当我们查询的字段再这个二级索引的时候就是遍历索引, 不用回表就能找到数据); all(全表扫描) possible_keys
可能用到的索引 key
实际用到的索引 key_len
实际用到索引的长度字节, 主要针对联合索引, 越大越好, 列没有非空限制会多加一个字节记录非空状态, 列如果是变长字段会加2个字节记录变长字段列表(最大表示65535 长度 varchar最长为 65535 ) ref 表示查询的参数是什么有 const, func等 rows
预估找到行记录 filtered 根据过滤条件过滤后有多少百分比符合这个条件, 在多表连接中可以看出外部查询记录查询了多少, 预估内部查询需要执行多少次 extra
Using index(没有回表查询,直接从索引获得数据很好);Using filesort(没有使用索引的排序性能差) Using temporary(使用临时表了, 非常耗用性能)
其他工具
可以查询到执行计划的成本和详细信息 EXPLAIN FORMAT=JSON SELECT * from table; 可以使用 Workbench 可以以图形化界面的方式进行sql的查询 展示查询优化器优化过后的sql语句 SHOW WARNINGS\G 在使用 EXPLAIN 分析后执行上面的语句可以查看执行优化器优化后的sql语句 分析优化器执行计划:trace
SET optimizer_trace= "enabled=on" , end_markers_in_json= on ;
set optimizer_trace_max_mem_size= 1000000 ;
select * from student where id < 10 ;
select * from information_schema. optimizer_trace\G
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_schema= 'dbname' ;
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 ;
select object_schema, object_name, allocated, data
from sys. innodb_buffer_stats_by_table order by allocated limit 10 ;
select * from sys. statements_with_full_table_scans where db= 'dbname' ;
select db, exec_count, query from sys. statement_analysis order by exec_count desc ;
select db, exec_count, first_seen, last_seen, query
from sys. statements_with_sorting limit 1 ;
select db, exec_count, tmp_tables, tmp_disk_tables, query
from sys. statement_analysis where tmp_tables> 0 or tmp_disk_tables > 0 order by ( tmp_tables+ tmp_disk_tables) desc ;
select file , avg_read, avg_write, avg_read+ avg_write as avg_io
from sys. io_global_by_file_by_bytes order by avg_read limit 10 ;
select * from sys. innodb_lock_waits;