一次归档引起的磁盘爆满

归档数据, 简单点来说就是将不需要的数据从源库转移到归档库(表)。

一般来说, 最好是用分区表做归档, 因为分区表有 alter table xx switch 这个功能, 可以一次性将不需要的分区切到一个新表, 这个在速度上就是秒杀, 最方便不过了。

不过, 临时需要归档数据, 就只能复制数据, 再删除不需要的数据了。

我的步骤:

一、将源库中的3个源表(两个3千万左右,一个1亿多)用导入导出向导, 复制到归档库;

二、循环删除源表中不需要的数据,每次 100 条。注意:因为是生产库,而且配置了 alwayson ,只能小批量删除,当然,即使不是生产库,一次性删除那么多数据都会有问题。

操作之前,看了一下磁盘,大约 170 G.

第二天早上一看,磁盘满了,预警邮件无数,幸好 alwayson 没有挂。

主要的原因是, 删除产生了较多的日志,但没有及时备份日志,在凌晨备份日志时, 偏偏空间又不够用了。这样, 最后磁盘空间爆满, 删除操作也因为没有空间写日志而停止下来。

教训:

1. 大量的删除数据或类似操作,必须考虑日志问题,只能小批量,而且每5到10分钟就备份一次日志。

2. 对于不经常用的索引,可以先删除索引,删除完数据再加上索引,这样速度可以提高10倍以上,非常可观。

3. 如果空间紧张,应该在代码中加上判断磁盘空间是否够用的脚本,在空间不够的情况下停止下来。当然,这个过程不必每次判断,可以500次操作判断一次。

猜你喜欢

转载自blog.csdn.net/yenange/article/details/81123596