TXRocks is a transactional storage engine developed by Tencent's TXSQL team based on RocksDB. It saves more storage space and has a lower write amplification.
By leveraging the LSM tree storage structure of RocksDB, the TXRocks transactional storage engine not only reduces wastes caused by InnoDB's half-full pages and fragments, but also uses the compact storage format. Therefore, it has a performance comparable to that of InnoDB but requires only a half or even smaller storage space. It is more suitable for businesses with a large data volume and high requirements for the transactional read/write performance.
The database version must be MySQL 5.7 or 8.0 on a two-node architecture.
You can select RocksDB as the engine when purchasing an instance on the TencentDB for MySQL purchase page. For more information on other parameters, see Creating MySQL Instance.
Note:RocksDB is a key-value storage engine, with efficient writing and high compression. Currently, only TencentDB for MySQL 5.7 and 8.0 instances can use the RocksDB engine.
If RocksDB is selected as the default engine during instance creation, it will be the default engine used for table creation. You can run the following command to view the default engine:
show variables like '%default_storage_engine%';
If the default engine is RocksDB, you cannot specify a storage engine in table creation statements:
After a table is created, its data will be stored in RocksDB and can be used in the same way as in InnoDB.
TXRocks has certain limits on engine features as detailed below:
Category | Feature | TXRocks Limit |
---|---|---|
DDL | Online DDL | Not supported. For example, `ALTER TABLE ... ALOGRITHM=INSTANT` is not supported. Only the `COPY` algorithm is supported for partition management operations. |
SQL | Foreign key | Not supported. |
Partitioned table | Not supported. | |
Generated column | Not supported. | |
Explicit DEFAULT expression | Not supported. For example, `CREATE TABLE t1(c1 FLOAT DEFAULT(RAND()))ENGINE=ROCKSDB` will fail, with the error `'Specited storage engine' is not supported for default value expressions` reported. | |
Encrypted table | Not supported. | |
Index | Spatial index | The spatial index and spatial data types such as `GEOMETRY` and `POINT` are not supported. |
Full-text index | Not supported. | |
Multi-valued index | Not supported. | |
Replication | Group replication | Not supported. |
Binlog format | Only the `ROW` format is supported, while `STMT` and `MIXED` formats are not. | |
Clone plugin | Not supported. | |
Transportable tablespace | Not supported. | |
Transaction and lock | LOCK NOWAIT and SKIP LOCKED | Not supported. |
Gap lock | Not supported. | |
Savepoint | Not supported. | |
Partial LOB field update | Not supported. | |
XA transaction | Not recommended. |
Note:When creating a TencentDB for MySQL instance, you can select RocksDB as the default storage engine. You can also customize the parameter template to suit your needs by following the parameter descriptions below.
Parameter | Restart Required | Default Value | Value Range/Valid Values | Description |
---|---|---|---|---|
rocksdb_use_direct_io_for_flush_and_compaction | Yes | ON | ON/OFF | Whether to use DIO during compaction. |
rocksdb_flush_log_at_trx_commit | No | 1 | 0/1/2 | Controls when to write logs to the disk. It is similar to innodb_flush_log_at_trx_commit and indicates whether transactions need to be synced when being committed. |
rocksdb_lock_wait_timeout | No | 1 | 1–1073741824 | Lock wait timeout period in seconds. |
rocksdb_deadlock_detect | No | ON | ON/OFF | Whether to enable deadlock detection. After it is enabled, all deadlock information will be recorded in mysqld error logs. |
rocksdb_manual_wal_flush | Yes | ON | ON/OFF | If the total size of WAL files exceeds rocksdb_max_total_wal_size , RocksDB will forcibly flush the column family to the disk to ensure that the oldest WAL file can be deleted. |
Parameter | Restart Required | Default Value | Value Range/Valid Values | Description |
---|---|---|---|---|
rocksdb_flush_log_at_trx_commit | No | 1 | 0/1/2 | Controls when to write logs to the disk. It is similar to innodb_flush_log_at_trx_commit and indicates whether transactions need to be synced when being committed. |
rocksdb_lock_wait_timeout | No | 1 | 1–1073741824 | Lock wait timeout period in seconds. |
rocksdb_merge_buf_size | No | 524288(=512K) | 100–18446744073709551615 | Size of the merge-sort buffer used during secondary index creation. |
rocksdb_merge_combine_read_size | No | 8388608 (=8M) | 524288(=512K)–18446744073709551615 | Size of the memory used by k-way merge during secondary index creation. |
rocksdb_deadlock_detect | No | ON | ON/OFF | Whether to enable deadlock detection. |
rocksdb_manual_wal_flush | Yes | ON | ON/OFF | If the total size of WAL files exceeds rocksdb_max_total_wal_size , RocksDB will forcibly flush the column family to the disk to ensure that the oldest WAL file can be deleted. |
RocksDB monitoring metrics are as listed below:
Metric | Description |
---|---|
rocksdb_bytes_read | Data read from disk |
rocksdb_bytes_written | Data written to disk |
rocksdb_block_cache_bytes_read | Blocks read |
rocksdb_block_cache_bytes_write | Blocks written |
rocksdb_wal_log_capacity | Data written to WAL log |
Was this page helpful?