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

Oceanbase 支持的block size范围是多少 ?

李真旭 2020-06-10
1450

通过查询Oceanbase Oracle租户模式下的建脚本,可以看到一些有意思的属性,这么我们来分别测试一下。

obclient> CREATE TABLE t1_2k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 2048 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> CREATE TABLE t1_4k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 4096 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.03 sec) obclient> CREATE TABLE t1_8k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 8192 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.03 sec) obclient> obclient> CREATE TABLE t1_32k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 32768 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> CREATE TABLE t1_64k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 65536 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> CREATE TABLE t1_128k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 131072 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> CREATE TABLE t1_256k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 262144 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> CREATE TABLE t1_512k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 524288 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.05 sec) obclient> CREATE TABLE t1_1024k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 1048576 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> CREATE TABLE t1_2048k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 2097152 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; ERROR-00600: internal error code, arguments: -5258, Invalid block size, block size should between 16384 and 1048576 obclient>

从上述测试来看,目前Oceanbase 2.2版本最大对于blocksize的支持范围是2k-1024k;远超Oracle 的支持范围,由此也可以初步判断oceanbase的单表支持应该是非常巨大的。

另外从上面测试来看,大家可以看到,虽然提示支持的范围是16k-1024k,但实际上我测试2k-8k都可以的。这或许是一个小bug ?

突然还有个小疑问,能否支持非标准block size呢? 测一下:

obclient> CREATE TABLE t1_3k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 3072 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient> insert into t1_3k select owner,object_name from dba_objects; Query OK, 269 rows affected (0.25 sec) Records: 269 Duplicates: 0 Warnings: 0 obclient> commit; Query OK, 0 rows affected (0.00 sec) obclient> select * from t1_3k where rownum < 5; +-------+-------------------------------------------------------+ | OWNER | OBJECT_NAME | +-------+-------------------------------------------------------+ | ROGER | KILLDB | | ROGER | __idx_1100611139453779_IDX_OWNER | | ROGER | TEST_RECOVER | | ROGER | __idx_1100611139453782_RECYCLE_OBIDX_1590579268121989 | +-------+-------------------------------------------------------+ 4 rows in set (0.00 sec)

很有意思。。。还支持3k block size. 其实还有更好玩的。。。。

obclient> CREATE TABLE t1_5k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 5100 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec) obclient>

应该说支持任意block size的.前面测试最大支持1024k,那么最小是多少呢 ?

obclient> CREATE TABLE t1_1k ( -> "OWNER" VARCHAR2(128) DEFAULT NULL NOT NULL, -> "OBJECT_NAME" VARCHAR2(128), -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 1 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10; Query OK, 0 rows affected (0.04 sec)

Omg。。。 最小支持1个byte的block size。 当然这就玩玩,生产环境肯定不能这样设置。。。那没发跑业务。

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

评论