八珍豆腐 2022-06-24 15:21 采纳率: 0%
浏览 27
已结题

关于#数据库#的问题:GBase 8s中如何避免死锁

GBase 8s中如何避免死锁,从哪些方面入手,避免死锁的出现

  • 写回答

1条回答 默认 最新

  • 八珍豆腐 2022-06-24 15:25
    关注

    锁的问题(锁等待、死锁)大部分由于没有正确理解锁的管理、使用方式导致。要解决锁的问题,我们可以从如下几个方面进行尝试。
    1.数据库锁资源的设置
    ONCONFIG 参数 LOCKS 设置即为数据库配置数量合适的锁。通过搜索 online 日志是否有动态增加锁的情况:grep 'dynamically allocated' online.log为表设置合理的锁模式、行级锁或者页级锁。
    2.应用程序锁使用模式设置
    通过 onstat -g sql 查看 SESSION 使用的锁等待模式和隔离级别,要为不同的应用设置合理的隔离级别和锁等待模式。如在应用程序加入如下语句:
    set isolation to dirty read;
    set lock mode to wait 5;
    3.应用程序避免使用不必要的锁
    许多应用程序的 SQL 语句由于没有正确地使用索引 INDEX,导致对整个表进行了锁定,导致并发遇到锁的问题。需要通过 SQL 优化和创建合理的索引,避免顺序扫描带来的锁冲突问题。
    由于顺序扫描导致的锁等待问题:创建表 test_lock,采用行级锁,并在 c1 字段上创建索引,插入 3 行测试数据。
    create table test_lock (c1 int,c2 int,c3 char(10)) lock mode row;
    create index idx_test_lock on test_lock(c1);
    insert into test_lock values(1,1,'abc');
    insert into test_lock values(2,2,'abc');
    insert into test_lock values(3,3,'abc');
    Session 1 通过索引扫描来修改第 2 行记录:
    Begin work;
    update test_lock set c3='new' where c1=2;
    此时,Session 1 将在第二行记录上加 X 锁。
    Session 2 通过 c2 字段以顺序扫描的方式来修改第 3 行记录。
    Begin work;
    update test_lock set c3='new' where c2=3;
    由于 Session 2 采用顺序扫描方式,在扫描过程中发现第 2 行记录加上了 X 锁,故提示锁冲突错误:
    244: Could not do a physical-order read to fetch next row.
    107: ISAM error: record is locked.
    如果在 c2 字段上加上索引,或者通过 c1=3 修改第三行记录,那么就不会出现锁的问题。
    4.应用程序优化避免过长占用锁
    锁是一个公共资源,需要尽快释放锁资源,减少等待,如果每个事务都可以在微秒级别完成,那么锁就不会是我们关注的问题,减少锁占用的时间也是解决锁问题的关键。我们可以通过避免大事务,把大事务拆分多次提交,这样锁就能尽快释放。另外,优化应用的处理性能,如合理使用索引等,都可以加快事务的处理速度,可无形中解决锁冲突的可能性。
    5.设置合理的隔离级别
    不同的隔离级别对锁的使用不一样,设置合理的隔离级别,可以提高应用程序的并发性,提高系统的处理能力,减少锁的冲突情况,避免读操作带来的锁问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月2日
  • 已采纳回答 6月24日
  • 创建了问题 6月24日

悬赏问题

  • ¥40 图书信息管理系统程序编写
  • ¥15 7-1 jmu-java-m02-使用二维数组存储多元线性方程组
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题