sql >> Databáze >  >> RDS >> PostgreSQL

pgFincore 1.2, rozšíření PostgreSQL

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í.


  1. Jak obejít MySQL Chyba tabulky nelze znovu otevřít

  2. Jak získat sloupec primárního klíče v Oracle?

  3. Jak dám každému registrovanému uživateli jeho vlastní URL pomocí PHP?

  4. Jak vygenerovat pole automatického přírůstku ve výběrovém dotazu