MySQL性能优化(一)发现问题

发现问题经常使用命令: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;  查询变量设置信息,可经过此变量查看各类变量是否设置正确。线程

用一个缓存变量的命令来举例:索引

  • have_query_cache 表示是否支持query cache;
  • query_cache_limit 表示query cache存放的单条query最大结果集,默认值为1M,结果集大小超过该值的query不会被cache;
  • query_cache_min_res_unit 表示query cache 每一个结果集存放的最小内存大小,默认4k;
  • query_cache_size 表示系统中用于query cache的内存大小;
  • query_cache_type 系统是否打开了query cache功能;
  • query_cache_wlock_invalidate 针对myisam存储引擎,设置当有write lock在某个table上面的时候,读请求是要等待write lock释放资源以后再查询仍是容许直接从query cache中读取结果,默认是OFF,能够直接从query cache中取得结果。

若要更全面的分析能够结合以前的 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、执行过程当中线程的每一个状态和消耗的时间

注:本章只是引导如何去发现问题,解决问题会在后面的博客中介绍。

相关文章
相关标签/搜索