pg_pagecache shows page cache statistics of PostgreSQL's relation files.
It will:
- Connect to the database to fetch relation informations from
pg_classandpg_index - Iterate over relation files with
mincoreto get how many pages are cached - If readable, it reads
/proc/kpageflagesto get page flags and display them (similar topage-types)
Get the latest binary for your architecture:
tag=$(curl -s 'https://api.github.com/repos/bonnefoa/pg_pagecache/releases/latest' | sed -n 's/ *"name": "\(v[0-9]*.[0-9]*.[0-9]*\).*/\1/p')
file="pg_pagecache-${tag}-$(uname)-$(uname -m)"
curl -L "https://github.com/bonnefoa/pg_pagecache/releases/download/${tag}/${file}" -o pg_pagecache
chmod a+x pg_pagecache
Calling pg_pagecache without arguments will attempt to connect to the database using the standard PGHOST, PGUSER and PGDATABASE env vars.
PGDATA will also be used to locate the relation files to scan.
./pg_pagecache
Partition Table Relation Relfilenode Kind PageCached PageCount %Cached %Total
No partition pgbench_accounts pgbench_accounts_pkey 33628 Index 552 Pgs 552 Pgs 100.00 0.03
No partition pgbench_branches pgbench_branches_pkey 33624 Index 4 Pgs 4 Pgs 100.00 0.00
No partition pgbench_tellers pgbench_tellers_pkey 33626 Index 4 Pgs 4 Pgs 100.00 0.00
No partition pgbench_branches pgbench_branches 33621 Relation 2 Pgs 2 Pgs 100.00 0.00
No partition pgbench_tellers pgbench_tellers 33623 Relation 2 Pgs 2 Pgs 100.00 0.00
Total Total 564 Pgs 564 Pgs 100.00 0.03
If /proc/kpageflages is readable, page flags details will be displayed
sudo ./pg_pagecache -connect_str "user=postgres database=postgres host=localhost" -pg_data ~/pg_data
Partition Table Relation Relfilenode Kind PageCached PageCount %Cached %Total
No partition pgbench_accounts pgbench_accounts_pkey 33628 Index 552 Pgs 552 Pgs 100.00 0.03
No partition pg_type pg_type_oid_index 2703 Index 10 Pgs 18 Pgs 55.56 0.00
No partition pg_type pg_type_typname_nsp_index 2704 Index 10 Pgs 26 Pgs 38.46 0.00
No partition pgbench_branches pgbench_branches_pkey 33624 Index 4 Pgs 4 Pgs 100.00 0.00
No partition pgbench_tellers pgbench_tellers_pkey 33626 Index 4 Pgs 4 Pgs 100.00 0.00
No partition pg_statistic pg_toast_2619 2840 TOAST 2 Pgs 16 Pgs 12.50 0.00
No partition pgbench_branches pgbench_branches 33621 Relation 2 Pgs 2 Pgs 100.00 0.00
No partition pgbench_tellers pgbench_tellers 33623 Relation 2 Pgs 2 Pgs 100.00 0.00
Total Total 586 Pgs 624 Pgs 93.91 0.03
Page Flags
Relation Page Count Flags Symbolic Flags Long Symbolic Flags
pgbench_accounts_pkey 550 0x0000000000000028 ___U_l__________________________________________________________ uptodate,lru
pgbench_accounts_pkey 2 0x000000000000002c __RU_l__________________________________________________________ referenced,uptodate,lru
pg_type_oid_index 10 0x000000000000002c __RU_l__________________________________________________________ referenced,uptodate,lru
pg_type_typname_nsp_index 10 0x000000000000002c __RU_l__________________________________________________________ referenced,uptodate,lru
pgbench_branches_pkey 4 0x0000000000000028 ___U_l__________________________________________________________ uptodate,lru
pgbench_tellers_pkey 4 0x0000000000000028 ___U_l__________________________________________________________ uptodate,lru
pg_toast_2619 2 0x000000000000002c __RU_l__________________________________________________________ referenced,uptodate,lru
pgbench_branches 2 0x0000000000000028 ___U_l__________________________________________________________ uptodate,lru
pgbench_tellers 2 0x0000000000000028 ___U_l__________________________________________________________ uptodate,lru
%Total column reports the total usage of the cached memory. Cache memory is extracted from /proc/meminfo.
PostgreSQL own shared_buffers is removed from this total as it is reported in the cache memory and can't be used by the page cache.
This way, %Total shows the relation's memory usage of the page cache memory.