我正在运行一个C#应用程序,它将每个表大约五十万条记录批量插入一个sql数据库。
处理完文件后,日志文件增长到4 GB! 结果我每晚都需要备份。
我可以改善吗?最小化日志文件的增长?
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnectionString))
{
bulkCopy.BulkCopyTimeout = 700; // in seconds
bulkCopy.DestinationTableName = TableName;
bulkCopy.WriteToServer(DT);
}
答案 0 :(得分:4)
假设您的数据库使用" Full"或"批量记录"恢复模式,只有在执行事务日志备份后,才能重用事务日志中的空间。如果日志尚未备份且没有可用空间来记录更改,则事务日志会自动扩展(如果配置为这样做),或者事务失败。因此,经常备份事务日志(例如,每15分钟)以避免过多的事务日志增长并不罕见。
如果你正在使用" Full"恢复模式,您可以切换到使用" Bulk Logged"模式,减少批量复制操作占用的空间量。
或者,对于非生产场景,您可能不太关心完整备份之间的可恢复性,那么您可以将恢复模式切换为"简单"。这不需要任何事务日志备份,因此,事务日志应该很少增长。
有关每种恢复模式的详细信息,请访问here。
答案 1 :(得分:1)
您目前正在一个交易中添加数据。如果您的数据库处于简单模式,则事务日志将增长一次,并在重用日志文件时保持该大小。如果您将其分解为几个事务,那么在简单模式下,您可以使用较慢的插入,但也可以使用较小的事务日志。
如果这是针对您关心备份的生产数据库,您可以每小时运行一次,甚至可能更常规的事务日志备份,从而实现更高的数据恢复分辨率。
提供有关做什么的准确信息,如果这是一次性数据库,或者长期保存数据并需要备份数据,需要知道。
编辑:由于您将此作为生产数据库,我建议您根据需要定期进行事务备份。就我们的业务而言,我们每隔5分钟进行一次。将常规事务备份与将插入分成多个事务组合在一起将保留一个小的事务日志,并在发生问题时允许粒度还原点。 http://technet.microsoft.com/en-us/library/ms191284(v=sql.105).aspx
答案 2 :(得分:0)
这只是猜测:
您的数据库可能处于完全恢复模式,该模式会记录所有内容。
尝试将其更改为批量记录,通过对大多数批量操作使用最少的日志记录来减少日志空间使用量。
这是我唯一能想到的。