From e2a141d881f57e1238c4c8ed7e183d3e1d1acf85 Mon Sep 17 00:00:00 2001 From: April01xxx Date: Mon, 23 Oct 2023 17:24:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Deffective=5Fio=5Fconcurrency?= =?UTF-8?q?=E5=8F=96=E5=80=BC=E5=A4=A7=E4=BA=8E1=E6=97=B6=E5=88=86?= =?UTF-8?q?=E5=8C=BA=E8=A1=A8=E5=85=A8=E5=B1=80=E7=B4=A2=E5=BC=95BitmapHea?= =?UTF-8?q?pscan=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runtime/executor/nodeBitmapHeapscan.cpp | 2 +- .../expected/gpi_bitmapscan_prefetch.out | 65 +++++++++++++++++++ src/test/regress/parallel_schedule0 | 2 +- .../regress/sql/gpi_bitmapscan_prefetch.sql | 56 ++++++++++++++++ 4 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 src/test/regress/expected/gpi_bitmapscan_prefetch.out create mode 100644 src/test/regress/sql/gpi_bitmapscan_prefetch.sql diff --git a/src/gausskernel/runtime/executor/nodeBitmapHeapscan.cpp b/src/gausskernel/runtime/executor/nodeBitmapHeapscan.cpp index cf028dbd2..c26ae5c5e 100644 --- a/src/gausskernel/runtime/executor/nodeBitmapHeapscan.cpp +++ b/src/gausskernel/runtime/executor/nodeBitmapHeapscan.cpp @@ -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) { diff --git a/src/test/regress/expected/gpi_bitmapscan_prefetch.out b/src/test/regress/expected/gpi_bitmapscan_prefetch.out new file mode 100644 index 000000000..84b1329ef --- /dev/null +++ b/src/test/regress/expected/gpi_bitmapscan_prefetch.out @@ -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 diff --git a/src/test/regress/parallel_schedule0 b/src/test/regress/parallel_schedule0 index baf5e7410..58610d679 100644 --- a/src/test/regress/parallel_schedule0 +++ b/src/test/regress/parallel_schedule0 @@ -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 diff --git a/src/test/regress/sql/gpi_bitmapscan_prefetch.sql b/src/test/regress/sql/gpi_bitmapscan_prefetch.sql new file mode 100644 index 000000000..ae6a6e73f --- /dev/null +++ b/src/test/regress/sql/gpi_bitmapscan_prefetch.sql @@ -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;