一个关于Cobar 的释疑

简介:

在测试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,如需转载请自行联系原作者



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Shell Linux API
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
1112 0
|
存储 人工智能 文件存储
聊一聊并行文件系统的客户端优化之道
本文主要介绍阿里云CPFS是如何应对挑战以及对并行文件系统的技术探索与落地实践。
43859 5
聊一聊并行文件系统的客户端优化之道
|
6月前
|
Linux API 数据安全/隐私保护
【超详细】2026年阿里云部署OpenClaw保姆级图文教程
本文为2026年最新、最完整的OpenClaw(Clawdbot)阿里云搭建教程,覆盖从服务器选购、系统初始化、环境安装、服务部署、端口放行、开机自启,到阿里云百炼Coding Plan API配置、本地MacOS/Linux/Windows11三端同步部署、技能加载、运行维护、常见问题一站式解决。所有步骤均为可直接复制的命令与可复现操作,面向零基础用户,全程无多余概念、无推广内容,只保留可落地的搭建流程。
2672 1
|
存储 关系型数据库 MySQL
在 Python 中获取输入
【8月更文挑战第23天】
1385 0
|
机器学习/深度学习 人工智能 自动驾驶
人工智能与就业市场:工作的变革
【10月更文挑战第31天】随着人工智能技术的飞速发展,就业市场正经历深刻变革。本文探讨了人工智能对就业市场的积极影响,如创造新兴职业、提高生产效率和促进职业转型,以及面临的挑战,如自动化取代部分工作、技能转型需求增加和就业市场两极分化。文章提出了加强教育培训、推动产业升级和创新、完善社会保障体系等应对策略,旨在为读者提供全面而深入的理解。
|
SQL Oracle Java
SQL 注入神器:jSQL Injection 保姆级教程
SQL 注入神器:jSQL Injection 保姆级教程
|
Java 测试技术 开发者
Java线程池ThreadPoolExcutor源码解读详解09-4种拒绝策略
本文介绍了线程池的四种拒绝策略:AbortPolicy、DiscardPolicy、DiscardOldestPolicy和CallerRunsPolicy,并通过代码示例展示了它们在任务过多时的不同处理方式。AbortPolicy会抛出异常并停止主线程;DiscardPolicy会默默丢弃新任务;DiscardOldestPolicy会抛弃队列中最旧的任务来接纳新任务;而CallerRunsPolicy则是由调用者线程执行被拒绝的任务,以减缓新任务的提交速度。这四种策略适用于不同的场景,开发者可以根据需求选择合适的策略。
2114 5
|
JSON NoSQL MongoDB
蓝易云 - mongodb数据如何导入到clickhouse
以上步骤是一种通用的方法,具体的实现可能会根据你的具体需求和数据结构有所不同。
645 1
|
存储 算法 安全
在线SM4加密/解密工具
在线SM4加密/解密工具支持快速、便捷地对数据进行SM4算法加密与解密。
4253 0
|
存储 缓存 网络协议
计算机网络:思科实验【2-MAC地址、IP地址、ARP协议及总线型以太网的特性】
计算机网络:思科实验【2-MAC地址、IP地址、ARP协议及总线型以太网的特性】