线上数据cpu100%的问题解决方案

2020-07-15 16:58栏目:编程
TAG:

线上数据cpu100%的问题重现准备:
1、创建表:
ps: 其中name + telephone字段创建索引
2、添加mock数据,mock100W条
3、添加name telephone 部分重复的数据, 对主键 可以被4 整除的前10000条数据添加重复的name telephone,比如说我这里生成的name = asdjasdjjdajdads, telephone = 1318482579
4、执行sql查询:
5、我们查看执行计划结果:
我们分析下:索引类型为index_merge, 用到了name + telephone索引
extra中显示为Using intersect(name,telephone); 意思是对name索引的结果集 + telephone索引的结果集(也就是id集合)进行交集,交集后到聚簇索引获取最好的结果集。
index_merge是mysql本身的优化,性能的影响并不是此type造成的,是因为索引构建不当造成的,我先说下我们的问题,我们的表数据是800W,其中is_deleted只包含’y’ ‘n’ 2个值,我们对其添加了普通索引,为n的数据行可能就存在几千条,后续和其他索引进行index_merge时,会非常耗时,因为要对接近800W的数据集进行交集造成数据库查询缓慢。如果并发量大,很容易造成cpu 100%的问题。
结果描述:
在对表进行添加索引时,切记不要对数据区分度不大的数据添加索引,这样多个索引进行检索时会添加不必要的行的比对,数据量大时 更容易出现索引问题造成检索更慢。

上一篇:
csv文件上传下载至oss工具类源码

本文来自网络,不代表山斋月平台立场,转载请注明出处: https://www.shanzhaiyue.top