我正在研究一个遭遇死锁的数据库。我们正在使用NHibernate开发数据库。有哪些解决我们在特定表周围看到的死锁的常用方法?
答案 0 :(得分:2)
最佳解决方案,使用存储过程来控制数据访问,以便您可以直接编写TSQL代码。 nHibernate可以很好地调用存储过程。
然而,由于该解决方案几乎不会过去,您可以尝试治疗症状。首先,确保表上有良好的索引,以便从nHibernate运行的查询尽可能地执行。其次,如果您使用的是SQL SErver 2008+,请使用read committed snapshot isolation。这将对你看到的锁定和阻塞产生巨大的影响,这两者都会导致死锁。
另外,请将服务器设置为针对Ad Hoc Workload进行优化。这将从根本上帮助内存和过程缓存管理。