您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

sqlserver 数据库隔离级别,数据库死锁

bubuko 2022/1/25 19:25:20 sqlserver 字数 3071 阅读 797 来源 http://www.bubuko.com/infolist-5-1.html

数据库隔离级别:读未提交 Read Uncommitted,读已提交(sqlserver 默认级别)read committed,可重复读 Repeatable read,串行化 Serializable。 其中:读未提交:是读取数据时不申请任何锁,直接读取,可提升并发性能,但会脏读。 读已提交:是 ...

数据库隔离级别:读未提交  Read Uncommitted,读已提交(sqlserver 默认级别)read committed,可重复读 Repeatable read,串行化 Serializable

其中:读未提交:是读取数据时不申请任何锁,直接读取,可提升并发性能,但会脏读。

           读已提交:是写锁直到事务结束释放来实现的。

           可重复读:是读锁和写锁都在事物结束后释放。

           串行化: 是所有事物串行处理。可解决幻读问题,但并发性能差。

查看当前事物隔离级别:DBCC Useroptions;
修改当前事物隔离级别:
set transaction isolation level <隔离级别>; --xxx可以为 Read Uncommitted、read committed、Repeatable read、Serializable
sqlserver只能更改当前连接的,不能全局改。
数据库死锁:
1.数据库中事物A锁定资源A,在不释放资源A的情况下申请资源B,同时事物B锁定资源B,在不释放资源B的情况下,申请资源A。这样就会形成死锁。
解决方案:
(1)事物对数据库表操作的顺序尽量保持一致。

2.高并发下操作同一条数据(隔离级别为Repeatable read
程序对数据库数据的修改通常都是先读取,再更新。当有两个事物同时操作同一条数据的时候,如果事物A获取了该条数据的读锁,准备申请写锁。同时事物B也获取了读锁,准备申请写锁。
应为事物隔离级别是Repeatable read,事物A和事物B的读锁都不释放,导致事物A,B都无法获得写锁。这样就形成了死锁。
解决方案
(1)降低事物隔离级别。
(2)用版本号。给该条资源加版本号(只能降低概率)
(3)前端防止用户重复点击。
注:用行版本号机制可以增加数据并发性,同时减少死锁概率
 

 

sqlserver 数据库隔离级别,数据库死锁

原文:https://www.cnblogs.com/gfbppy/p/13760189.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶