【问题标题】:Timeout in LINQ to SQL inserting millions of records插入数百万条记录的 LINQ to SQL 超时
【发布时间】:2011-02-15 00:03:39
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    生成一个 SQL 脚本(或字符串),然后直接执行。

    L2SQL 不适用于此类大规模操作。

    【讨论】:

      【解决方案2】:

      如果你所有的东西都是一把锤子,那么每个问题看起来都像钉子。

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

      我建议:

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

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

      为工作使用正确的工具。

      【讨论】:

      • 我相信表达方式是“如果你唯一的工具是锤子......”
      • 无论是什么表达方式,这都是一个很棒的解释!为这个遮阳篷 +1,赢了!
      • 除了 TomTom 的回答,看看 SqlBulkCopy 类:msdn.microsoft.com/en-us/library/…
      • 在我正在构建的应用程序中,我只添加了数千条记录,而不是数百万条记录,而 linq2sql 正在杀死我。 SqlBulkCopy 做出了巨大的改变,我能够毫不费力地将它构建到我的数据层类中,并与 linq2sql 一起使用。
      【解决方案3】:

      我认为您必须增加命令的 CommandTimeout。

      可以找到解决办法here

      猜你喜欢
      • 2012-05-30
      • 2023-01-31
      • 2016-04-12
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2012-05-16
      相关资源
      最近更新 更多