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

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

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

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

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

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

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

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

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

减少数据库死锁的8种方法相关推荐

  1. 数据库备份的四种方法 软件功能需求分析

    数据库备份的四种方法: l 全备份:创建备份完成时数据库内存在的数据的副本. l 差异备份:只记录自上次数据库备份后发生更改的数据.差异数据库备份比数据库备份小,而且备份速度快,因此可以更经常地备份, ...

  2. 数据库软件安装和数据库创建的几种方法

    数据库软件安装: 图形界面安装 静默方式安装 通过复制已经存在的数据库安装 数据库创建的几种方法 图形界面创建 静默方式创建 利用已经存在的实例创建 通过手工创建 先做总结后期完善. 转载于:http ...

  3. Oracle数据库备份与恢复的三种方法

    Oracle数据库备份与恢复的三种方法 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/ ...

  4. 修改mysql数据库名方法_安全快速修改Mysql数据库名的5种方法

    1. RENAME DATABASE db_name TO new_db_name 这个..这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了. 据说有可能丢失数据.还是不要用的好 ...

  5. 在生产环境下处理EFCore数据库迁移的五种方法

    在生产环境下处理EFCore数据库迁移的五种方法 原文链接:https://www.thereformedprogrammer.net/handling-entity-framework-core-d ...

  6. php 读取数据库信息,php读取数据库信息的几种方法

    php读取数据库信息的几种方法 2021-01-23 15:45:586 $dbh=@mysql_connect("localhost:3306","root" ...

  7. mysql 数据库分表三种方法

    当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,mysql执行一个sql的过程如下 ...

  8. 关于数据库优化的几种方法

    首先,要讲清为什么要进行sql优化,sql的优化可能当你在写单个程序的时候,你的感触没有那么深,但是当程序中有很多sql的时候,你就会发现,sql的优化有多么重要.个别sql的查询数据量可能会很大,当 ...

  9. Java实现数据批量导入数据库(优化速度-2种方法)

    目录 程序结构 连接数据程序 批量处理的两种方式 main方法 使用JDBC连接MySQL数据库进行数据插入的时候,经常会遇到数据量较大,插入数据库较慢,如何进行优化,加快导入数据库的速度,批量处理呢 ...

最新文章

  1. 模态框到阻止冒泡时间
  2. C++普通引用和常引用
  3. linux中fork和exec
  4. Xception论文阅读笔记
  5. [2.9训练]【CF909C】Python Indentation,【CF909D】Colorful Points,【CF909E】Coprocessor
  6. knn k的选取_KNN - 初窥K近邻算法
  7. STL源码剖析 list概述
  8. 计算机平面设计专业有哪些课程,计算机平面设计专业课程有哪些?
  9. 氢气露点和湿度换算_如何创建氢气鼓组以获取乐趣和收益
  10. OPPO关联公司被授权“脑电波采集方法”相关专利
  11. 正版python怎么下载_怎么下载官网python并安装
  12. 中值滤波器 ( Median Filter ) C++ 实现
  13. OD使用教程7(上)- 调试篇07|解密系列
  14. 通过编程方式在InfoPath 2010表单的下拉框修改事件中获取数据
  15. TCP: too many of orphaned sockets错误
  16. 变量、函数、流程控制与游标
  17. C 语言课程设计 最终答辩版 学生通讯录管理系统
  18. 谷歌浏览器占CPU非常高的解决办法
  19. Binding的三种方式
  20. 去掉 VC2017里输出:warning LNK4099

热门文章

  1. 朋友圈广告助手_2019年,微信朋友圈广告最受喜爱的10条
  2. 微信HOOK 5.获取个人通讯录以及群等
  3. Vue+Element-ui实例_使用flexslider插件设计横向时间线
  4. Hadoop 查看日志文件
  5. 图解Javascript核心内容
  6. zzcms v8.3
  7. strtok函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用)
  8. ssh是什么?主要拿来干嘛?
  9. 电商平台-系统架构与技术选型
  10. 如何制作一个类似Tiny Wings的游戏(2) Cocos2d-x 2.1.4内含iOS版源代码