TXRocks 是腾讯云 TXSQL 团队基于 RocksDB 开发的事务型存储引擎,兼具更加节省存储空间和写⼊放⼤更低的优势。
产品介绍
TXRocks 是腾讯云 TXSQL 团队基于 RocksDB 开发的事务型存储引擎,得益于 RocksDB LSM Tree 存储结构,既减少了 InnoDB 页面半满和碎片浪费,又可以使用紧凑格式存储,因此 TXRocks 在保持与 InnoDB 接近性能的前提下,存储空间相比 InnoDB 可以节省一半甚至更多,非常适合对事物读写性能有要求,且数据存储量大的业务。
前提条件
数据库版本须为 MySQL5.7、8.0,架构为双节点。
购买云数据库 MySQL 实例(RocksDB 引擎)
说明
RocksDB 是 key-value 存储引擎,以高效写入能力与高压缩存储著称,目前暂时仅支持 MySQL5.7、8.0版本可选择引擎为 RocksDB。
创建 RocksDB 表
如果创建实例时设置了默认引擎为 RocksDB,则建表时默认引擎就是 RocksDB。您可以通过如下命令查看默认引擎:
show variables like '%default_storage_engine%';
当默认引擎是 RocksDB 时,建表语句不许指定存储引擎。
表创建成功后,后续的使用方法与 InnoDB一样,数据会存储在 RocksDB 引擎。引擎功能限制
TXRocks 在引擎功能上有一些限制,具体如下表所示:
功能分类 | 功能项 | TXRocks 限制 |
DDL | Online DDL | 不⽀持,例如不⽀持 ALTER TABLE ... ALOGRITHM=INSTANT 功能,Partition 管理操作仅⽀持 COPY 算法 |
SQL 功能 | 外键 | 不⽀持外键(Foreign Key) |
| 分区表 | 不⽀持分区表 (Partition) |
| ⽣成列 | 不⽀持⽣成列 (Generated Columns) |
| 显式 Default 表达式 | 不支持,如 CREATE TABLE t1(c1 FLOAT DEFAULT(RAND()))ENGINE=ROCKSDB; 会失败,报错 'Specited storage engine' is not supported for default value expressions. |
| 加密表 | 不⽀持加密表 |
索引 | 空间索引 | 不⽀持空间索引(Spatial Index)、空间数据类型(如 GEOMETRY、POINT等) |
| 全⽂索引 | 不⽀持全⽂索引(Fulltext Index) |
| 多值索引 | 不⽀持多值索引(multi-valued index) |
复制 | 组复制 | 不⽀持组复制(Group Replication) |
| binlog 格式 | 仅⽀持 ROW 格式,不⽀持 stmt 或者 mixed 格式 |
| 克隆插件 | 不⽀持克隆插件(Clone Plugin) |
| 可传输表空间 | 不⽀持可传输表空间(Transportable Tablespace) |
事务与锁 | LOCK NOWAIT 和 SKIP LOCKED | 不⽀持 LOCK NOWAIT 和 SKIP LOCKED |
| 间隙锁 | 不⽀持间隙锁(Gap Lock) |
| Savepoint | 不⽀持 Savepoint |
| 部分更新 LOB 字段 | 不⽀持部分更新 LOB 字段 |
| XA 事务 | 不建议使⽤ |
参数说明
说明
在创建云数据库 MySQL 实例时,选择 RocksDB 为默认存储引擎后,可以根据下表的参数说明调整参数模板以便适应自身业务。
MySQL 5.7 相关参数列表
参数名称 | 是否需要重启 | 默认值 | 允许值 | 描述 |
rocksdb_use_direct_io_for_flush_and_compaction | 是 | ON | ON/OFF | compaction 时是否使用 DIO。 |
rocksdb_flush_log_at_trx_commit | 否 | 1 | 0/1/2 | 控制何时将日志写入磁盘。 类似于 innodb_flush_log_at_trx_commit,事务提交时是否进行同步。 等于0时,事务提交时不同步; 等于1时,每次事务提交时都同步; 等于2时,每1秒同步一次。 |
rocksdb_lock_wait_timeout | 否 | 1 | 1-1073741824 | 锁等待超时时间,单位秒。 |
rocksdb_deadlock_detect | 否 | ON | ON/OFF | 死锁检测开关,开启后,有关所有死锁的信息将记录在 mysqld 错误日志中。 |
rocksdb_manual_wal_flush | 是 | ON | ON/OFF | rocksdb_max_total_wal_size,WAL 超过这个大小,RocksDB 会开始强制列族落盘,以保证删除最老的 WAL 文件。 |
MySQL 8.0 相关参数列表
参数名称 | 是否需要重启 | 默认值 | 允许值 | 描述 |
rocksdb_flush_log_at_trx_commit | 否 | 1 | 0/1/2 | 控制何时将日志写入磁盘。 类似于 innodb_flush_log_at_trx_commit,事务提交时是否进行同步。 等于0时,事务提交时不同步; 等于1时,每次事务提交时都同步; 等于2时,每1秒同步一次。 |
rocksdb_lock_wait_timeout | 否 | 1 | 1-1073741824 | 锁等待超时时间,单位秒。 |
rocksdb_merge_buf_size | 否 | 524288(=512K) | 100-18446744073709551615 | 创建二级索引过程中用到的 merge-sort buffer 大小。 |
rocksdb_merge_combine_read_size | 否 | 8388608 (=8M) | 524288(=512K)-18446744073709551615 | 创建二级索引过程中用到的多路归并过程使用的内存大小。 |
rocksdb_deadlock_detect | 否 | ON | ON/OFF | 死锁检测开关。 |
rocksdb_manual_wal_flush | 是 | ON | ON/OFF | rocksdb_max_total_wal_size,WAL 超过这个大小,RocksDB 会开始强制列族落盘,以保证删除最老的 WAL 文件。 |
RocksDB 引擎监控项
下表为 RocksDB 的引擎监控指标。
指标 | 描述 |
rocksdb_bytes_read | 读磁盘量 |
rocksdb_bytes_written | 写磁盘量 |
rocksdb_block_cache_bytes_read | 读数据块数 |
rocksdb_block_cache_bytes_write | 写数据块数 |
rocksdb_wal_log_capacity | 写 WAL 日志大小 |