避免死锁的编码原则

本文总结了数据库操作的多项最佳实践,包括统一表操作方法、避免循环写入、合理使用事务和锁、优化查询条件等,旨在提高数据库性能和并发处理能力,减少全表扫描和不必要的锁竞争。同时,建议避免使用效率低下的分布式事务,如TranscationScope,并提倡批量处理和最小事务原则。
摘要由CSDN通过智能技术生成

1. 多个方法,操作同一张表的,统一操作该表的方法,更新此表用同一个方法,方法内使用多线程锁/分布式锁
2. 一次操作,操作多个表,每个模块统一操作顺序
3. 不要在循环里 调用写数据库的操作
4. 查询用with(nolock), 修改、删除(update\delete) where条件匹配主键
          非聚集索引:UPDATE 可以走行级锁,  WHERE条件不是主键或者索引, 即使强制走行级锁也走不了行级锁
          错误示例:

           a. delete from 表名   where  id = 'xxx' and autoid not in ('1','2','3') ,  not in 会导致全表锁

           b. delete from 表名   where  id like '%xxx'  ,  like '%xxx' 不会走索引
5. 查询一张表的方法,最好统一方法,以保证where条件 字段顺序一致
6. 一个线程里,操作多张表 ,统一用一个数据库连接对象
7. 不同线程之间减少共用资源,例如,过程表 用临时表,而不用物理表
8. 最小事务原则
9. 最小锁原则,线程锁、行锁;  
10. 批量原则,从数据库里一次取一批,不要每次重新取
11. 不受事务控制的方法,不能穿插在锁分配过程中
               例如:调用SAP接口,要么放在 数据库加锁操作前,要么放在数据库加锁操作后

12.  禁用 TranscationScope,这个分布式事务 效率极低,在大并发下还经常发生莫名其妙的错误
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值