sql >> Databasteknik >  >> RDS >> PostgreSQL

pgFincore 1.2, en PostgreSQL-tillägg

pgFincore 1.2 är ett PostgreSQL-tillägg för granskning och manipulering av operativsystemets datasidecache. Tillägget har redan en historia av 7 års användning, med utvecklingar som motsvarar produktionsbehov.

Ladda ner den senaste versionen 1.2, kompatibel med PostgreSQL 9.6.

Datacache

Cachning av datasidor är en operation som sker "naturligt", på flera nivåer inom datahantering. Syftet är enkelt:en mängd lager överlagras mellan data som fysiskt registreras på disken och återställandet till användaren. För närvarande har nästan varje datalager en abstraktion för att tjäna läs- och skrivkommandon snabbare. Således erbjuder majoriteten av hårddiskarna en skrivcache, som fördröjer fysisk skrivning, och en läscache som gör att du kan förutse framtida förfrågningar och betjäna data snabbare. Ett likvärdigt system finns i SAN, RAID-kort, operativsystem, programvara etc.

PostgreSQL har naturligtvis ett eget hanteringssystem för skrivning och läsning, de delade buffertarna , som kan granskas med tillägget pg_buffercache.

Det är möjligt att granska operativsystemets cache med systemverktyg och pgFincore porta detta i PostgreSQL.

Läs vidare

De flesta operativsystem optimerar datavägar genom att tillhandahålla ett läsfönster, vilket gör det möjligt att förinläsa data i cache och därmed tillhandahålla den snabbare till applikationer. PostgreSQL innehåller flera optimeringar för att gynna detta beteende på systemnivå, och har också liknande funktionalitet med alternativet effective_io_concurrency.

En lösning för att underlätta dessa optimeringar är att använda POSIX_FADVISE systemanrop. Återigen pgFincore porta den här lösningen i PostgreSQL.

pgFincore 1.2

Detta tillägg tillåter därför:

  • för att få exakt information om ockupationen av en tabell eller ett index (och några andra filer som används av PostgreSQL) i cachen för systemet som stöder POSIX (linux, BSD, …),
  • för att manipulera denna cache:gör en karta över den och återställ den senare eller på en annan server,
  • för att optimera sökvägar via posix_fadvise-anrop.

Hämta pgFincore

Debian- och Red Hat-paketen tillgängliga i distributionerna och för varje version av PostgreSQL på Apt PGDG- och RPM PGDG-förråden.

Och källorna på pgfincore git-förvaret.

Behöver du hjälp?

Förutom communitysupport kan du kontakta 2ndQuadrant.

Exempel på användning

Inställningar

$ sudo apt-get install postgresql-9.6-pgfincore
$ psql -c 'CREATE EXTENSION pgfincore;'

Systeminformation

# select * from pgsysconf_pretty();
 os_page_size | os_pages_free | os_total_pages 
--------------+---------------+----------------
 4096 bytes   | 314 MB        | 16 GB

Optimera den slumpmässiga promenaden (minska läsfönstret)

# select * from pgfadvise_random('pgbench_accounts_pkey');
          relpath | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/24980 | 4096         | 2            | 1853808

Optimera den sekventiella genomgången (ökning av läsfönstret)

# select * from pgfadvise_sequential('pgbench_accounts');
 relpath          | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/25676 | 4096         | 3176         | 1829288

Cachegranskning

# 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 | 

Ladda in en tabell i minnet

# 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

Rensa cachen för en tabell

# 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

Återställ cachade sidor

Här använder vi en parameter av typen bitsträng som representerar sidorna som ska laddas och laddas ur från minnet.

# 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

OBS:för demon hanteras endast 6 datasidor ovan, 1 laddar sidan, 0 laddar ner sidan.


  1. Implementering av SQL Server Performance Indicator för frågor, lagrade procedurer och triggers

  2. Hur får man tid för att skapa databas i PostgreSQL 9.0?

  3. PARTITION BY med och utan KEEP i Oracle

  4. Hämtar en rad, en kolumn med PDO