使用连接池的长时间运行的sql命令是否会导致使用同一连接的其他命令出错?

时间:2013-07-11 18:25:15

标签: sql-server entity-framework connection-pooling

我正在尝试解决可怕的Timeout过期sql错误。我注意到了一种模式如下。

  1. 用户启动大型表上长时间运行的sql计数
  2. 错误 - 超时已过期。操作完成之前经过的超时时间或服务器没有响应。
  3. 后跟10 +错误 - 超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。
  4. 在第一个sql命令来自Web项目的服务中发生第三步错误。那么因为#1其他连接失败而导致连接断开是可能的吗?如果有,有办法排除某些命令使用连接池?谢谢!

    更新

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

1 个答案:

答案 0 :(得分:1)

第一个语句是锁定数据库级别的所有其他语句。你在使用SQL Server吗?根据我的经验,SQL Server在很多场景中锁定表,DBA总是恢复为脏读 - 任何其他锁定配置都会引起太多争用。

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