锁的问题(锁等待、死锁)大部分由于没有正确理解锁的管理、使用方式导致。要解决锁的问题,我们可以从如下几个方面进行尝试。

1.GBase8s 数据库锁资源的设置 ONCONFIG 参数 LOCKS 设置即为数据库配置数量合适的锁。通过搜索online 日志是否有动态增加锁的情况:grep 'dynamically allocated' online.log 为表设置合理的锁模式、行级锁或者页级锁。

2.应用程序锁使用模式设置 通过 onstat -g sql 查看 SESSION 使用的锁等待模式和隔离级别,要为不同的应用设置合理的隔离级别和锁等待模式。如在应用程序加入如下语句:

set isolation to dirty read;

set lock

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.设置合理的隔离级别 不同的隔离级别对锁的使用不一样,设置合理的隔离级别,可以提高应用程序的并发性,提高系统的处理能力,减少锁的冲突情况,避免读操作带来的锁问题。

GBASE 8s活锁、死锁问题的解决相关推荐

  1. 死锁与活锁的原因 与解决方法(附加“饿死”)

    死锁与活锁的原因 与解决方法(附加"饿死") 参考文章: (1)死锁与活锁的原因 与解决方法(附加"饿死") (2)https://www.cnblogs.co ...

  2. java避免活锁.死锁的解决,死锁 活锁 饥饿 出现原因及解决方案

    文章目录 死锁 概念 死锁示例 为什么会出现死锁呢? 如何解决死锁呢? 解决死锁代码实现 活锁 概念 活锁示例: 如何解决活锁呢? 饥饿 概念 如何解决饥饿呢? 死锁 概念 死锁:一组互相竞争资源的线 ...

  3. GBase 8s 特性简介

    GBase 8s 是一款支持共享存储集群.两地三中心部署的.成熟稳定的百 T金融级国产基于共享存储的数据库集群. ⚫ 最高安全等级 GBase 8s 通过了等保四级.商密.电科院等标准的相关测试,并获 ...

  4. GBase 8s灾备集群HAC (一) 概述

    GBase 8s灾备集群HAC(High Availability Cluster)是被广泛使用的典型的高可用解决方 案.当主节点发生故障时可迅速切换至辅节点,企业的业务不受影响. 1. 同步方式:基 ...

  5. GBase 8s 常用管理员命令汇总-gstat(下)

    GBase 8s 常用管理员命令汇总-gstat(下) gstat 打印运行时间统计信息 语法 gstat -g cpu 操作演示 [gbasedbt@devsvr ~]$ gstat -g cpu ...

  6. linux安装南大通用数据库 GBase 8s V8.8

    linux安装南大通用数据库 GBase 8s V8.8 1.操作系统.数据库 2.下载链接 3.安装文档 4.安装前准备 4.1.以root用户创建 gbasedbt 组和用户 4.2.创建 GBa ...

  7. 南大通用GBase 8s性能简介

    GBase 8s的目标是实现一个具有完善的事务处理能力的高性能的面向联机事务处理应用的安全数据库系统.因此,在保证系统安全性的前提下,还需要尽可能的提高数据库系统的性能,GBase 8s在实现上采用了 ...

  8. GBASE 8s客户端与服务器的通信

    GBase客户端与服务器的通信支持多种不同的方式:共享内存 Shared memory.Stream pipe. TCP/IP(Sockets.TLI).IPX/SPX.DRDA.我们通常选择TCP/ ...

  9. 南大通用GBase 8s优势介绍

    GBase 8s是南大通用推出的一款通用型数据库产品,是国内第一款与世界领先技术同级的事务型通用数据库系统.GBase 8s 的成熟度.稳定性.功能.处理性能处于世界领先水平.与Oracle最新版本相 ...

最新文章

  1. 剑指offer五:两个栈实现一个队列
  2. 前端学习(3132):react-hello-react之react中事件处理
  3. h5 网站滚动到某个位置
  4. 如何分割合并ISO文件
  5. [二叉树|深搜|dfs] leetcode 404 左叶子之和
  6. 在Ubuntu上安装Docker –分步指南
  7. 【iCore4 双核心板_FPGA】例程一:GPIO输出实验——点亮LED
  8. Java 实现 1024 小游戏【附源码】
  9. Java实现求阶乘和的三种方法
  10. VMware虚拟机安装黑群晖7.0教程
  11. Java基础——类与对象
  12. 虚拟机安装和破解密码
  13. 丸子的技术类文章!!它来了!!!
  14. 分布式电商平台架构实践
  15. 【CSS3】渐变背景
  16. 2022-2028年全球与中国SCADA石油和天然气行业发展趋势及投资战略分析
  17. js提取JSON数据中需要的那部分数据
  18. 中英文混合拼音排序(从首字母开始,相同则往下比较)
  19. 知道Unicode表的数字,怎么用java推出相对应的日文?
  20. Android View 生成唯一 Id

热门文章

  1. 蓝牙核心规范(V5.2)7.1-深入详解之L2CAP(2)
  2. Python-mqtt:通过运行深入理解
  3. 正则表达式 匹配常用手机号 (13、15\17\18开头的十一位手机号)
  4. 【oracle工具报错】plsqldev客户端中的PL/SQL美化器文件的规则不能用的郁闷事(因注释放错位置)
  5. qt opencv mingw转msvc
  6. 怎么批量获取淘宝的商品数据?
  7. 微信小程序同声传译开发(语音识别、语音输入转文字)开发教程
  8. java.io.FileNotFoundException: class path resource异常处理
  9. 推荐 :10个数据科学家常犯的编程错误(附解决方案)
  10. 2023,分析一下Python的前景