(1)mysql优化之sql性能问题定位
2015-05-29 11:19
976 查看
概述
我们面对一个问题的时候,首先是发现问题,然后才是解决问题。在这篇文章中,主要解决如何定位问题。解决方法
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/
2.通过explain分析低效的SQL
explain sql_statement;
参数关系
参数 | 解释 | 值 |
---|---|---|
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.慢查询日志
相关文章推荐
- mysql联合查询更新数据库例子
- MySQL语句
- MySQL 加锁处理分析
- Win8安装MySQL程序出现2502、2503错误解决方法
- MySQL 5.7增强版Semisync Replication性能优化
- mysql: Cannot load from mysql.proc. The table is probably corrupted
- 遭遇一次MySQL猜解注入攻击
- MySQL Index Condition Pushdown(ICP)性能优化方法实例
- MySQL order by性能优化方法实例
- MySQL slave_net_timeout参数解决的一个集群问题案例
- 使用innodb_force_recovery解决MySQL崩溃无法重启问题
- mysql连接池问题
- MySQL replace into 语句浅析(二)
- MySQL replace into 语句浅析(一)
- hive绑定本地mysql为元数据库
- 修改MySql导入限制大小
- MySQL5.6在线DDL不锁表(在线添加字段)
- mac下安装mysql
- mysql创建索引
- mysql 中 时间和日期函数