并发查询出现AccessShareLock和ExclusiveLock-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

并发查询出现AccessShareLock和ExclusiveLock

yundun119 2018-03-09 10:19:15 4081

环境:
HikariCP version: java7-2.4.13
JDK version : 1.7.0_79
Database : PostgreSQL 9.4.1
Driver version : 42.1.4.jre7
ORM : mybatis-3.3.1

描述:
1、一个查询SQL耗时2.5s左右(先不考虑SQL优化的问题);
2、开启5个异步线程同时执行此SQL,每个线程各执行一次;
3、数据库连接池用的是HikariCP,连接池初始化后是空的,在有SQL任务时连接池会自动创建新的数据库连接;
4、开始执行多线程任务;
5、可以看到5个SQL的执行日志几乎是同时打印出来,并且程序进入等待状态,大约13s后,5个SQL的执行结果几乎同时打印出来;

问题:
从pg的监控数据中可以发现并发查询时出现了AccessShareLock和ExclusiveLock,而且每个连接都有7个AccessShareLock和1个ExclusiveLock,如何解读这个现象?从以下链接中可以知道对象锁在事务结束时释放,例如在事务中查询表时,表的共享锁需要等到事务结束时释放,但是测试时并未使用事务进行查询,而从监控结果看各查询却是一个串行等待。
https://yq.aliyun.com/articles/8244?spm=a2c4e.11155435.0.0.62fc75b50NTBVE#

__20180309083755

SQL 监控 Java 关系型数据库 数据库连接 数据库 PostgreSQL
分享到
取消 提交回答
全部回答(1)
  • 卓刀
    2019-07-17 22:01:08

    题主方便的话,可以贴一下全一点的SQL 语句。不过我这里可以先解释下涉及到的锁的具体含义:

    • AccessShareLock 只是共享读锁,只有需要AccessExclusiveLock锁的语句比如alter table 等才会等待该锁会被释放。
    • ExclusiveLock 这个锁一般是全局资源的排它锁,我猜测是xid 对应的排它锁,保证在该事务之内的查询的锁机制。
    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程