Skip to content

Commit 7369798

Browse files
committed
Fix tracking of temp table relation extensions as writes
Karina figured out that I (Andres) confused BufferUsage.temp_blks_written with BufferUsage.local_blks_written in fcdda1e. Tests in core PG can't easily test this, as BufferUsage is just used for EXPLAIN (ANALYZE, BUFFERS) and pg_stat_statements. Thus this commit adds tests for this to pg_stat_statements. Reported-by: Karina Litskevich <[email protected]> Author: Karina Litskevich <[email protected]> Author: Andres Freund <[email protected]> Discussion: https://postgr.es/m/CACiT8ibxXA6+0amGikbeFhm8B84XdQVo6D0Qfd1pQ1s8zpsnxQ@mail.gmail.com Backpatch: 16-, where fcdda1e was merged
1 parent a0d87bc commit 7369798

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

contrib/pg_stat_statements/expected/dml.out

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,33 @@ SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
139139
1 | 1 | SELECT pg_stat_statements_reset()
140140
(10 rows)
141141

142+
-- check that [temp] table relation extensions are tracked as writes
143+
CREATE TABLE pgss_extend_tab (a int, b text);
144+
CREATE TEMP TABLE pgss_extend_temp_tab (a int, b text);
145+
SELECT pg_stat_statements_reset();
146+
pg_stat_statements_reset
147+
--------------------------
148+
149+
(1 row)
150+
151+
INSERT INTO pgss_extend_tab (a, b) SELECT generate_series(1, 1000), 'something';
152+
INSERT INTO pgss_extend_temp_tab (a, b) SELECT generate_series(1, 1000), 'something';
153+
WITH sizes AS (
154+
SELECT
155+
pg_relation_size('pgss_extend_tab') / current_setting('block_size')::int8 AS rel_size,
156+
pg_relation_size('pgss_extend_temp_tab') / current_setting('block_size')::int8 AS temp_rel_size
157+
)
158+
SELECT
159+
SUM(local_blks_written) >= (SELECT temp_rel_size FROM sizes) AS temp_written_ok,
160+
SUM(local_blks_dirtied) >= (SELECT temp_rel_size FROM sizes) AS temp_dirtied_ok,
161+
SUM(shared_blks_written) >= (SELECT rel_size FROM sizes) AS written_ok,
162+
SUM(shared_blks_dirtied) >= (SELECT rel_size FROM sizes) AS dirtied_ok
163+
FROM pg_stat_statements;
164+
temp_written_ok | temp_dirtied_ok | written_ok | dirtied_ok
165+
-----------------+-----------------+------------+------------
166+
t | t | t | t
167+
(1 row)
168+
142169
SELECT pg_stat_statements_reset();
143170
pg_stat_statements_reset
144171
--------------------------

contrib/pg_stat_statements/sql/dml.sql

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,23 @@ MERGE INTO pgss_dml_tab USING pgss_dml_tab st ON (st.a = pgss_dml_tab.a AND st.a
7373
DROP TABLE pgss_dml_tab;
7474

7575
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
76+
77+
-- check that [temp] table relation extensions are tracked as writes
78+
CREATE TABLE pgss_extend_tab (a int, b text);
79+
CREATE TEMP TABLE pgss_extend_temp_tab (a int, b text);
80+
SELECT pg_stat_statements_reset();
81+
INSERT INTO pgss_extend_tab (a, b) SELECT generate_series(1, 1000), 'something';
82+
INSERT INTO pgss_extend_temp_tab (a, b) SELECT generate_series(1, 1000), 'something';
83+
WITH sizes AS (
84+
SELECT
85+
pg_relation_size('pgss_extend_tab') / current_setting('block_size')::int8 AS rel_size,
86+
pg_relation_size('pgss_extend_temp_tab') / current_setting('block_size')::int8 AS temp_rel_size
87+
)
88+
SELECT
89+
SUM(local_blks_written) >= (SELECT temp_rel_size FROM sizes) AS temp_written_ok,
90+
SUM(local_blks_dirtied) >= (SELECT temp_rel_size FROM sizes) AS temp_dirtied_ok,
91+
SUM(shared_blks_written) >= (SELECT rel_size FROM sizes) AS written_ok,
92+
SUM(shared_blks_dirtied) >= (SELECT rel_size FROM sizes) AS dirtied_ok
93+
FROM pg_stat_statements;
94+
7695
SELECT pg_stat_statements_reset();

src/backend/storage/buffer/localbuf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ ExtendBufferedRelLocal(BufferManagerRelation bmr,
431431

432432
*extended_by = extend_by;
433433

434-
pgBufferUsage.temp_blks_written += extend_by;
434+
pgBufferUsage.local_blks_written += extend_by;
435435

436436
return first_block;
437437
}

0 commit comments

Comments
 (0)