发现问题经常使用命令:sql
1.show status; 查询服务器状态信息数据库
show status like 'Com_select%';能够查询select的执行次数,insert等操做查询类同。缓存
注意:若是一个查询的结果是从查询缓存中获得的,这会增长Qcache_hits,而不是Com_select。服务器
show status 还能够指定统计范围。统计范围关键字分为GLOBAL和SESSION(或LOCAL)两种。session
不加的话默认是session性能
eg:spa
2.show variable; 查询变量设置信息,可经过此变量查看各类变量是否设置正确。线程
用一个缓存变量的命令来举例:索引
若要更全面的分析能够结合以前的 show status命令:内存
SHOW STATUS LIKE 'Qcache%';
参数含义:
Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,若是该值显示较大,则说明查询缓存中的内存碎片过多了,可能在必定的时间进行整理。
Qcache_free_memory:查询缓存的内存大小,经过这个参数能够很清晰的知道当前系统的查询内存是否够用,是多了,仍是不够用,DBA能够根据实际状况作出调整。
Qcache_hits:表示有多少次命中缓存。咱们主要能够经过该值来验证咱们的查询缓存的效果。数字越大,缓存效果越理想。
Qcache_inserts: 表示多少次未命中而后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的状况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。固然系统刚启动后,查询缓存是空的,这很正常。
Qcache_lowmem_prunes:该参数记录有多少条查询由于内存不足而被移除出查询缓存。经过这个值,用户能够适当的调整缓存大小。
Qcache_not_cached: 表示由于query_cache_type的设置而没有被缓存的查询数量。
Qcache_queries_in_cache:当前缓存中缓存的查询数量。
Qcache_total_blocks:当前缓存的block数量。
3. 用explain来分析sql的执行计划
用法:explain 后边跟select语句,分析语句的链接关系和链接顺序
须要关注的参数是下面这两个
select_type:select类型,它有如下几种值
A、simple 它表示简单的select,没有union和子查询
B、 primary 最外面的select,在有子查询的语句中,最外面的select查询就是primary
C、union 指union语句的第二个或者说是后面那一个
D、subquery 指的是子查询的第一个select
type: 访问类型
性能由好到坏依次是
null>system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
all:全表扫描 ,index:索引全扫描 ,range:索引范围扫描 ,ref:使用非惟一索引扫描,或者惟一索引的前缀扫描,eq_ref惟一索引扫描,const/system:表单中最多只有一行匹配,null:不用访问表或者索引直接就能取到结果。。。。。
4.经过show profile分析sql
4.1首先要确认你的数据库支持
开启
4.2 show profile的用法
A、先执行语句
B、执行show profile,能够看到话费的总时间;
C、执行过程当中线程的每一个状态和消耗的时间
注:本章只是引导如何去发现问题,解决问题会在后面的博客中介绍。