全部产品
Search
文档中心

云原生数据库 PolarDB:使用说明

更新时间:Jan 19, 2024

PolarDB高压缩引擎(X-Engine)使用X-Engine代替了InnoDB作为默认存储引擎,具有较高的数据压缩率,非常适合对计算诉求不高但需要存储一些归档类数据(如钉钉消息等数据)的业务。本文介绍PolarDB高压缩引擎(X-Engine)相关的使用说明。

使用限制

  • 与InnoDB引擎共存时的资源分配限制

    使用X-Engine引擎时,由于95%的内存会提供给X-Engine引擎用做写入缓存和BlockCache以加速读写速度,留给InnoDB Buffer Pool的内存非常少,所以在X-Engine引擎的集群中,请尽量避免使用InnoDB引擎表存储太多数据,否则会因为缓存命中率低而导致性能大幅降低。建议使用PolarDB高压缩引擎(X-Engine)时,所有的表都使用相同的X-Engine引擎,避免引擎混用影响集群性能。

  • 引擎功能限制

    X-Engine引擎在功能上有如下限制。

    分类

    功能

    说明

    SQL功能

    外键

    不支持

    临时表

    不支持

    Generated Column

    不支持

    Handler API

    不支持

    列属性

    最大列长度

    (longblob/longtext/json)

    32 MB

    GIS地理数据类型

    不支持所有GIS相关数据类型(包含geometry、point、linestring、polygon、multipoint、multilinestring、multipolygon、geometrycollection)

    索引

    哈希索引

    不支持

    空间索引

    不支持(所有与全文索引相关的创建、使用均不支持)

    事务

    事务隔离级别

    支持如下2个隔离级别:

    • 读已提交(RC)

    • 可重复读(RR)

    单个事务支持的最大数据量

    32 MB

    Savepoint

    不支持

    XA事务

    即将支持

    锁粒度

    • 支持表级别锁和行级别锁

    • 不支持GAP锁

    Skip Locked

    不支持

    Lock Nowait

    不支持

    字符集

    非索引列支持的字符集

    非索引列支持所有的字符集(校对规则)

    索引列支持的字符集

    • latin1(latin1_bin)

    • gbk(gbk_chinese_ci、gbk_bin)

    • utf8(utf8_general_ci、utf8_bin)

    • utf8mb4(utf8mb4_0900_ai_ci、utf8mb4_general_ci、utf8mb4_bin)

    主从复制

    Binlog格式

    支持如下3种格式:

    • stmt

    • row

    • mixed

    说明

    默认为row,采用stmt/mixed在特定并发场景可能存在数据安全性问题。

    说明

    对于X-Engine引擎中其他未列出的功能,默认其功能特性与InnoDB引擎相同。

  • 大事务功能限制

    X-Engine目前不支持大事务。当一个事务修改的行数等于或大于10000行时,X-Engine会启用commit in middle功能,即X-Engine会在内部提交该事务,并重新开启一个子事务继续执行该事务。但commit in middle并不能遵循严格意义上的事务原子性(Atomicity),因此您在使用过程中需要注意如下几点:

    • 假设需要开启一个事务插入大量数据,但在数据插入过程中,由于commit in middle功能,已经先提交了一部分数据,其它请求就可以访问到插入的数据。

    • 假设需要开启一个事务修改大量数据,已经执行了commit in middle的事务将无法回滚。

      DROP TABLE t1;
      CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine;
      BEGIN;
      call insert_data(12000); //插入12000行数据,触发commit in middle,前10000行数据已经提交。
      rollback;// 回滚只能把最后2000条数据回滚。
      SELECT COUNT(*) FROM t1; // 这里仍然能够查询到10000条数据。
      +----------+
      | COUNT(*) |
      +----------+
      |    10000 |
      +----------+
      1 row in set (0.00 sec)
    • 假设开启一个需要修改且删除大量数据的事务,由于commit in middle功能,DELETE操作读不到本事务中新插入的行,导致新插入的数据未被DELETE。

      DROP TABLE t1;
      CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine;
      call insert_data(10000);
      BEGIN;
      INSERT INTO t1 VALUES(10001,10001), (10002,10002);
      DELETE FROM t1 WHERE c1 >= 0;// DELETE操作触发commit in middle,导致delete操作没有读到本事务插入的行。
      commit;
      SELECT * FROM t1;
      +-------+-------+
      | c1    | c2    |
      +-------+-------+
      | 10001 | 10001 |
      | 10002 | 10002 |
      +-------+-------+
      2 rows in set (0.00 sec)

将InnoDB引擎下的表转存至高压缩引擎(X-Engine)

  1. 使用DMS、客户端或命令行连接数据库,具体操作请参见连接数据库集群

  2. 执行以下命令,将InnoDB引擎下的表转存至X-Engine引擎。

    ALTER TABLE <数据库名>.<表名> ENGINE xengine;
    说明

    使用ALTER命令将InnoDB引擎下的表转存至X-Engine引擎的过程中,会阻塞转换涉及的表的写入操作(DML和DDL)。

在高压缩引擎(X-Engine)中创建表

  • 在现网已购的高压缩引擎(X-Engine)产品系列集群中创建表时,无需指定X-Engine引擎,默认会创建X-Engine引擎的表。语法示例如下:

    CREATE TABLE test_arc.t1 (id int PRIMARY KEY,c1 varchar(10));

    表创建成功后,后续使用方法与InnoDB一样,数据会存储在X-Engine引擎上。

    说明
    • 高压缩引擎(X-Engine)产品系列的集群中同时也支持创建InnoDB表,例如使用DTS迁移数据时,可能会出现迁移的表引擎仍然为InnoDB。若需要将其转换为X-Engine表,请参见InnoDB引擎转换为X-Engine引擎

    • 您可以通过如下命令查看当前数据库的默认引擎:

      SHOW VARIABLES LIKE '%default_storage_engine%';
  • 在新购的双引擎(InnoDB和X-Engine)集群中创建位于X-Engine引擎的表,您需要在创建表时指定X-Engine引擎。语法示例如下:

    CREATE TABLE t1(c1 int primary key , c2 int) ENGINE=xengine;

参数说明

说明
  • 针对表中可修改的参数,您可以根据业务需要进行修改。具体操作步骤,请参见设置集群参数和节点参数

  • 表中所有参数在PolarDB控制台上都已加上MySQL配置文件的兼容性前缀loose_

类别

参数

说明

是否支持修改

参数修改后,是否需要重启集群生效

性能

xengine_batch_group_max_group_size

事务流水线最大分组数。

不涉及

xengine_batch_group_max_leader_wait_time_us

事务流水线的最大等待时间。

不涉及

xengine_batch_group_slot_array_size

事务流水线最大batch大小。

不涉及

xengine_parallel_read_threads

并行扫描并发数。

xengine_parallel_wal_recovery

并行恢复。

不涉及

内存

xengine_block_cache_size

读block缓存的大小。

不涉及

xengine_row_cache_size

行缓存的大小。

不涉及

xengine_write_buffer_size

单Memtable的最大大小。

不涉及

xengine_block_size

磁盘上数据block大小。

不涉及

xengine_db_write_buffer_size

所有subtable的Active Memtable的总大小限制。

不涉及

xengine_db_total_write_buffer_size

所有subtable的Active Memtable/Immutable memtable的总大小限制。

不涉及

xengine_scan_add_blocks_limit

每个请求在范围扫描时,可以加到BlockCache中的Block数目。

compaction

xengine_flush_delete_percent_trigger

当Memtable中记录数超过此数目时,则xengine_flush_delete_record_trigger参数生效。

不涉及

xengine_max_row_locks

单SQL请求中,最大可以锁定的行数。

不涉及

xengine_lock_wait_timeout

锁等待超时时间。