首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

索引引发的超时故障

前段时间本人维护的线上服务总是出现接口调用超时的问题,导致数据未能正常的返回给服务调用着,经过排查,定位到是由于数据库索引使用的不规范导致大量满查询的产生,最终拖垮接口。在此记录下解决问题的过程。

排查思路,可能的原因

更新代码

接口并发数陡增

依赖第三方服务

数据库慢查询

内存分配不足

排查过程:

通过跟踪gi t代码提交记录,发现服务器超时前一周内代码没有更新,排除代码更新导致

通过监控平台接口请求记录,发现接口的调用曲线平稳,并没有剧烈的抖动

没有依赖第三方服务

数据库慢查询

接口中使用频繁的s q l执行计划

此执行计划反应的问题很明显了,简单解释下各项的含义

select_type:select 类型,包含一下值

simple:表示简单的查询,不包含union和子查询

primary:最外面的select,在有子查询的语句中,最外面的select查询就是primary,上图中就是这样

union:union中的第二个或后面的SELECT语句

union resulte:union的结果

type:

const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时。

eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。eq_ref可以用于使用= 操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。

ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。ref可以用于使用=或操作符的带索引的列。

ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。

index_merge:该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。

unique_subquery:该类型替换了下面形式的IN子查询的ref:value IN (SELECT primary_key FROMsingle_table WHERE some_expr);unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。

index_subquery:该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引:value IN (SELECT key_column FROM single_table WHERE some_expr)

range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。在该类型中ref列为NULL。当使用=、、>、>=、、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range

index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小

all:对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得性能基于前面的表中的常数值或列值被检索出。

常用的type 类型性能比较

system > const > eq_ref > ref > range > index > ALL

这条s q l使用的最差的type 类型,所以解决办法就是:加索引。之前没加索引是因为数据库数据量少,非索引字段不是where条件字段,数据库订单量陡增与新增s q l中where语句条件的更改导致查询慢。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180519G0TN4W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券