我們遇到了一個代碼塊在面對慢速數據庫時響應不佳的問題(它在查詢超時時間上喋喋不休)。我們已經創建了一個補丁,並且正在通過迴歸運行它。在SQL Server中強制查詢超時
我們不能超時。我已經從SQL Mgmt Studio中打開了一個事務並更新了每一行來鎖定它們,但是這不會導致INSERT超時(這是我需要的)。
我可以通過T-SQL輕鬆獲得表級鎖嗎?或者我必須在主人身邊擺弄?或者我可以輕鬆地強制超時而不鎖定?任何輸入讚賞。
我們遇到了一個代碼塊在面對慢速數據庫時響應不佳的問題(它在查詢超時時間上喋喋不休)。我們已經創建了一個補丁,並且正在通過迴歸運行它。在SQL Server中強制查詢超時
我們不能超時。我已經從SQL Mgmt Studio中打開了一個事務並更新了每一行來鎖定它們,但是這不會導致INSERT超時(這是我需要的)。
我可以通過T-SQL輕鬆獲得表級鎖嗎?或者我必須在主人身邊擺弄?或者我可以輕鬆地強制超時而不鎖定?任何輸入讚賞。
來看,這種再試試你的INSERT ...
select * from yourTable with (holdlock,tablockx)
在這裏,你可以將其鎖定爲5分鐘:
BEGIN TRANSACTION
SELECT * FROM yourTable WITH (TABLOCKX, HOLDLOCK)
WHERE 0 = 1
WAITFOR DELAY '00:05'
ROLLBACK TRANSACTION
你可以告訴你的SQL代碼等待一分鐘在返回之前:
WaitFor Delay '00:01:00'
看看這篇博文。基本上SQL Server沒有查詢超時。客戶端可能會執行SQL超時,但引擎本身不會。
http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx
在前端側:如果連接配置,連接字符串超時減少到1秒 - 這將使它更容易。用大量數據填充表格,並讓其他3個進程在一個循環中旋轉,用循環中的事務更新該表格的塊。不要改變應用程序調用的實際過程(注入waitfor)。這使集成測試無效。
但實際上,這是一個有利於單元測試和依賴注入的案例研究。有些事情很難整合測試。單元測試+ dependency injection。
這是「依賴性」注射。開發人員可以將依賴關係注入數據庫,替換模擬依賴關係行爲的東西。所有數據庫測試都很好。無論如何,隨着單元測試的到位,您知道修補程序確實應該做些什麼,但您仍然需要進行集成測試。在這種情況下,它可能更好地關注迴歸 - 這意味着測試它不會破壞其他任何內容,並且該功能仍然有效。
你已經創建了你的補丁,所以我想我的答案爲時已晚。
投票回答簡單。我已經測試過它,它的工作原理 – Mikel 2017-08-08 12:51:08