在sqlserver中查询是需要加共享锁的,而Update需要获取排它锁,并发系统中在同一行记录会产生锁冲突,要解决这个问题可以开启sqlserver的行版本管理
使用行版本控制的隔离级别具有以下优点:
• 读取操作检索一致的数据库快照。
• SELECT 语句在读取操作过程中不锁定数据(读取器不阻塞编写器,编写器也不阻塞读取器)。
• SELECT 语句可以在其他事务更新行时访问最后提交的行值,而不阻塞应用程序。
• 死锁的数量减少。
• 事务所需的锁的数量减少,这减少了管理锁所需的系统开销。
• 锁升级的次数减少。
1. 进入配置管理器;
win10 没有菜单=> win+r =>
2005: SQLServerManager.msc
2008: SQLServerManager10.msc
2012: SQLServerManager11.msc
2014: SQLServerManager12.msc
2. 按下图, 关闭所有sqlserver服务, 并在启动参数前面加 -m;
3. 进入 SSMS , 注意: 不要有任何连接;
4. 输入如下脚本, 修改行版本控制级别:
ALTER DATABASE test SET ALLOW_SNAPSHOT_ISOLATION ON --替换库名
ALTER DATABASE test SET READ_COMMITTED_SNAPSHOT ON --替换库名
ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE test SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE test SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE test SET MULTI_USER
--查看是否已修改过来
SELECT [name],snapshot_isolation_state,snapshot_isolation_state_desc,is_read_committed_snapshot_on
FROM master.sys.databases
5. 执行完毕, 停止服务, 去除 -m; 确定并重新启动服务;
6. 如果操作成功, 此时就可以开多个查询和连接了。
版权所有:重庆阿可云网络有限公司 电话:400-766-9009 渝ICP备16010897号-1
云版软件©中小企业协同管控综合解决方案供应商;包含ERP管理系统、CRM客户关系管理、HR人力资源管理、OA办公系统、生产管理、进销存管理和财务管理等。
ERP企业管理系统| OA办公系统