mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Revert "Avoid the creation of the free space map for small heap relations".
This feature was using a process local map to track the first few blocks in the relation. The map was reset each time we get the block with enough freespace. It was discussed that it would be better to track this map on a per-relation basis in relcache and then invalidate the same whenever vacuum frees up some space in the page or when FSM is created. The new design would be better both in terms of API design and performance. List of commits reverted, in reverse chronological order:06c8a5090e
Improve code comments inb0eaa4c51b
.13e8643bfc
During pg_upgrade, conditionally skip transfer of FSMs.6f918159a9
Add more tests for FSM.9c32e4c350
Clear the local map when not used.29d108cdec
Update the documentation for FSM behavior..08ecdfe7e5
Make FSM test portable.b0eaa4c51b
Avoid creation of the free space map for small heap relations. Discussion: https://postgr.es/m/20190416180452.3pm6uegx54iitbt5@alap3.anarazel.de
This commit is contained in:
@ -1,36 +1,26 @@
|
||||
CREATE EXTENSION pageinspect;
|
||||
|
||||
CREATE TABLE test_rel_forks (a int);
|
||||
-- Make sure there are enough blocks in the heap for the FSM to be created.
|
||||
INSERT INTO test_rel_forks SELECT i from generate_series(1,2000) i;
|
||||
CREATE TABLE test1 (a int, b int);
|
||||
INSERT INTO test1 VALUES (16777217, 131584);
|
||||
|
||||
-- set up FSM and VM
|
||||
VACUUM test_rel_forks;
|
||||
VACUUM test1; -- set up FSM
|
||||
|
||||
-- The page contents can vary, so just test that it can be read
|
||||
-- successfully, but don't keep the output.
|
||||
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'main', 0)) AS main_0;
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'main', 100)) AS main_100;
|
||||
SELECT octet_length(get_raw_page('test1', 'main', 0)) AS main_0;
|
||||
SELECT octet_length(get_raw_page('test1', 'main', 1)) AS main_1;
|
||||
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'fsm', 0)) AS fsm_0;
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'fsm', 20)) AS fsm_20;
|
||||
SELECT octet_length(get_raw_page('test1', 'fsm', 0)) AS fsm_0;
|
||||
SELECT octet_length(get_raw_page('test1', 'fsm', 1)) AS fsm_1;
|
||||
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'vm', 0)) AS vm_0;
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'vm', 1)) AS vm_1;
|
||||
SELECT octet_length(get_raw_page('test1', 'vm', 0)) AS vm_0;
|
||||
SELECT octet_length(get_raw_page('test1', 'vm', 1)) AS vm_1;
|
||||
|
||||
SELECT octet_length(get_raw_page('xxx', 'main', 0));
|
||||
SELECT octet_length(get_raw_page('test_rel_forks', 'xxx', 0));
|
||||
SELECT octet_length(get_raw_page('test1', 'xxx', 0));
|
||||
|
||||
EXPLAIN (costs off, analyze on, timing off, summary off) SELECT * FROM
|
||||
fsm_page_contents(get_raw_page('test_rel_forks', 'fsm', 0));
|
||||
|
||||
SELECT get_raw_page('test_rel_forks', 0) = get_raw_page('test_rel_forks', 'main', 0);
|
||||
|
||||
DROP TABLE test_rel_forks;
|
||||
|
||||
CREATE TABLE test1 (a int, b int);
|
||||
INSERT INTO test1 VALUES (16777217, 131584);
|
||||
SELECT get_raw_page('test1', 0) = get_raw_page('test1', 'main', 0);
|
||||
|
||||
SELECT pagesize, version FROM page_header(get_raw_page('test1', 0));
|
||||
|
||||
@ -39,6 +29,8 @@ SELECT page_checksum(get_raw_page('test1', 0), 0) IS NOT NULL AS silly_checksum_
|
||||
SELECT tuple_data_split('test1'::regclass, t_data, t_infomask, t_infomask2, t_bits)
|
||||
FROM heap_page_items(get_raw_page('test1', 0));
|
||||
|
||||
SELECT * FROM fsm_page_contents(get_raw_page('test1', 'fsm', 0));
|
||||
|
||||
DROP TABLE test1;
|
||||
|
||||
-- check that using any of these functions with a partitioned table or index
|
||||
|
Reference in New Issue
Block a user