• 如何减少sqlserver中死锁的发生


    从客观上讲,在大型数据库应用系统中,死锁问题不可能完全避免的。但是如我们有良好的编码习惯与意识,完全可以尽量减少死锁情况的发生,从而提高应用程序性能。

    下面我们讲解一下在大型数据库系统开发过程中应该注意的8个方面:
    1,尽量不要在一个事务中实现过于复杂的查询或更新操作。原因很简单,越是复杂的数据库操作,占用数据库资源的时间越长,引发死锁的可能性越大。

    2,尽量不要在数据库事务中要求用户响应。原因同1,这也会导致事务长时间无法结束,浪费数据库资料。

    3,死锁是由于并发访问数据库资源造成的,减少死锁就应该限制应用系统的并发访问量。我们应该合理设置后台服务的线程数,将大量数据的操作分解,分步骤,分阶段的执行。也应该避免在用户量大的时候大规模的进行后台数据库操作,应该将大规模的数据库操作放在用户量最少的时候进行。

    4,尽可能以分区表或分区视图的方式拆分包含大量数据的表,将它们保存在不同的物量磁盘和文件组中。在访问数据时,可以分散访问保存在不同分区的数据,从而减少因为在大型表中放置锁而造成其它事务长时间等待的概率。

    5,尽量避免使用占用很长的复杂查询,在条件允许的情况下应该尽量使用分页查询或缩小结果集的方式。因为复杂查询会长时间占用数据库资源,增加发生死锁的概率。

    6,尽可能使用较低的隔离级别,如READ UNCOMMITTED,因为隔离级别低时,事务之间相互等待的情况会减少,这样每个事务都会尽可能快地完成数据库操作,然后释放其拥有的锁资源,这样就会降低出现锁等待或死锁的概率。当然,用户在设计数据库应用程序时,需要考虑如何解决事务中数据不一致的情况。

    7,应该注意统一访问表的顺序,尽量避免有的事务先查询表A然后更新表B,而有的事务先查询表B再更新表A的情况。

    8,如果一个事务中只进行读取数据的操作,则可以在该事务中使用快照(SNAPSHOT)隔离级别。因为在快照隔离级别中,数据库引擎不会阻塞其他事务对当前事务所占用资源的修改操作,当前事务会认为它所拥有的资源没有被修改过(实际上它所拥有的资源是一个快照)。这样就可以减少因为等待资源而产生死锁的情况。

    本文来源于:http://www.lmwlove.com/ac/ID766

  • 相关阅读:
    java-抽象类
    java-接口
    java-面向对象总结
    java-单例设计模式
    java数组
    .Net框架整理
    PHP结合memcacheq消息队列解决并发问题
    浅谈DDos攻击
    PHP+ffmpeg+nginx的配置实现视频转码(转)
    使用Nginx的X-Accel-Redirect实现大文件下载
  • 原文地址:https://www.cnblogs.com/wyfs/p/2390643.html
Copyright © 2020-2023  润新知