pgFincore 1.2 je rozšíření PostgreSQL pro auditování a manipulaci s mezipamětí datových stránek operačního systému. Rozšíření má již za sebou 7 let používání, přičemž vývoj odpovídá potřebám výroby.
Zde si stáhněte nejnovější verzi 1.2, kompatibilní s PostgreSQL 9.6.
Datová mezipaměť
Ukládání datových stránek do mezipaměti je operace, která se děje „přirozeně“ na několika úrovních správy dat. Objekt je jednoduchý:mezi daty fyzicky zaznamenanými na disku a restitucí uživateli je překryto množství vrstev. V současné době má téměř každá datová vrstva abstrakci, která umožňuje rychlejší poskytování příkazů pro čtení a zápis. Většina pevných disků tedy nabízí mezipaměť pro zápis, která zpožďuje fyzický zápis, a mezipaměť pro čtení, která vám umožňuje předvídat budoucí požadavky a rychleji obsluhovat data. Ekvivalentní systém existuje v sítích SAN, RAID kartách, operačních systémech, softwaru atd.
PostgreSQL má samozřejmě svůj vlastní systém správy pro zápisy a čtení, sdílené vyrovnávací paměti , který lze auditovat pomocí rozšíření pg_buffercache.
Je možné auditovat mezipaměť operačního systému pomocí systémových nástrojů a pgFincore port to v PostgreSQL.
Číst dopředu
Většina operačních systémů optimalizuje datové cesty tím, že poskytuje okno pro čtení dopředu, což umožňuje předem načíst data do cache a tím ji rychleji poskytovat aplikacím. PostgreSQL obsahuje několik optimalizací, které upřednostňují toto chování na systémové úrovni, a také nese podobnou funkcionalitu s možností effect_io_concurrency.
Jedním z řešení pro usnadnění těchto optimalizací je použití systémových volání POSIX_FADVISE. Opět pgFincore portovat toto řešení v PostgreSQL.
pgFincore 1.2
Toto rozšíření tedy umožňuje:
- získat přesné informace o obsazení tabulky nebo indexu (a některých dalších souborů používaných PostgreSQL) v mezipaměti systému podporujícího POSIX (linux, BSD, …),
- pro manipulaci s touto mezipamětí:vytvořte její mapu a obnovte ji později nebo na jiném serveru,
- pro optimalizaci cest pomocí volání posix_fadvise.
Získejte pgFincore
Balíčky Debian a Red Hat dostupné v distribucích a pro každou verzi PostgreSQL v repozitářích Apt PGDG a RPM PGDG.
A zdroje v repozitáři pgfincore git.
Potřebujete pomoc?
Kromě podpory komunity můžete kontaktovat 2ndQuadrant.
Příklady použití
Nastavení
$ sudo apt-get install postgresql-9.6-pgfincore $ psql -c 'CREATE EXTENSION pgfincore;'
Informace o systému
# select * from pgsysconf_pretty(); os_page_size | os_pages_free | os_total_pages --------------+---------------+---------------- 4096 bytes | 314 MB | 16 GB
Optimalizujte náhodnou procházku (zmenšete okno pro čtení dopředu)
# select * from pgfadvise_random('pgbench_accounts_pkey'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/24980 | 4096 | 2 | 1853808
Optimalizace sekvenčního procházení (zvětšení okna pro čtení dopředu)
# select * from pgfadvise_sequential('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/25676 | 4096 | 3176 | 1829288
Audit mezipaměti
# select * from pgfincore('pgbench_accounts'); relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit --------------------+---------+--------------+--------------+-----------+-----------+---------------+--------- base/11874/16447 | 0 | 4096 | 262144 | 3 | 1 | 408444 | base/11874/16447.1 | 1 | 4096 | 65726 | 0 | 0 | 408444 |
Načíst tabulku do paměti
# select * from pgfadvise_willneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 80650 base/11874/16447.1 | 4096 | 65726 | 80650
Vymažte mezipaměť tabulky
# select * from pgfadvise_dontneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 342071 base/11874/16447.1 | 4096 | 65726 | 408103
Obnovit stránky uložené v mezipaměti
Zde používáme parametr typu bit-string představující stránky, které se mají načíst a uvolnit z paměti.
# select * from pgfadvise_loader('pgbench_accounts', 0, true, true, B'101001'); -- Varbit décrivant les pages à manipuler relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded ------------------+--------------+---------------+--------------+---------------- base/11874/16447 | 4096 | 408376 | 3 | 3
POZNÁMKA:pro ukázku je výše zpracováno pouze 6 datových stránek, 1 načte stránku, 0 stránku uvolní.