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

时间:2010-05-03 11:13:18

标签: c# database linq-to-sql exception timeout

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

  

“SqlExcepetion:超时已过期。在完成操作之前已经过了超时时间,或者服务器没有响应。”

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

提前致谢!

3 个答案:

答案 0 :(得分:10)

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

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

我建议:

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

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

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

答案 1 :(得分:3)

生成SQL脚本(或字符串),并直接执行该脚本。

L2SQL不适合像这样的大规模运营。

答案 2 :(得分:2)

我认为你要增加命令的CommandTimeout。

可以找到解决方案here