2012-01-24 47 views
4

我正在處理一個數據庫正在遭受死鎖。我們正在使用NHibernate針對數據庫進行開發。解決我們在特定表格中看到的僵局有哪些常見方法?如何防止NHibernate訪問SQL Server數據庫實例中的死鎖?

+0

你正在運行什麼樣的數據庫(MSSQL,Oracle等)? –

+1

看起來像http://stackoverflow.com/questions/5353108/how-to-replicate-and-retry-deadlocks-in-nhibernate – Craig

回答

2

最好的解決方案是使用存儲過程來控制數據訪問,以便您可以直接編寫TSQL代碼。 nHibernate可以很好地調用存儲過程。

但是,由於該解決方案几乎從未飛過,您可以嘗試治療症狀。首先,確保在表上有好的索引,以便從nHibernate運行的查詢的性能儘可能好。其次,如果您使用SQL SErver 2008+,則使用讀取提交的快照隔離。這將對你看到的鎖定和阻塞產生巨大的影響,這兩者都會導致死鎖。

在旁註中,將服務器設置爲Ad Hoc Workload Optimized。這將從根本上幫助內存和過程緩存管理。