2.0.0版本开启行存模式后查询失败或耗时很长

【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仍然能查出结果