【
问题详细
描述】
SequoiaDB
开启事
务
,事
务级别为
RC
,在
Mysql
执行
count
出
现脏读
情况,具体操作如下:
1.
开启事
务
,隔离
级别为
RC
;
2.
执行
select count(*) from x1
获取记录数;
3.
再次插入
记录
;
4.
再次
执
行步
骤
2
;
步
骤
4
发现
count
返回新插入的
记录
数,出
现脏读问题
。
详情见附件
mysql-1/2/3/4.png
【解决
办
法】
1.
当前版本(
v3.2.1
)的
quick count
机制确
实
是
脏读
的,只是
临时
用于
count
无条件
时
快速返回
结
果。
2.
目前
quick count
是通
过
sequoiadb_optimize_select_count
参数打开的特殊
优
化,可以通
过隐
藏的系
统
参数:
sequoiadb_optimize_select_count :<bool>
来
进
行开关。
【配置方法】
1.
非持久化生效方式
mysql> set global sequoiadb_optimizer_select_count=OFF
;
重启
mysql
参数会恢复成默
认值
ON
。
2
、持久化生效方式
修改
database/<
实例
>/auto.cnf
配置文件,在
[mysqld]
模
块
配置
sequoiadb_optimizer_select_count=OFF
,修改后
执
行
bin/sdb_sql_ctl restart <
实例名
>
重启
实
例生效。
【注意事
项
】
1.
带有过滤条件的
select count(*) from table where ....
语句还是原来的性能,因为
mysql
并不会把
count
下
压给
存
储
引擎。
2. sdb
的
count()
接口是直接
访问计
数器的,相当于
脏读
。如果用
户
介意,就不能打开
sequoiadb_optimize_select_count
。
3.sequoiadb_optimizer_select_count
参数是内部
隐
藏参数,不
对
外开放,无相关
资
料
说
明。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69935160/viewspace-2649161/ ,如需转载,请注明出处,否则将追究法律责任。