❝开头还是介绍一下群如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题有需求都可以加群群内有各大数据库行业大咖可以解决你的问题。加群请联系 liuaustin3 共3400人左右 1 2 3 4 5 6 7 8 9(1 2 3 4 5 6 7 8群已经爆满 9群 300开10群PolarDB专业学习群110)这是Austindatabases公众号的2026年的第三个系列我是大能人。本系列会围绕PolarDB 进行知识分享发现PolarDB云中中的问题以及产品设计中的一些建议为主题基于本人工作中当前核心的数据库是PolarDB for MySQL 和 PolarDB for PostgreSQL 为基础里面也会融合一些 RDS 数据库产品作为年度第三个核心的知识点。这是一个系列本年度将在此系列来对 PolarDB的内容进行学习和分享PolarDB 大能人系列--推演PolarDB 4年都干了什 上期说留了一个问题事情发生在过完年后的一个工作日开发找到我说他们的PolarDB 8.02 出现问题表象就是从节点没有任何的select语句执行所有的读写压力都集中在写节点。从节点的压力写节点压力随即开发询问是怎么回事根据我们使用PolarDB的经验这样的情况一般发生在以下的集中情况1 连接到错误的地址应用或者个人链接到数据库并未使用集群地址而是使用了主地址这样的情况所有的连接必须打到主节点会产生这样的情况。2 使用显示事务也就是在每个语句中执行中都带入了begin; 语句 commit而不是autocommit 1; 将每个语句的执行都隐式提交。主机屏幕3 在一个事务中存在写语句 和 读语句并存并且写语句在前的情况封装在一起。以上的三种情况默认PolarDB是不会进行只读语句的分发到从节点的情况。这里我深知这几个问题但是大意失荆州。开发的亲告知他们不会封装事务到查询语句。同时要求我进行测试看看是不是只读语句无法打入到只读节点通过集群的地址。这里我偷懒了由于当时忙让同事去处理了此事同时应该是用了Python进行了集中并发的测试处理测试中明显的将生产的主节点的压力打了上去而只读节点还是没有任何的语句。期间我也尝试了运行了几个select sleep(10)这些语句是可以打入到只读节点并被发现的。后续麻烦了阿里云的PolarDB的诸位亲帮助查问题。最后打开了数据库审计系统通过审计将在数据库中执行的每条语句进行抓取。明显看到问题是在每个执行期间执行了 set autocomment 0; 在每个语句执行前。问题找到了但是开发问为什么我们进行测试的时候也是反应到只读节点没有任何的反应。最后发现是同事的python 程序默认的情况下也会发出autocommit 0; 的语句。最后证明问题完全不在PolarDB,而是开发和我们的疏忽导致的问题。那么如果开发无法进行程序的修改还是会发出autocommit 0;的语句如何进行select语句的拆分。使用事务拆分技术在PolarDB for MySQL中会有一个 事务拆分的选项我们只要启用事务全拆分就可以解决这个问题。同时PolarDB可以保证不会出现业务逻辑错误的问题比如写入数据必须能查到刚刚更新的数据这个是可以做到了从数据库原理上每次的读都是比对日志的中的序列号如果万一从节点还没有这个 DML的数据那么会启动全局一致性如果20ms内这个数据没有会自动将查询语句导入会主节点进行数据的查询。最后1 对麻烦了PolarDB 的研发同学处理这么低级的错误抱歉下次我写一个程序避免出现如上的问题集训压测和测试。2 对于熟知的PolarDB原理不要迷糊坚定系统就是这样而不是怀疑是不是数据库代理出现问题等等的一些无端的猜想。最后求证根因是程序的连接池在配置的时候将一个参数autocommit false,导致新建一个链接就会将执行的语句封装成一个事务直到这个链接失效。