某日,我将一个有数千万条记录的表分区之后,数据库CPU一下子飙升到100%。
性能不降反升,什么道理?
因为这个表每天都有约500万条记录插入,难道是表压缩和索引压缩的缘故?去掉压缩,没什么变化。
索引只有两个,跟之前数量一样,应该也不是索引太多。
取消分区,CPU回复正常。难道分区是罪魁祸首?
然而不能不分区的。我也不相信是分区的缘故,有资料说分区后,不仅是查询快,插入也会快。
主要是索引的问题。因为需要用到分区切换,索引必须与分区对齐,原先的主键,就硬是塞了个分区依据列进去,变成了复合主键:
[Id] + [CreateDate]
引起CPU飙升的元凶在于这个语句
SELECT MAX(Id) FROM [table1]。
喂,Id不是索引吗?虽然是复合索引,但它是第一个字段啊。
但如果给它加上个条件:
SELECT MAX(Id) FROM [table1] WHERE Id>12312312
情况马上改善很多。
搞不懂。