0

我正在尝试解决可怕的 Timeout expired sql 错误。我注意到一个模式如下。

  1. 用户在大表上启动长时间运行的 sql 计数
  2. 错误 - 超时已过期。在操作完成之前超时时间已过或服务器没有响应。
  3. 随后是 10 + 错误 - 超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。

第三步错误发生在第一个 sql 命令来自 Web 项目的服务中。那么是否有可能因为#1其他连接失败而导致连接中断?如果是这样,有没有办法从使用连接池中排除某些命令?谢谢!

更新

-我正在使用 MS SQL 2012 和实体框架。-我已将整个数据库事务级别设置为 READ UNCOMMITTED,因为我们不关心脏读

4

1 回答 1

1

第一条语句在数据库级别锁定所有其他语句。你在使用 SQL Server 吗?根据我的经验,SQL Server 在很多情况下都会锁定表,以至于 DBA 总是恢复为脏读——任何其他锁定配置都会导致过多的争用。

要解决此问题,您可以在临时表中执行长时间运行的工作,然后在工作完成后复制到实际表中。

于 2013-07-11T18:36:58.033 回答