2014-10-01 102 views
2

訪問SQL Server 2012數據庫的第三方應用程序在執行大約20分鐘後出現[Microsoft][ODBC SQL Server Driver]Query timeout expired錯誤。SQL Server查詢超時

這是我的數據庫上看到的應用程序開始接收錯誤後:

Query Screenshot -1

SPID 102沒有在上面的查詢所示。這是同一過程的另一個來自同一應用程序的連接。我能夠在下面的屏幕截圖中捕捉到這些細節。它是此截圖中最上面一行的一個。道歉,截圖時滾動條被移動到右側。

Query Screenshot - 2

AutoShrink設置爲TRUE此數據庫上時發生這種情況。

它看起來像:

  • 從後來開始對第三方應用的幾個連接正在等待的SPID 27 - 這是一個AUTOSHIRNK命令

  • SPID 27正在等待SPID 102是從同一個第三方應用程序

問題的另一個方面:

  • 是否有任何方法可以判斷數據庫上自AutoShirnk設置爲TRUE以來是否創建了與SPID 27的連接?

  • 如果是這樣,爲什麼它在SPID 102上等待,爲什麼其他連接(83,85,86,88和90)等待27?

根據下面的鏈接TechNet文章,自動收縮應該沒有數據庫

上的任何活動的影響,如果數據庫的AUTO_SHRINK選項設置爲ON,數據庫 引擎減小數據庫中文件的大小。此活動 發生在後臺,並且不影響數據庫中的任何用戶活動 。

Shrinking a Database

注:

  • 這是目前SQL Server上運行,此問題將發生2012 SP1。

  • 當應用程序在SQL Server 2008 SP3上運行數據庫時,應用程序中的此進程正常工作。

+2

你真的不應該使用自動收縮反正。 – DavidG 2014-10-01 13:03:17

+0

他們應該將AutoShrink重命名爲AutoCrippleDatabase。關掉這場災難,這個問題就會消失。 – 2014-10-01 13:32:10

+0

使用DMV來查看查詢文本並在運行時進行計劃..'sys.dm_exec_query_stats'交叉應用'sys.dm_exec_query_plan'交叉應用'sys.dm_exec_sql_text' – Tak 2014-10-01 14:39:03

回答

1

AUTO SHRINK以循環方式工作,如果它看到任何DB上的可用空間,它將取消分配它。

雖然它沒有像長期阻斷任何影響,但它佔用了大量的資源,無論是IO和CPU。它還會通過緩衝池移動大量數據,因此可能會導致熱頁面被推出到磁盤,進一步放慢速度。如果服務器已經在推動IO子系統的限制,那麼運行縮減可能會推動它,導致長的磁盤隊列長度和可能的IO超時。

你會得到很多答案,並澄清在這裏 - http://www.sqlskills.com/blogs/paul/auto-shrink-turn-it-off/