通过查询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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




