LINQ to SQL超时插入数百万条记录

Bas*_*Bas 3 c# database timeout exception linq-to-sql

我正在使用此解决方案在数据库中插入大约300万条记录.最终,当应用程序插入记录一段时间(我的上一次运行持续大约4小时)时,它会给出以下SqlException的超时:

"SqlExcepetion:Timeout已过期.在完成操作之前已经过了超时期限,或者服务器没有响应."

处理此异常的最佳方法是什么?有没有办法防止这种情况发生或者我应该抓住异常?

提前致谢!

小智 10

如果你拥有的一切都是锤子,那么每个问题看起来就像钉子一样.

说真的,即使尝试使用Linq2SQL插入300万条记录也是一种破碎的方法.ORM是很多好东西,它们不是批量插入元素.

我建议:

  • 将表数据生成到文件中
  • 使用适当的工具(批量加载机制)加载文件.你会对性能感到惊讶(提示:我在15分钟内加载了大约6亿条记录);)

批量加载具有很多性能优势.当然假设你在这里谈论类似ETL加载过程的东西 - 但是我没有看到除了数据仓库/报告/归档样式的加载操作之外的300万次加载,它定义并且每个定义不是实时事务处理;)

使用正确的工具完成工作.

  • 除了TomTom之外,还要看一下SqlBulkCopy类:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx (2认同)