Concurrency

如何在數據庫中測試競爭條件?

  • April 2, 2012

我嘗試編寫數據庫程式碼以確保它不受競爭條件的影響,以確保我已鎖定正確的行或表。但我經常想知道:我的程式碼是否正確?是否可以強制任何現有的競爭條件顯現?我想確保如果它們確實發生在生產環境中,我的應用程序將做正確的事情。

我通常確切地知道哪個並發查詢可能會導致問題,但我不知道如何強制它們同時執行以查看是否發生正確的行為(例如,我使用了正確類型的鎖),正確的錯誤是拋出等

注意:我使用 PostgreSQL 和 Perl,所以如果不能籠統地回答它,它可能應該被重新標記。

***更新:*如果解決方案是程序化的,我更喜歡它。這樣我就可以編寫自動化測試來確保沒有回歸。

我一直用我的 T-SQL 模組來做這件事。

本質上,您需要做的就是在一個循環中從兩個或多個連接執行您的模組幾分鐘。通常,所有潛在的問題都會在幾分鐘內暴露出來,假設你有一個具有不錯 CPU 的 SQL Server 機器。

我在這里這裡寫了幾個例子。

我通常使用 RDBMS 的命令行工具,只啟動了 2 個(或更多)CLI 實例。然後,您可以一個一個地重放您的應用程序層正在發送的 SQL 語句,並將其作為競賽(看起來像一個動作角色扮演遊戲)。您應該試驗/感受鎖定係統的執行,因為您的 CLI 會“掛起”一點,等待其他 CLI 釋放鎖定。

如果這聽起來像泥巴一樣清晰,請不要猶豫;-)

引用自:https://dba.stackexchange.com/questions/148