在c#中破坏批量插入后,数据库日志文件正在增长

本文关键字:日志 数据库 文件 插入 | 更新日期: 2023-09-27 18:03:17

我正在运行一个c#应用程序,它将每表大约50万条记录批量插入到sql数据库中。

处理一个文件后,日志文件增长到4gb !因此,我每天晚上都得备份。

有什么方法可以改进吗?最小化日志文件的增长?

 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnectionString))
            {
                bulkCopy.BulkCopyTimeout = 700; // in seconds
                bulkCopy.DestinationTableName = TableName;
                bulkCopy.WriteToServer(DT);
            }

在c#中破坏批量插入后,数据库日志文件正在增长

假设您的数据库配置为使用"Full"或"Bulk Logged"恢复模式,则事务日志中的空间只能在执行事务日志备份后重用。如果没有备份日志,并且没有可用空间记录更改,则事务日志要么自动扩展(如果配置为这样做),要么事务失败。因此,经常备份事务日志(例如,每15分钟)以避免事务日志过度增长是很常见的。

如果您使用的是"完整"恢复模式,您可以切换到使用"批量记录"模式,这可以减少批量复制操作所占用的空间量。

或者,对于非生产场景,您可能不太关心完全备份之间的可恢复性,那么您可以将恢复模式切换为"Simple"。这不需要任何事务日志备份,因此,事务日志应该很少增长。

关于每种恢复模式的详细信息可以在这里找到。

当前正在一个事务中添加数据。如果数据库处于Simple模式,事务日志将增长一次,并在重用日志文件时保持该大小。如果您将其分解为几个事务,那么在简单模式下,您可能会有一个较慢的插入,但也会有较小的事务日志。

如果这是一个你关心备份的生产数据库,你可以每小时运行一次,甚至可能更有规律地运行一次事务日志备份,这将使数据恢复的分辨率更高。

要提供任何关于该做什么的准确信息,需要知道这是一个一次性数据库还是一个长期保存数据并要求备份的数据库。

Edit:由于您将此作为生产数据库,我建议您根据需要定期进行事务备份。就我们的业务而言,我们每5分钟做一次。将常规事务备份与将插入拆分为多个事务相结合,将保留一个小的事务日志,并在出现问题时允许粒度还原点。http://technet.microsoft.com/en-us/library/ms191284 (v = sql.105) . aspx

这只是一个猜测:

您的数据库可能处于完全恢复模式,记录所有内容。

尝试将其更改为bulk-log,通过对大多数批量操作使用最小的日志记录来减少日志空间的使用。

这是我唯一能想到的