mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-02 02:01:16 +02:00
7f46eaf035
This function cleans up the pending list of the GIN index by moving entries in it to the main GIN data structure in bulk. It returns the number of pages cleaned up from the pending list. This function is useful, for example, when the pending list needs to be cleaned up *quickly* to improve the performance of the search using GIN index. VACUUM can do the same thing, too, but it may take days to run on a large table. Jeff Janes, reviewed by Julien Rouhaud, Jaime Casanova, Alvaro Herrera and me. Discussion: CAMkU=1x8zFkpfnozXyt40zmR3Ub_kHu58LtRmwHUKRgQss7=iQ@mail.gmail.com
37 lines
1.4 KiB
Plaintext
37 lines
1.4 KiB
Plaintext
--
|
|
-- Test GIN indexes.
|
|
--
|
|
-- There are other tests to test different GIN opclassed. This is for testing
|
|
-- GIN itself.
|
|
-- Create and populate a test table with a GIN index.
|
|
create table gin_test_tbl(i int4[]);
|
|
create index gin_test_idx on gin_test_tbl using gin (i) with (fastupdate = on);
|
|
insert into gin_test_tbl select array[1, 2, g] from generate_series(1, 20000) g;
|
|
insert into gin_test_tbl select array[1, 3, g] from generate_series(1, 1000) g;
|
|
select gin_clean_pending_list('gin_test_idx')>10 as many; -- flush the fastupdate buffers
|
|
many
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
insert into gin_test_tbl select array[3, 1, g] from generate_series(1, 1000) g;
|
|
vacuum gin_test_tbl; -- flush the fastupdate buffers
|
|
select gin_clean_pending_list('gin_test_idx'); -- nothing to flush
|
|
gin_clean_pending_list
|
|
------------------------
|
|
0
|
|
(1 row)
|
|
|
|
-- Test vacuuming
|
|
delete from gin_test_tbl where i @> array[2];
|
|
vacuum gin_test_tbl;
|
|
-- Disable fastupdate, and do more insertions. With fastupdate enabled, most
|
|
-- insertions (by flushing the list pages) cause page splits. Without
|
|
-- fastupdate, we get more churn in the GIN data leaf pages, and exercise the
|
|
-- recompression codepaths.
|
|
alter index gin_test_idx set (fastupdate = off);
|
|
insert into gin_test_tbl select array[1, 2, g] from generate_series(1, 1000) g;
|
|
insert into gin_test_tbl select array[1, 3, g] from generate_series(1, 1000) g;
|
|
delete from gin_test_tbl where i @> array[2];
|
|
vacuum gin_test_tbl;
|