巨杉数据库Sequoiadb咨询事务RCRC隔离级别在-mysql-执行-count-出现脏读情况

19次阅读

共计 772 个字符,预计需要花费 2 分钟才能阅读完成。

【问题详细描述】
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 下压给存储引擎。

  1. sdb 的 count() 接口是直接访问计数器的,相当于脏读。如果用户介意,就不能打开 sequoiadb_optimize_select_count。

3.sequoiadb_optimizer_select_count 参数是内部隐藏参数,不对外开放,无相关资料说明。

正文完
 0