暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

高压缩引擎使用限制

芬芳 2023-12-20
184

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引擎在功能上有如下限制。
    image.pngimage.png
  • 大事务功能限制
    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)
    
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论