我们正在使用 MS SQL 2008 R2 运行数据库系统,客户端软件使用 Entity Framework 4 访问它。我们还有合并复制,服务器在虚拟环境中运行。
我们在其中一台服务器上遇到性能问题。当我们进行调查时,我们发现我们有很多共享读锁会阻止更新,这似乎是我们问题的根源。为了暂时解决这个问题,我们尝试实施Read_Commited_snapshot
:
ALTER DATABASE MyDB
SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE MyDB
SET READ_COMMITTED_SNAPSHOT ON;
并用 验证了这一点
select is_read_committed_snapshot_on,snapshot_isolation_state_desc,* from sys.databases where name = 'MyDB'
。在此之后,所有核心上的 cpu 负载达到 100% 大约 1 小时,然后开始在 20-40% 左右空闲。但是我们仍然存在性能问题。在进行性能监控时,我仍然可以看到一些大型实体框架查询首先创建了几个对象锁,然后开始创建页面锁(共享)。这怎么可能,我在这里错过了什么?
哦..顺便说一下,我已经尝试过重启服务器,根据托管公司的说法,虚拟托管环境看起来不错。