在具有SQL Server故障轉移羣集或鏡像的環境中,您希望如何處理錯誤?好像有兩種選擇:處理由於服務器故障轉移而失敗的數據庫查詢
- 捨棄整個當前客戶端的請求,並讓用戶重試
- 捕獲的錯誤在你的DAL,並重新出現
每種方法都有其利弊和缺點。我與之合作過的大多數商店都是排名第一的,但其中許多商店也不遵循嚴格的交易限制,而且在我看來,如果發生失敗,我將面臨麻煩。即便如此,我在將它們轉換爲#2時遇到了困難,這也應該會帶來更好的用戶體驗(一種捕獲是發生故障轉移時可能存在的長時間延遲)。
任何參數或其他方式將不勝感激。如果您使用第二種方法,您是否有標準包裝程序來幫助簡化實施?無論哪種方式,您如何構建代碼以避免諸如與失敗的命令缺乏冪等相關的問題?
難道你不能避免與重試計數器的無限循環?如果您的故障轉移只需要幾秒鐘,那麼您很幸運。我所使用的大多數基於SQL Server羣集的系統至少需要30秒才能將所有內容全部回滾,並且在備用服務器上的高速緩存填充時還會有額外的延遲 - 並且可能長達2分鐘。鏡子只有幾秒鐘,但我工作的大多數商店都沒有使用它們。 – RickNZ 2009-12-13 08:08:37
通過幾個,我的意思是20-30秒:用戶不會注意到。什麼將是一個有效的重試計數?它處理超時,死鎖嗎?它只會重試強制斷開連接嗎? etc等 – gbn 2009-12-13 08:18:34
我通常使用重試計數爲2,並在兩者之間延遲。這個想法不是爲了防止用戶看到錯誤;只是爲了儘量減少發生的機會。你如何確保在失敗後的同一頁失敗的命令發出之前插入成功?除了謹慎的交易設計之外,還有什麼? – RickNZ 2009-12-13 10:11:07