环境:
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#
题主方便的话,可以贴一下全一点的SQL 语句。不过我这里可以先解释下涉及到的锁的具体含义:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。