ALTER TABLE NOCHECK CONSTRAINT随机超时

时间:2011-01-14 17:22:29

标签: c# sql-server data-warehouse etl

我有一个性能ETL进程的C#应用​​程序。对于自引用表,应用程序将运行“ALTER TABLE [tableName] NOCHECK CONSTRAINT [constraintName]”,它将关闭此表的任何FK约束检查。加载所有数据后,将再次启用约束。

数据库超时设置为3分钟,但是,上述SQL命令会因为数据库在30秒内超时而失败。

这种超时的原因是什么?

是否有数据库系统表我应检查异常?

其他信息: 我检查了应用程序,它只有一个活动线程在执行ETL,所以我认为应用程序不会锁定任何数据库资源。此外,数据库与应用程序在同一台机器上运行。

事件应用程序关闭其所有数据库连接,如果下次运行ETL进程,它将再次超时。如果我使用SQL Manager Studio手动运行sql,它完全没有问题。

由于

更新 - 应用程序正在关闭许多约束。事实证明,超时仅发生在1个特定约束。此约束引用了Date Dimension表。

更新 - 看起来我正在使用的测试数据库有一些奇怪的异常。我尝试了与其他数据仓库相同的ETL过程,到目前为止没有任何问题。团队中的其他开发人员也没有遇到过这个问题。这个应用程序每隔午夜运行一次。我会让它在一夜之间运行,希望我可以在其他数据库上重现相同的问题。到目前为止,找不到发生的事情还没有好运。

1 个答案:

答案 0 :(得分:2)

更改表需要对表进行独占锁定。如果有另一个进程正在读取/写入有问题的表,则在该进程释放其锁定之前,不能进行模式更改。

当您遇到表的长时间运行时,请在不同的连接中运行sp_who2,并查看是否有任何连接阻止您的ETL连接。然后,您可以查看该连接的命令缓冲区,以确定它的作用。