如何最好地处理从具有2-3百万行的生产系统上的表中删除数据,每个行可能有100k-1M的数据(多个中间文本字段包含xml)?可能会删除大约3/4的行,因为它们是不再需要的遗留数据。
我编写了一个plsql脚本,将每个事务中的删除分解为可管理的块,但仍然存在binlog(数据库被复制)的问题,该问题迅速填满,并且每隔两天只会自动截断IIRC。
我目前的想法只是为每个数据库注册一些每天运行的cron任务,每天删除足够的数据以避免binlog填满,并让它们随着时间的推移得到清理。还有更好的选择吗?
如果要删除的行的所有xml字段在被删除之前都要设置为null,这是否意味着binlog的大小会减少,而不是立即删除该行?
答案 0 :(得分:1)
我可能会按照你描述的方式去做。
脚本在cron上运行以清除块中的旧记录,如果需要,您可以根据复制计划清除所需的binlog。根据MySQL文档
如果您正在使用复制,则在确定没有从属设备仍需要使用它们之前,不应删除主服务器上的旧二进制日志文件。例如,如果您的奴隶从未跑过三天以上,那么您每天可以在主服务器上执行mysqladmin flush-logs,然后删除任何超过三天的日志。您可以手动删除文件,但最好使用PURGE BINARY LOGS,它也可以安全地为您更新二进制日志索引文件(可以使用日期参数)。请参见第14.4.1.1节“PURGE BINARY LOGS语法” As per Docs