修复effective_io_concurrency取值大于1时分区表全局索引BitmapHeapscan报错的问题。
This commit is contained in:
@ -1303,10 +1303,10 @@ void BitmapHeapPrefetchNext(
|
||||
Oid oldOid = GPIGetCurrPartOid(node->gpi_scan);
|
||||
int2 oldBktId = cbi_get_current_bucketid(node->cbi_scan);
|
||||
Relation oldheap = NULL;
|
||||
Relation prefetchRel = scan->rs_rd;
|
||||
|
||||
while (node->prefetch_pages < node->prefetch_target) {
|
||||
TBMIterateResult* tbmpre = tbm_iterate(*prefetch_iterator);
|
||||
Relation prefetchRel = scan->rs_rd;
|
||||
hpscan = (tbm_is_crossbucket(node->tbm) ? (HBktTblScanDesc)node->ss.ss_currentScanDesc : NULL);
|
||||
|
||||
if (tbmpre == NULL) {
|
||||
|
||||
65
src/test/regress/expected/gpi_bitmapscan_prefetch.out
Normal file
65
src/test/regress/expected/gpi_bitmapscan_prefetch.out
Normal file
@ -0,0 +1,65 @@
|
||||
create schema gpi_bitmapscan_prefetch;
|
||||
set search_path to gpi_bitmapscan_prefetch;
|
||||
|
||||
CREATE TABLE gpi_bitmap_table1
|
||||
(
|
||||
c1 int,
|
||||
c2 int,
|
||||
c3 int,
|
||||
c4 text
|
||||
)
|
||||
partition by range (c1)
|
||||
(
|
||||
partition p0_gpi_bitmap_table1 VALUES less than (100),
|
||||
partition p1_gpi_bitmap_table1 VALUES less than (200)
|
||||
);
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 50, 70, 50, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 50, 80, 50, md5(random()::text)
|
||||
FROM generate_series(1,200) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 50, 70, 50, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 50, 150, 'explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;'
|
||||
FROM generate_series(1,800000) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 70, 150, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 80, 150, md5(random()::text)
|
||||
FROM generate_series(2,100) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 70, 150, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
SET maintenance_work_mem = '1GB';
|
||||
CREATE INDEX idx2_gpi_bitmap_table1 ON gpi_bitmap_table1 (c2) GLOBAL;
|
||||
RESET maintenance_work_mem;
|
||||
|
||||
SET effective_io_concurrency = 200;
|
||||
SET enable_seqscan = off;
|
||||
SET enable_indexscan = off;
|
||||
SELECT c2 FROM gpi_bitmap_table1 WHERE c2 = 70;
|
||||
c2
|
||||
----
|
||||
70
|
||||
70
|
||||
70
|
||||
70
|
||||
(4 rows)
|
||||
|
||||
RESET effective_io_concurrency;
|
||||
RESET enable_seqscan;
|
||||
RESET enable_indexscan;
|
||||
drop schema gpi_bitmapscan_prefetch cascade;
|
||||
NOTICE: drop cascades to table gpi_bitmap_table1
|
||||
@ -346,7 +346,7 @@ test: gpi_index
|
||||
test: gpi_index_only
|
||||
|
||||
# gpi bitmap
|
||||
test: gpi_bitmapscan
|
||||
test: gpi_bitmapscan gpi_bitmapscan_prefetch
|
||||
|
||||
# gpi pwj
|
||||
test: gpi_pwj
|
||||
|
||||
56
src/test/regress/sql/gpi_bitmapscan_prefetch.sql
Normal file
56
src/test/regress/sql/gpi_bitmapscan_prefetch.sql
Normal file
@ -0,0 +1,56 @@
|
||||
create schema gpi_bitmapscan_prefetch;
|
||||
set search_path to gpi_bitmapscan_prefetch;
|
||||
|
||||
CREATE TABLE gpi_bitmap_table1
|
||||
(
|
||||
c1 int,
|
||||
c2 int,
|
||||
c3 int,
|
||||
c4 text
|
||||
)
|
||||
partition by range (c1)
|
||||
(
|
||||
partition p0_gpi_bitmap_table1 VALUES less than (100),
|
||||
partition p1_gpi_bitmap_table1 VALUES less than (200)
|
||||
);
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 50, 70, 50, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 50, 80, 50, md5(random()::text)
|
||||
FROM generate_series(1,200) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 50, 70, 50, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 50, 150, 'explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;explain analyze SELECT * FROM gpi_bitmap_table1 WHERE c2 = 70;'
|
||||
FROM generate_series(1,800000) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 70, 150, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 80, 150, md5(random()::text)
|
||||
FROM generate_series(2,100) r;
|
||||
|
||||
INSERT INTO gpi_bitmap_table1
|
||||
SELECT 150, 70, 150, md5(random()::text)
|
||||
FROM generate_series(1,1) r;
|
||||
|
||||
SET maintenance_work_mem = '1GB';
|
||||
CREATE INDEX idx2_gpi_bitmap_table1 ON gpi_bitmap_table1 (c2) GLOBAL;
|
||||
RESET maintenance_work_mem;
|
||||
|
||||
SET effective_io_concurrency = 200;
|
||||
SET enable_seqscan = off;
|
||||
SET enable_indexscan = off;
|
||||
SELECT c2 FROM gpi_bitmap_table1 WHERE c2 = 70;
|
||||
RESET effective_io_concurrency;
|
||||
RESET enable_seqscan;
|
||||
RESET enable_indexscan;
|
||||
drop schema gpi_bitmapscan_prefetch cascade;
|
||||
Reference in New Issue
Block a user