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

发现问题常用命令:

1.show status; 查询服务器状态信息

170642_n5MP_3233222.png

show status like 'Com_select%';可以查询select的执行次数,insert等操作查询类同。

注意:如果一个查询的结果是从查询缓存中得到的,这会增加Qcache_hits,而不是Com_select。

170750_NVmk_3233222.png

show status 还可以指定统计范围。统计范围关键字分为GLOBAL和SESSION(或LOCAL)两种。

不加的话默认是session

eg:

170312_ZflT_3233222.png

2.show variable;  查询变量设置信息,可通过此变量查看各种变量是否设置正确。

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

173027_JmVZ_3233222.png

  • 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%';

173455_uY4W_3233222.png

参数含义:

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语句,分析语句的连接关系和连接顺序

141839_cBQx_3233222.png

需要关注的参数是下面这两个

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首先要确认你的数据库支持

143714_pggC_3233222.png

开启

144111_09Xj_3233222.png

4.2 show profile的用法

A、先执行语句

144217_gFub_3233222.png

B、执行show profile,可以看到话费的总时间;

144250_Ih5o_3233222.png

C、执行过程中线程的每个状态和消耗的时间

144358_3D7g_3233222.png

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

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3233222/blog/827955

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值