博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个关于Cobar 的释疑
阅读量:6377 次
发布时间:2019-06-23

本文共 808 字,大约阅读时间需要 2 分钟。

在测试Cobar的过程中发现了一个问题,就是当一个session执行了lock table xxx write,其他session包括该session都查询不了其他表了,直到有一个session执行了unlock tables;简例如下:

session1:

mysql> create table t (id int primary key)engine=innodb;

Query OK, 0 rows affected (0.08 sec)

session2:

lock table t write;

session1:

mysql> select * from sbtest limit 1;

ERROR 1100 (HY000): Table 'sbtest' was not locked with LOCK TABLES

session2:

unlock tables or quit;

session1:

can select other tables;

但是不同的session却可以保证事务的隔离性,这是为什么呢?其实答案就在这句话里;

默认情况下MySQLautocommit=1,并且使用Cobar默认情况是初始化一个共享后端连接;

当一个session执行lock table write返回后,这个后端连接会被释放到连接池里(MySQLChannel)等待被重用,这时如果再有其他session执行查询的话拿到的连接其实是lock tablewrite的状态,所以才有上面的那个现象;

work around也很简单,就是在执行lock tablewrite之前执行setautocommit=0,这样这个连接不会释放回去直到提交;

本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1298646,如需转载请自行联系原作者

你可能感兴趣的文章
spring笔记--依赖注入之针对不同类型变量的几种注入方式
查看>>
Java爬虫——网易云热评爬取
查看>>
Ajax的简单学习
查看>>
无华为,不智慧:智慧城市建设为何少不了华为?
查看>>
高性能网络通信框架Netty-基础概念篇
查看>>
为npm配置taobao源
查看>>
orm框架(SQLAlchemy) 连接数据库和创建表
查看>>
OSPF多区域虚电路配置
查看>>
zookeeper初探三 java客户端连接
查看>>
管理邮件用户
查看>>
Python中的运算符、数据类型、字符串及列表操作举例
查看>>
Tab页界面之二,jQuery技术实现
查看>>
如何查看linux版本
查看>>
导出DC数据以便以介质方式安装另一台域控制器
查看>>
2、Gerrit配置--用户配置
查看>>
Centos7 Nginx 服务器的安装配置
查看>>
Hibernate学习(八):检索方式
查看>>
RIPv1 PK RIPv2
查看>>
基于WorsPress+Xampp搭建博客
查看>>
Weblogic多应用部署在一个域下导致session冲突
查看>>