MySQL-慢查询日志

目录

一、相关参数

二、分析工具 mysqldumpslow

三、查看执行成本 show profile

四、分析查询语句:EXPLAIN

4.1、能做什么

4.2、基本语法

4.3、语句输出各个列的作用

4.4、小结

4.5、四种输出格式

五、分析优化器执行计划:trace

5.1、相关语句


一、相关参数

-- 临时方式
# 查询是否开启慢查询日志
show variables like '%slow_query_log%';
# 开启慢查询日志
set global slow_query_log = on;

# 查看时间阈值
show variables like '%long_query_time%';
# 设置时间
set long_query_time=1;

# 查询有多少慢查询记录
show status like 'slow_queries';
# 删除慢查询日志
rm ***.log
# 使用指令来重新生成
mysqladmin -uroot -p flush-logs slow

-- 永久方式
[mysql]
slow_query_log=ON # 开启慢查询日志
slow_query_log_file=/var/lib/mysql/***.log # 慢查询日志的目录和文件名信息 /usr/local/mysql/data/KanlinadeMacBook-Pro-slow.log 
long_query_time=3 #设置慢查询的阈值为3秒,超出此设定的sql即被记录为慢查询日志
log_output=FILE

二、分析工具 mysqldumpslow

根目录下执行,mysqldumpslow -help; 查看相关指令用法。

# 按照时间排序查看慢查询日志前5条
mysqldumpslow -s t -t 5 /usr/local/mysql/data/KanlinadeMacBook-Pro-slow.log 

三、查看执行成本 show profile

# 查看是否开启
show variables like 'profiling';
#设置开启
set profiling='ON';
# 查看最近查询语句
show profiles;
# 查看指定查询语句具体执行成本
show profile cpu,block io for quert 1;

四、分析查询语句:EXPLAIN

4.1、能做什么

  • 表的读取顺序;
  • 数据读取操作的操作类型;
  • 哪些索引可以使用;
  • 哪些索引实际被使用;
  • 表之间的引用;
  • 每张表有多少行被优化器查询。

4.2、基本语法

EXPLAIN 语句

DESCRIBE 语句

4.3、语句输出各个列的作用

  • table:查询的每一条记录对应一个单表;
  • id:在一个大的查询语句中每个select关键字都对应一个唯一的id;
  • select_type:小查询在大查询中扮演什么角色;
  • type:mysql执行查询时对表的访问方法:system(当表中只有一条数据并且该表的存储引擎统计数据是精确的),const(主键或者唯一二级索引与常数进行匹配),eq_ref(连接查询时,被驱动表通过主键或者唯一二级索引列等值匹配的方式进行访问),ref(通过普通二级索引列与常量进行等值匹配是来查询),index_merge(单表访问方法时再某些场景下可以使用Intersection、Union、Sort-Union这三种索引合并的方式来执行查询),unique_subquery(将in查询转换成exists,而且子查询可以使用到主键进行等值匹配),range(范围查询),index(使用索引覆盖,但需要扫描全部索引记录时),all(全表扫描)。
  • possible_keys:可能使用到的索引;
  • key:真实使用的索引;
  • key_len:实际使用到的索引长度(字节数),值越大越好
  • ref:与索引列进行等值匹配的对象信息;

4.4、小结

  • EXPLAIN不考虑各种Cache;
  • EXPLAIN不能显示MySQL在执行查询时所作的优化工作;
  • EXPLAIN不会告诉你关于触发器、存储过程的信息或者用户自定义函数对查询的影响;
  • 部分统计信息是估算的,并非精确值。

4.5、四种输出格式

  • 传统格式:表格形式
  • JSON格式:EXPLAIN FORMAT=JSON,多了一个衡量计划好坏的形式
  • TREE格式:根据各部分查询顺序与关系
  • 可视化输出:mysql workbench

五、分析优化器执行计划:trace

5.1、相关语句

# 开启trace并设置格式为JSON
set optimizer_trace="enabled=on",end_markers_in_json=on;
set optimizer_trace_max_mem_size=1000000;

可以写增删改查语句

# mysql如何执行
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.innodb_buffer_stats_by_table 
order by allocated
limit 10
# 查询占用bufferPool较多的表
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'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值