背景
为了方便归档并清理数据,释放磁盘空间压力,将一张数据量很大的表(上亿)更改为根据日期分区表
过程
- 让开发排查代码中使用到这个表的语句,是否都使用到了分区键
- 保证数据写入分区键时候不为null
- 创建分区表并迁移数据
- 切换表
问题表现
- 短时间内出现大量的慢SQL堆积,`show processlist`查看到都是这个表的,都处于 sending data状态
- 语句是根据某个常量条件count一下,源表上 vb 这个字段是唯一索引,语句如下
select count(*) from tb_test where vb = 'aaabbbccc' and vc != '0'
- 由于大量的慢SQL积压,导致并发升高,CPU 到 100%
修正回滚
出问题了,先不管那么多,先把表切回去,恢复业务,再进行排查问题
kill掉符合条件的慢SQL
询问下开发,造成问题的这部分的select慢SQL是否可以kill,还好只是select