(1)mysql优化之sql性能问题定位

本文聚焦于MySQL性能优化,介绍了如何定位SQL性能问题。通过show status获取SQL执行频率,利用explain分析SQL效率,结合explain extended和show warnings深入理解优化过程,使用show profile分析执行细节,并借助慢查询日志进行问题排查。
摘要由CSDN通过智能技术生成

概述

我们面对一个问题的时候,首先是发现问题,然后才是解决问题。在这篇文章中,主要解决如何定位问题。

解决方法

1.通过show status了解各种sql执行频率

show status [like 'com_%'];

Com_xxx表示每个xxx语句执行的次数。
具体参数,参见:
http://lxneng.iteye.com/blog/451985
http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/
show status

2.通过explain分析低效的SQL

explain sql_statement;

mysql explain
参数关系

参数解释
select_type表示查询的类型simple-简单表,primary-主查询,union-union中的第二个查询,subquery-子查询
table查询的表-
type访问类型all-全表扫描,index-索引全扫描,range-索引范围扫描,ref-使用非唯一索引或(唯一索引的前缀)扫描,eq_ref-唯一索引扫描,const/system-单表最多有一行匹配,null-不用访问表或索引,就能直接得到结果
possible_keys查询时候可能使用到的索引-
key实际使用的索引-
key_len使用索引字段长度-
rows扫描行的数量-
extra执行情况说明和描述-

3.explain extended 和 show warnings

explain extended sql_statement;
show warnings;

这里写图片描述
这里写图片描述
explain extended输出结果相比explain多了filtered字段(所有结果行数/查询结果行数*100),show warning的message字段可以看到sql优化器优化的结果。

4.通过 show profile分享sql

#查看是否mysql支持profile
SELECT @@have_profiling;

#查看是否开启profiling
select @@profiling;

#查看profile
show profiles;

#查看某一个具体的query的profile,n-查询id;
show profile for query n;

这里写图片描述
这里写图片描述

Sending data状态表示mysql线程开始访问数据行并把结果返回给客户端,而不仅仅是返回结果给客户端。

5.通过trace分析器分析

#开启trace,设置格式为json,设置trace能使用的最大内存大小。
set optimizer_trace="enabled=on",end_markers_in_json=on;
set optimizer_trace_max_mem_size=100000;

#检查trace
SELECT * FROM information_schema.OPTIMIZER_TRACE;

这里写图片描述

6.慢查询日志

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值