Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How large is a "buffer" in PostgreSQL

I am using pg_buffercache module for finding hogs eating up my RAM cache. For example when I run this query:

SELECT c.relname, count(*) AS buffers
FROM pg_buffercache b INNER JOIN pg_class c
    ON b.relfilenode = c.relfilenode AND
       b.reldatabase IN (0, (SELECT oid FROM pg_database WHERE datname = current_database()))
GROUP BY c.relname
ORDER BY 2 DESC
LIMIT 10;

I discover that sample_table is using 120 buffers.

How much is 120 buffers in bytes?

like image 700
Konrad Garus Avatar asked Nov 14 '22 10:11

Konrad Garus


1 Answers

PostgreSQL has a hard coded block size of 8192 bytes -- see the pre-defined block_size variable. This used to be a number to hold in mind whenever you edited the config to specify shared_buffers, etc., but the config now supports suffixes like MB which will do the conversion for you.

It is possible, with hard work, to change block_size to other values. For a minority of applications there might be a more optimal size, but the number of places the code makes an assumption about the size is large.

like image 84
Edmund Avatar answered Dec 25 '22 12:12

Edmund