PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

pgFincore 1.2, eine PostgreSQL-Erweiterung

pgFincore 1.2 ist eine PostgreSQL-Erweiterung zum Auditieren und Manipulieren des Datapage-Cache des Betriebssystems. Die Erweiterung hat bereits eine 7-jährige Nutzungsgeschichte mit Entwicklungen, die den Produktionsanforderungen entsprechen.

Laden Sie hier die neueste Version 1.2 herunter, die mit PostgreSQL 9.6 kompatibel ist.

Datencache

Datenseiten-Caching ist ein Vorgang, der „natürlich“ auf mehreren Ebenen der Datenverwaltung stattfindet. Das Ziel ist einfach:Zwischen den physisch auf der Platte aufgezeichneten Daten und der Rückgabe an den Benutzer werden eine Vielzahl von Schichten überlagert. Derzeit verfügt fast jede Datenschicht über eine Abstraktion, um Lese- und Schreibbefehle schneller bereitzustellen. Daher bieten die meisten Festplatten einen Schreib-Cache, der das physische Schreiben verzögert, und einen Lese-Cache, der es ermöglicht, zukünftige Anforderungen zu antizipieren und Daten schneller bereitzustellen. Ein äquivalentes System existiert in SANs, RAID-Karten, Betriebssystemen, Software usw.

PostgreSQL hat natürlich ein eigenes Verwaltungssystem für Schreib- und Lesevorgänge, die gemeinsamen Puffer , die mit der Erweiterung pg_buffercache geprüft werden kann.

Es ist möglich, den Cache des Betriebssystems mit Systemtools und pgFincore zu prüfen portieren Sie dies in PostgreSQL.

Weiterlesen

Die meisten Betriebssysteme optimieren Datenpfade, indem sie ein Vorauslesefenster bereitstellen, das das Vorabladen von Daten in die zwischenspeichern und Anwendungen so schneller zur Verfügung stellen. PostgreSQL enthält mehrere Optimierungen, um dieses Verhalten auf Systemebene zu begünstigen, und bietet auch eine ähnliche Funktionalität mit der Effective_io_concurrency-Option.

Eine Lösung zur Vereinfachung dieser Optimierungen ist die Verwendung von POSIX_FADVISE-Systemaufrufen. Wieder pgFincore Portieren Sie diese Lösung in PostgreSQL.

pgFincore 1.2

Diese Erweiterung erlaubt daher:

  • um genaue Informationen über die Belegung einer Tabelle oder eines Indexes (und einiger anderer von PostgreSQL verwendeter Dateien) im Cache des Systems zu erhalten, das POSIX unterstützt (Linux, BSD, …),
  • Um diesen Cache zu manipulieren:Erstellen Sie eine Karte davon und stellen Sie sie später oder auf einem anderen Server wieder her,
  • Pfade über posix_fadvise-Aufrufe zu optimieren.

pgFincore herunterladen

Debian- und Red Hat-Pakete, die in den Distributionen und für jede Version von PostgreSQL in den Apt PGDG- und RPM PGDG-Repositories verfügbar sind.

Und die Quellen im pgfincore-Git-Repository.

Benötigen Sie Hilfe?

Zusätzlich zum Community-Support können Sie sich an 2ndQuadrant wenden.

Anwendungsbeispiele

Einrichtung

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

Systeminformationen

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

Random Walk optimieren (Read-Ahead-Fenster verkleinern)

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

Optimieren Sie die sequentielle Traversierung (Erhöhung des Read-Ahead-Fensters)

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

Cache-Audit

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

Lade eine Tabelle in den Speicher

# 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

Löschen Sie den Cache einer Tabelle

# 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

Zwischengespeicherte Seiten wiederherstellen

Hier verwenden wir einen Parameter vom Typ Bitstring, der die Seiten darstellt, die aus dem Speicher geladen und entladen werden sollen.

# 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

HINWEIS:Für die Demo werden oben nur 6 Datenseiten behandelt, 1 lädt die Seite, 0 entlädt die Seite.