mariadb 使用索引会导致在READ UNCOMMITTED事务期间无法获取更新锁

zzzyeukh  于 2022-11-29  发布在  其他
关注(0)|答案(3)|浏览(142)

在升级到mariadb 10.5.11之后,我遇到了一个奇怪的索引问题。
包含两列Type(变长字符)和Point(点)的简单表格
Type上的索引(Tindex)和Point上的空间索引(Pindex)
现在,类似于

SELECT X(Point) as x,Y(Point) as y,hotels.Type FROM hotels WHERE (Type in ("acco")) AND MBRContains( GeomFromText( 'LINESTRING(4.922 52.909,5.625 52.483)' ), hotels.Point)
;

结果
查询错误(1207):在READ UNCOMMITTED事务处理期间无法获取更新锁
而两者

SELECT X(Point) as x,Y(Point) as y,hotels.Type FROM hotels USE INDEX (Pindex) WHERE (Type in ("acco")) AND MBRContains( GeomFromText( 'LINESTRING(4.922 52.909,5.625 52.483)' ), hotels.Point)
;

SELECT X(Point) as x,Y(Point) as y,hotels.Type FROM hotels USE INDEX (Tindex) WHERE (Type in ("acco")) AND MBRContains( GeomFromText( 'LINESTRING(4.922 52.909,5.625 52.483)' ), hotels.Point)
;

工作正常。就像mariadb 10.5.10那样
| 标识符|选择类型(_T)|工作台|类型|可能的密钥|钥匙|密钥长度|参考文献|列|额外的|
| 一个|简单|旅馆|范围|过滤器|类型,P索引|普迪茨|型号|三十四|三○二|空值|340人(4%)|使用where;使用rowid筛选器|

vfwfrxfs

vfwfrxfs1#

这个问题现在被跟踪为MDEV-26123(我猜你在那里报告了它)。问题描述说这个问题是在MariaDB 10.2.39,10.3.30,10.4.20,10.5.11,10.6.1中引入的。
我在升级到MariaDB 10.6.4后遇到了这个问题。我降级到10.6.0,这是可能的,而不需要做任何数据迁移。它现在似乎已经修复了这个问题。

swvgeqrz

swvgeqrz2#

导致此问题的原因似乎是MDEV-25594code fix
在提交消息或讨论中,我看不到任何内容表明对READ UNCOMMITTED行为的更改是有意的。
没有关于这个的公开错误报告,所以我建议你创建一个new bug report

vcirk6k6

vcirk6k63#

选择@@会话.自动提交;
设置@@会话.自动提交=0;
选择@@会话.自动提交;

在my.cnf自动提交中添加= 0

使用mariadb 10.2.40(已解析)https://developpaper.com/transaction-isolation-level-of-mariadb/

相关问题