[PATCH]pg_buffercache add a buffer state column, Add fuction to decode buffer state

From: "Moon Insung" <Moon_Insung_i3(at)lab(dot)ntt(dot)co(dot)jp>
To: "'PostgreSQL Hackers'" <pgsql-hackers(at)postgresql(dot)org>
Subject: [PATCH]pg_buffercache add a buffer state column, Add fuction to decode buffer state
Date: 2017-11-14 08:57:00
Message-ID: 001601d35d26$89b8dad0$9d2a9070$@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Dear Hackers.

I'm studied PostgreSQL buffers for the development of new patches.
In particular, using pg_buffercache, is can easily check the status of actual buffer.

Bur there was one inconvenience.
Pg_buffercache was also to check only the dirty state of the buffer.

State of the buffer currently represents 10 states.
Therefore, it seems impossible to check remaining 9 state.

So I add a state column to pg_buffercache view so that I could print a value indicating the state of the buffer.
This is outpu as an unit32 type, and examples are shown below.

-----
postgres=# select * from pg_buffercache where bufferid = 1;
-[ RECORD 1 ]----+-----------
bufferid | 1
relfilenode | 1262
reltablespace | 1664
reldatabase | 0
relforknumber | 0
relblocknumber | 0
isdirty | f
usagecount | 5
pinning_backends | 0
buffer_state | 2203320320 <- it's a new column
-----

With the patches, user can check status values and check the status of the buffers.

However, if do not know source code, or do not know hex values,
It's difficult or impossible to check the actual state even using this patch.

Therefore, add a new function to improve readability when checking state.
When you input a value for state, this function prints out what the actual state.

Examples of actual use are as follows.

-----
postgres=# SELECT bufferid, relfilenode, state_text FROM pg_buffercache,
LATERAL pg_buffercache_state_print(buffer_state) M(state_text)
WHERE bufferid < 10;
bufferid | relfilenode | state_text
----------+-------------+-------------------------------------------------------
1 | 1262 | {LOCKED,VALID,TAG_VALID,PERMANENT}
2 | 1260 | {LOCKED,VALID,TAG_VALID,PERMANENT}
3 | 1259 | {LOCKED,DIRTY,VALID,TAG_VALID,JUST_DIRTIED,PERMANENT}
4 | 1259 | {LOCKED,VALID,TAG_VALID,PERMANENT}
5 | 1259 | {LOCKED,VALID,TAG_VALID,PERMANENT}
6 | 1249 | {LOCKED,VALID,TAG_VALID,PERMANENT}
7 | 1249 | {LOCKED,VALID,TAG_VALID,PERMANENT}
8 | 1249 | {LOCKED,VALID,TAG_VALID,PERMANENT}
9 | 1249 | {LOCKED,VALID,TAG_VALID,PERMANENT}
(9 rows)
-----

If you use this patch, I think that you can easily judge the state of the buffer.

Regards.
Moon.

Attachment Content-Type Size
pg_buffercache add a buffer state column and Add function to decode buffer state_V1.diff application/octet-stream 11.4 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Golub 2017-11-14 08:58:04 Re: Migration to PGLister - After
Previous Message Michael Paquier 2017-11-14 08:55:45 Re: [JDBC] [HACKERS] Channel binding support for SCRAM-SHA-256