Vor sechs Monaten â einen öffentlichen fĂŒr PostgreSQL.

In den vergangenen Monaten haben wir darĂŒber , einen zusammenfassenden auf der Grundlage der Empfehlungen, die er liefert⊠aber das Wichtigste ist, dass wir Ihr Feedback gesammelt und die realen AnwendungsfĂ€lle verfolgt haben.
Und jetzt sind wir bereit, ĂŒber die neuen Möglichkeiten zu berichten, die Sie nutzen können.
UnterstĂŒtzung verschiedener Planformatierungen
Plan aus dem Log, zusammen mit der Anfrage
Markieren Sie direkt aus der Konsole den gesamten Block, beginnend mit der Zeile mit Query Text, mit allen fĂŒhrenden Leerzeichen:
Query Text: INSERT INTO dicquery_20200604 VALUES ($1.*) ON CONFLICT (query)
DO NOTHING;
Insert on dicquery_20200604 (cost=0.00..0.05 rows=1 width=52) (actual time=40.376..40.376 rows=0 loops=1)
Conflict Resolution: NOTHING
Conflict Arbiter Indexes: dicquery_20200604_pkey
Tuples Inserted: 1
Conflicting Tuples: 0
Buffers: shared hit=9 read=1 dirtied=1
-> Result (cost=0.00..0.05 rows=1 width=52) (actual time=0.001..0.001 rows=1 loops=1)
⊠und fĂŒgen alles kopierte direkt ins Planfeld ein, ohne es zu trennen:

Am Ende erhalten wir zusĂ€tzlich zum zerlegten Plan auch einen Tab âKontextâ, in dem unsere Anfrage in vollem Umfang dargestellt ist:

JSON und YAML
EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT * FROM pg_class;"[
{
"Plan": {
"Node Type": "Seq Scan",
"Parallel Aware": false,
"Relation Name": "pg_class",
"Alias": "pg_class",
"Startup Cost": 0.00,
"Total Cost": 1336.20,
"Plan Rows": 13804,
"Plan Width": 539,
"Actual Startup Time": 0.006,
"Actual Total Time": 1.838,
"Actual Rows": 10266,
"Actual Loops": 1,
"Shared Hit Blocks": 646,
"Shared Read Blocks": 0,
"Shared Dirtied Blocks": 0,
"Shared Written Blocks": 0,
"Local Hit Blocks": 0,
"Local Read Blocks": 0,
"Local Dirtied Blocks": 0,
"Local Written Blocks": 0,
"Temp Read Blocks": 0,
"Temp Written Blocks": 0
},
"Planning Time": 5.135,
"Triggers": [
],
"Execution Time": 2.389
}
]"Ob mit Ă€uĂeren AnfĂŒhrungszeichen, wie pgAdmin es kopiert, oder ohne â werfen wir es in dasselbe Feld, am Ende â eine Schönheit:

Erweiterte Visualisierung
Planungszeit / AusfĂŒhrungszeit
Jetzt ist besser zu erkennen, wo die zusĂ€tzliche Zeit bei der AusfĂŒhrung der Abfrage geblieben ist:

I/O-Zeitmessung
Manchmal findet man sich in der Situation wieder, dass im Plan zwar nicht allzu viele Ressourcen gelesen oder geschrieben werden, aber die AusfĂŒhrungszeit irgendwie unangemessen hoch ist.
Hier muss gesagt werden: "Oh, wahrscheinlich war die Festplatte auf dem Server in diesem Moment zu stark belastet, daher hat das Lesen so lange gedauert!" Aber das ist nicht besonders prĂ€ziseâŠ
Aber man kann das absolut zuverlÀssig feststellen. Denn unter den Konfigurationsoptionen des PG-Servers gibt es :
Beinhaltet die Messung der Ein-/Ausgabezeiten. Diese Option ist standardmĂ€Ăig deaktiviert, da es erforderlich ist, die aktuelle Zeit stĂ€ndig vom Betriebssystem abzufragen, was die Leistung auf einigen Plattformen erheblich verlangsamen kann. Um die Kosten der Zeitmessung auf Ihrer Plattform zu bewerten, können Sie das Tool pg_test_timing verwenden. Statistiken zur Ein-/Ausgabe können ĂŒber die Ansicht pg_stat_database abgerufen werden, im EXPLAIN-Ausgabe (wenn die Option BUFFERS verwendet wird), und ĂŒber die Ansicht pg_stat_statements.
Diese Option kann auch in einer lokalen Sitzung aktiviert werden:
SET track_io_timing = TRUE;Jetzt kommt das Beste: Wir haben gelernt, diese Daten zu verstehen und darzustellen, wobei wir alle Transformationen des AusfĂŒhrungsbaums berĂŒcksichtigen:

Hier kann man sehen, dass von 0,790 ms GesamtausfĂŒhrungszeit 0,718 ms fĂŒr das Lesen einer Datenseite benötig wurden, 0,044 ms fĂŒr das Schreiben derselben, und fĂŒr alle anderen nĂŒtzlichen AktivitĂ€ten wurden insgesamt nur 0,028 ms aufgewendet!
Die Zukunft mit PostgreSQL 13
Eine vollstĂ€ndige Ăbersicht der Neuerungen finden Sie , und wir konzentrieren uns speziell auf die Ănderungen in den PlĂ€nen.
Planungs-Buffer
Die Ressourcenzuteilung fĂŒr den Planner fand ihren Ausdruck in einem weiteren Patch, der nicht zu pg_stat_statements gehört. EXPLAIN mit der Option BUFFERS wird die Anzahl der wĂ€hrend der Planungsphase verwendeten Puffer melden:
Seq Scan auf pg_class (tatsĂ€chliche Zeilen=386 Schleifen=1) Puffer: gemeinsamer Treffer=9 gelesen=4 Planungszeit: 0,782 ms Puffer: gemeinsamer Treffer=103 gelesen=11 AusfĂŒhrungszeit: 0,219 ms

Inkrementelle Sortierung
In FĂ€llen, in denen eine Sortierung nach mehreren SchlĂŒsseln (k1, k2, k3âŠ) erforderlich ist, kann der Planner jetzt das Wissen nutzen, dass die Daten bereits nach mehreren der ersten SchlĂŒssel (z. B. k1 und k2) sortiert sind. In diesem Fall muss nicht mehr alles neu sortiert werden, sondern die Daten können in aufeinanderfolgende Gruppen mit gleichen Werten fĂŒr k1 und k2 unterteilt und nach dem SchlĂŒssel k3 "nachsortiert" werden.
Somit zerfĂ€llt die gesamte Sortierung in mehrere aufeinanderfolgende Sortierungen kleinerer GröĂe. Dies reduziert den benötigten Speicherbedarf und ermöglicht es zudem, die ersten Daten frĂŒher auszugeben, bevor die gesamte Sortierung vollstĂ€ndig ausgefĂŒhrt wurde.
Inkrementelle Sortierung (tatsĂ€chliche Zeilen=2.949.857 Schleifen=1) SortierschlĂŒssel: ticket_no, passenger_id Vorgeordneter SchlĂŒssel: ticket_no Vollsortiergruppen: 92.184 Sortiermethode: Quicksort Speicher: avg=31kB peak=31kB -> Index-Scan mit tickets_pkey auf tickets (tatsĂ€chliche Zeilen=2.949.857 Schleifen=1) Planungszeit: 2,137 ms AusfĂŒhrungszeit: 2230,019 ms


UI/UX Verbesserungen
Screenshots, sie sind ĂŒberall!
Jetzt gibt es auf jeder Registerkarte die Möglichkeit, schnell einen Screenshot der Registerkarte in die Zwischenablage in voller Breite und Tiefe der Registerkarte â "Ziel" rechts oben:

TatsĂ€chlich wurden die meisten Bilder fĂŒr diese Veröffentlichung genau so erhalten.
Empfehlungen zu den Knoten
Es gibt nicht nur mehr, sondern man kann auch zu jedem , indem Sie dem Link folgen:

Löschen aus dem Archiv
Einige haben dringend gebeten, die Möglichkeit hinzuzufĂŒgen, es "vollstĂ€ndig" zu löschen, sogar nicht veröffentlichte PlĂ€ne im Archiv â bitte, ein einfaches Klicken auf das entsprechende Symbol genĂŒgt:

Nun, und vergessen wir nicht, dass wir eine , an die man seine Anmerkungen und VorschlÀge senden kann.
Quelle: habr.com
