1.分区表动态裁剪功能:dynamic 模式让执行计划更简单清晰,省略 Union 操作可提高执行效率。还解决了两个 static 模式无法解决的问题:不能使用 Plan Cache,不能使用 IndexJoin 的执行方式
2.重现必须参数:
set @@tidb_partition_prune_mode=“dynamic”;
set autocommit = 0;
连接的session 里同时设置这俩就是必现,如果开启自动提交是没问题的
3.我们的集群autocommit都是为1,即都开启了自动提交;
4.出现的问题是因为pymysql 会默认关闭自动提交,刚好触发上述问题,在配置dynamic的前提下 理论上任何擅自修改、关闭自动提交功能的数据库驱动,都会触发上面的现象
pymysql执行cur.execute("select @@autocommit; ")输出 [{’@@autocommit; ': 0}]
5.解决方法:
1)关闭动态裁剪功能
2)打开动态裁剪功能,在使用驱动的时候显式指定开启自动提交功能;
但是如果业务要求关闭自动提交,则在session里将dynamic调为static,临时关闭动态裁剪功能