我们有一个ETL进程,它将大量数据插入到表中。该数据库被设置为简单恢复模型,事务日志正在大量增长。我在想,将这个数据库设置为大容量日志恢复模型会有帮助吗?我们每天都要进行全面备份。那么,与简单恢复模型相比,是否存在一些未登录大容量日志恢复模型的操作?
发布于 2014-11-07 11:29:32
日志记录发生在所有恢复模型中。日志将保留在批量日志和完整恢复模型中,直到日志备份为止。大容量日志记录只记录某些操作,例如索引重建,这意味着在使用大容量日志记录时不能进行点到时间恢复。由于您使用的是简单的恢复模型,更改为大容量日志将无助于减少日志大小。这将使您的设置实际上更加复杂,因为您必须开始定期进行日志备份。
如果在简单恢复模型中有一个大型事务,则该事务仍将被记录并导致日志文件增长。这使您可以在任何恢复模型中回滚事务。如果您没有打开该事务(不要提交或回滚),您的日志就会不断增长。一旦提交(或回滚),日志记录信息就不再需要保留在简单的恢复模型中,而SQL server将循环地重用日志。
您的解决方案是最小化ETL插入事务的大小。您可以批量执行较小的插入,并提交这些插入(如果适合于数据一致性的话)。您还可以在ETL工具中查看事务处理。例如,SSIS允许包中的所有插入都是同一个事务的一部分,您可以改变这种行为,以便每个转换都有自己的事务。
发布于 2014-11-06 21:40:15
大容量日志恢复模型类似于完整恢复模型,因此它基本上不像简单恢复模型那样截断登录检查点。
如果您希望保持事务日志小,那么简单的恢复是您的最佳选择。如果日志正在增长,是因为向实例提交了一些大型事务,而您实际上无能为力:它是预期的,而所占用的日志空间是实例执行事务所需的。
https://dba.stackexchange.com/questions/82091
复制相似问题