diff options
| author | Heikki Linnakangas | 2019-03-22 11:21:20 +0000 |
|---|---|---|
| committer | Heikki Linnakangas | 2019-03-22 11:21:45 +0000 |
| commit | 7df159a620b760e289f1795b13542ed1b3e13b87 (patch) | |
| tree | e4ca41fc59cf7263e32264791617b9ae5a2dca8e /src/test | |
| parent | df816f6ad532ad685a3897869a2e64d3a53fe312 (diff) | |
Delete empty pages during GiST VACUUM.
To do this, we scan GiST two times. In the first pass we make note of
empty leaf pages and internal pages. At second pass we scan through
internal pages, looking for downlinks to the empty pages.
Deleting internal pages is still not supported, like in nbtree, the last
child of an internal page is never deleted. That means that if you have a
workload where new keys are always inserted to different area than where
old keys are removed, the index will still grow without bound. But the rate
of growth will be an order of magnitude slower than before.
Author: Andrey Borodin
Discussion: https://www.postgresql.org/message-id/B1E4DF12-6CD3-4706-BDBD-BF3283328F60@yandex-team.ru
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/gist.out | 6 | ||||
| -rw-r--r-- | src/test/regress/sql/gist.sql | 6 |
2 files changed, 4 insertions, 8 deletions
diff --git a/src/test/regress/expected/gist.out b/src/test/regress/expected/gist.out index f5a2993aaf2..0a43449f003 100644 --- a/src/test/regress/expected/gist.out +++ b/src/test/regress/expected/gist.out @@ -27,10 +27,8 @@ insert into gist_point_tbl (id, p) select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g; -- To test vacuum, delete some entries from all over the index. delete from gist_point_tbl where id % 2 = 1; --- And also delete some concentration of values. (GiST doesn't currently --- attempt to delete pages even when they become empty, but if it did, this --- would exercise it) -delete from gist_point_tbl where id < 10000; +-- And also delete some concentration of values. +delete from gist_point_tbl where id > 5000; vacuum analyze gist_point_tbl; -- rebuild the index with a different fillfactor alter index gist_pointidx SET (fillfactor = 40); diff --git a/src/test/regress/sql/gist.sql b/src/test/regress/sql/gist.sql index bae722fe13c..657b1954847 100644 --- a/src/test/regress/sql/gist.sql +++ b/src/test/regress/sql/gist.sql @@ -28,10 +28,8 @@ select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g; -- To test vacuum, delete some entries from all over the index. delete from gist_point_tbl where id % 2 = 1; --- And also delete some concentration of values. (GiST doesn't currently --- attempt to delete pages even when they become empty, but if it did, this --- would exercise it) -delete from gist_point_tbl where id < 10000; +-- And also delete some concentration of values. +delete from gist_point_tbl where id > 5000; vacuum analyze gist_point_tbl; |
