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


    数据库隔离级别:读未提交  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)前端防止用户重复点击。
    注:用行版本号机制可以增加数据并发性,同时减少死锁概率
     
  • 相关阅读:
    01开卡主流程
    eclipse开发工程右键菜单例子
    eclipse插件开发需要什么
    installshield安装程序自注册dll
    eclipse开发视图
    vbscript和cmd命令 如何获取当前文件的路径
    eclipse开发视图
    vbscript和cmd命令 如何获取当前文件的路径
    vbscript设置环境变量
    eclipse开发工程右键菜单例子
  • 原文地址:https://www.cnblogs.com/gfbppy/p/13760189.html
Copyright © 2020-2023  润新知