定时任务清理一个大表大概有4000W左右的数据量,每天定时按照 delete from tableXX where date='2015-09-08' date varchar 字段有索引,删除数据量百万级 导致整个db实例响应变慢,大概会影响2分钟左右,过程中所有表的增、删、改、查均变慢,响应时间从10ms级 变成10+s级别;
有没有了解MySQL innodb引擎的大神能帮忙解释一下
大家讲道理2017-04-17 13:17:01
你可以在執行這條語句的時候,注意一下io的負載,從你的描述來看一定會大很多。雖然date有索引,但是只要影響的記錄數量足夠多,那麼肯定會拖慢的整體的速度(除了io之外,還有其他的字段影響的鎖)。如果你的表是儲存一個月的數據,每次刪一天的數據的話,也會直接影響整個表1/30的內容,其實這個量是非常大的。
對於你的情形,一種手段是把負載攤開,例如把查詢變成很多個
delete from tableXX where date='2015-09-08' limit N
這樣每次的刪除都很快,然後在每次執行之間sleep一下,這樣整體的運行時間會拉長很多,但是可以消除掉負載的峰值。