我有一個C#應用程序,表現ETL過程。對於自引用表,應用程序將運行「ALTER TABLE [tableName] NOCHECK CONSTRAINT [constraintName]」,關閉此表的任何FK約束(s)檢查。一旦所有的數據被加載,約束(s)被再次啓用。ALTER TABLE NOCHECK CONSTRAINT超時隨機
數據庫超時設置爲3分鐘,但是,上面的SQL命令會因30秒內的數據庫超時而失敗。
什麼可能是這個超時的原因?
是否有數據庫系統表我應該檢查異常?
其他信息: 我檢查了應用程序,它只有一個活動線程在執行ETL,所以我不認爲應用程序鎖定了任何數據庫資源。另外,數據庫與應用程序在同一臺機器上運行。
事件應用程序關閉其所有數據庫連接,如果它下次運行ETL過程,它將再次超時。如果我使用SQL Manager Studio手動運行SQL,它完全沒有問題。
謝謝
更新 - 應用程序正在關閉一些約束。事實證明,超時只發生在1個特定的約束條件下。此約束是引用日期維度表。
更新 - 它看起來像我工作的測試數據庫有一些奇怪的異常。我嘗試了與其他數據倉庫相同的ETL過程,到目前爲止它沒有問題。團隊中的其他開發人員也沒有遇到過這個問題。此應用程序每半夜運行一次。我會保持它一夜之間運行,並希望我可以在其他數據庫上重現相同的問題。到目前爲止,沒有運氣來弄清楚發生了什麼事情。
你提到'數據庫超時設置爲3分鐘...'你在哪裏做這個設置?從您的問題中可以看出,30秒內的默認時間仍然如此。 – 2011-01-14 17:30:12
儘管事實上你認爲沒有其他的連接關係,但我會認爲原因會被阻止。我會想象這將是一個快速的元數據更改,所以延遲的唯一範圍將等待`Sch-M`鎖定。 – 2011-01-14 18:04:49