2010-08-10 93 views
2

我們可以看到,在我們的perl程序運行期間,基本上連接到SQLserver以插入/刪除/更新數據,下面非常頻繁地調用 sp_tables @table_name='NOXXTABLE'。我們看到,對於許多SPID來說,這個呼叫發生了很多次。sp_tables調用需要更多時間導致阻塞

在SQLserver上運行sp_tables @table_name='NOXXTABLE'我們可以看到它沒有返回任何行。它通常以毫秒爲單位完成。

但是在分析後,當我們檢查阻塞SPID的特定SQLText(sp_tables @table_name='NOXXTABLE')的運行時間時,它在0秒到1分鐘之間變化,並且在相同的SPID內被非常頻繁地調用。許多SPID也是如此,它們每次都需要花費很多時間再次調用sp_tables

有沒有解決方案可以解決這個問題?

回答

3

DBD :: ODBC的ping方法使用NOXXTABLE。如果您使用DBD :: ODBC調用DBI的ping方法,它將執行一個表('','','NOXXTABLE','')。如果你想這樣做,少調用ping命令或用其他更適合系統的代碼覆蓋DBD :: ODBC的ping方法。

+0

謝謝bohica! 在這種情況下,從哪裏ping完成,爲什麼? 在此點燃一些光。 我們在兩次選擇之間也看到了sp_tables調用。 那麼這裏我們怎麼稱呼它少了幾次? 表('','','NOXXTABLE','')是否知道數據庫連接是否還活着? ,因爲沒有任何名爲NOXXTABLE並且沒有結果返回。 – 2010-08-11 13:39:08

+0

我不能告訴你你的代碼(或你使用的代碼)在哪裏調用ping。我告訴你的是,當調用DBI ping方法並且使用DBD :: ODBC時,它通過在表NOXXTABLE上發出表呼叫來實現ping。爭論是這將需要往返數據庫。 – bohica 2010-08-11 14:22:50