Extension Enhancement: Buffer Invalidation in pg_buffercache - Mailing list pgsql-hackers
From | Palak Chaturvedi |
---|---|
Subject | Extension Enhancement: Buffer Invalidation in pg_buffercache |
Date | |
Msg-id | CALfch19pW48ZwWzUoRSpsaV9hqt0UPyaBPC4bOZ4W+c7FF566A@mail.gmail.com Whole thread Raw |
Responses |
Re: Extension Enhancement: Buffer Invalidation in pg_buffercache
Re: Extension Enhancement: Buffer Invalidation in pg_buffercache |
List | pgsql-hackers |
I hope this email finds you well. I am excited to share that I have extended the functionality of the `pg_buffercache` extension by implementing buffer invalidation capability, as requested by some PostgreSQL contributors for improved testing scenarios. This marks my first time submitting a patch to pgsql-hackers, and I am eager to receive your expert feedback on the changes made. Your insights are invaluable, and any review or comments you provide will be greatly appreciated. The primary objective of this enhancement is to enable explicit buffer invalidation within the `pg_buffercache` extension. By doing so, we can simulate scenarios where buffers are invalidated and observe the resulting behavior in PostgreSQL. As part of this patch, a new function or mechanism has been introduced to facilitate buffer invalidation. I would like to hear your thoughts on whether this approach provides a good user interface for this functionality. Additionally, I seek your evaluation of the buffer locking protocol employed in the extension to ensure its correctness and efficiency. Please note that I plan to add comprehensive documentation once the details of this enhancement are agreed upon. This documentation will serve as a valuable resource for users and contributors alike. I believe that your expertise will help uncover any potential issues and opportunities for further improvement. I have attached the patch file to this email for your convenience. Your valuable time and consideration in reviewing this extension are sincerely appreciated. Thank you for your continued support and guidance. I am looking forward to your feedback and collaboration in enhancing the PostgreSQL ecosystem. The working of the extension: 1. Creating the extension pg_buffercache and then call select query on a table and note the buffer to be cleared. pgbench=# create extension pg_buffercache; CREATE EXTENSION pgbench=# select count(*) from pgbench_accounts; count -------- 100000 (1 row) pgbench=# SELECT * FROM pg_buffercache WHERE relfilenode = pg_relation_filenode('pgbench_accounts'::regclass); bufferid | relfilenode | reltablespace | reldatabase | relforknumber | relblocknumber | isdirty | usagecount | pinning_backends ----------+-------------+---------------+-------------+---------------+----------------+---------+------------+------------------ 233 | 16397 | 1663 | 16384 | 0 | 0 | f | 1 | 0 234 | 16397 | 1663 | 16384 | 0 | 1 | f | 1 | 0 235 | 16397 | 1663 | 16384 | 0 | 2 | f | 1 | 0 236 | 16397 | 1663 | 16384 | 0 | 3 | f | 1 | 0 237 | 16397 | 1663 | 16384 | 0 | 4 | f | 1 | 0 2. Clearing a single buffer by entering the bufferid. pgbench=# SELECT count(*) FROM pg_buffercache WHERE relfilenode = pg_relation_filenode('pgbench_accounts'::regclass); count ------- 1660 (1 row) pgbench=# select pg_buffercache_invalidate(233); pg_buffercache_invalidate --------------------------- t (1 row) pgbench=# SELECT count(*) FROM pg_buffercache WHERE relfilenode = pg_relation_filenode('pgbench_accounts'::regclass); count ------- 1659 (1 row) 3. Clearing the entire buffer for a relation using the function. pgbench=# SELECT count(*) FROM pg_buffercache WHERE relfilenode = pg_relation_filenode('pgbench_accounts'::regclass); count ------- 1659 (1 row) pgbench=# select count(pg_buffercache_invalidate(bufferid)) from pg_buffercache where relfilenode = pg_relation_filenode('pgbench_accounts'::regclass); count ------- 1659 (1 row) pgbench=# SELECT count(*) FROM pg_buffercache WHERE relfilenode = pg_relation_filenode('pgbench_accounts'::regclass); count ------- 0 (1 row) Best regards, Palak
Attachment
pgsql-hackers by date: