【Doris 使用环境】测试
【Doris 版本】2.0.0
【操作系统】Centos7
【集群信息】3FE+6BE
【问题描述】
从2.0-beta版本升级到2.0.0版本,为了体验行存的高并发查询特性,首先BE中增加两个参数并重启:
disable_storage_page_cache=false
chunk_reserved_bytes_limit=10%
然后创建了一张行存表,建表语句如下:
CREATE TABLE t1 (
`id` int
) ENGINE=OLAP
UNIQUE KEY(`id`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"store_row_column" = "true"
,"enable_unique_key_merge_on_write" = "true"
,"light_schema_change" = "true"
);
分别执行以下SQL(此时表里没有数据):
select * from t1; -- 执行成功,并且返回数据为空,符合预期
select * from t1 WHERE id=1; -- 执行失败,报错信息:ERROR 1105 (HY000): IllegalStateException, msg: java.lang.IllegalStateException: null
SELECT * FROM t1 WHERE id=1 LIMIT 1; -- 执行成功,并且返回数据为空,符合预期
执行insert into t1 select 1插入数据,再次执行上面的三条SQL,执行结果都没问题,但第二个SQL执行时间过长:
select * from t1; -- 执行时间0.01s
select * from t1 WHERE id=1; -- 2.00s
SELECT * FROM t1 WHERE id=1 LIMIT 1; -- 0.01s
执行delete from t1 where id=1,然后执行以下SQL:
select * from t1; -- 执行结果为空,符合预期
select * from t1 WHERE id=1; -- 执行结果返回一条数据
SELECT * FROM t1 WHERE id=1 LIMIT 1; -- 执行结果为空,符合预期
select count(*) from t1; -- 返回条数为0,符合预期
总结:
开启行存的情况下:
- 当表里数据为空时,执行select * from t1 WHERE id=1报错
- 当表里有数据(1条)时,执行select * from t1 WHERE id=1耗时2s
- 当数据被删除后,执行select * from t1 WHERE id=1仍然能查出结果