Metriken
DuckDB stellt eine Reihe von Metriken bereit, mit denen Leistung und Zustand der Datenbank überwacht werden können.
Der Query-Baum hat zwei Knotentypen: die Knoten QUERY_ROOT und OPERATOR.
QUERY_ROOT bezeichnet ausschließlich den obersten Knoten; die darin enthaltenen Metriken werden über die gesamte Abfrage gemessen.
Die Knoten OPERATOR bezeichnen die einzelnen Operatoren im Abfrageplan.
Manche Metriken sind nur für QUERY_ROOT-Knoten verfügbar, andere nur für OPERATOR-Knoten.
Die folgende Tabelle beschreibt jede Metrik und für welche Knoten sie verfügbar ist.
Außer OPERATOR_TYPE können alle Metriken ein- oder ausgeschaltet werden.
Alle Metriken
| Name | Gruppe | Beschreibung |
|---|---|---|
CPU_TIME |
core | CPU-Zeit, die für die Abfrage aufgewendet wurde |
CUMULATIVE_CARDINALITY |
core | Kumulative Kardinalität der Abfrage |
CUMULATIVE_ROWS_SCANNED |
core | Kumulative Anzahl der von der Abfrage gescannten Zeilen |
EXTRA_INFO |
core | Einzigartige Operator-Metriken |
LATENCY |
core | Zeit für die Ausführung der gesamten Abfrage |
QUERY_NAME |
core | Die SQL-Zeichenkette der Abfrage |
RESULT_SET_SIZE |
core | Die Größe des Ergebnisses |
ROWS_RETURNED |
core | Die Anzahl der von der Abfrage zurückgegebenen Zeilen |
BLOCKED_THREAD_TIME |
execution | Wartezeit, bis ein Thread verfügbar wird |
SYSTEM_PEAK_BUFFER_MEMORY |
execution | Spitzenspeicherverbrauch des Systems |
SYSTEM_PEAK_TEMP_DIR_SIZE |
execution | Spitzengröße des temporären Verzeichnisses |
TOTAL_MEMORY_ALLOCATED |
execution | Der vom Buffer Manager insgesamt zugewiesene Speicher. |
ATTACH_LOAD_STORAGE_LATENCY |
file | Zeit für das Laden aus dem Storage. |
ATTACH_REPLAY_WAL_LATENCY |
file | Zeit für das Replay der WAL-Datei. |
CHECKPOINT_LATENCY |
file | Zeit für das Ausführen von Checkpoints |
COMMIT_LOCAL_STORAGE_LATENCY |
file | Zeit für das Committen des transaktionslokalen Speichers. |
TOTAL_BYTES_READ |
file | Die vom Dateisystem insgesamt gelesenen Bytes. |
TOTAL_BYTES_WRITTEN |
file | Die vom Dateisystem insgesamt geschriebenen Bytes. |
WAITING_TO_ATTACH_LATENCY |
file | Wartezeit, um eine Datei per ATTACH anzuhängen. |
WAL_REPLAY_ENTRY_COUNT |
file | Die Gesamtzahl der in der WAL wiederzugebenden Einträge. |
WRITE_TO_WAL_LATENCY |
file | Zeit für das Schreiben in die WAL. |
ALL_OPTIMIZERS |
phase_timing | Aktiviert alle Optimizer |
CUMULATIVE_OPTIMIZER_TIMING |
phase_timing | Zeit in allen Optimizern |
PHYSICAL_PLANNER |
phase_timing | Die Zeit für die Erzeugung des physischen Plans |
PHYSICAL_PLANNER_COLUMN_BINDING |
phase_timing | Die Zeit für das Binden der Spalten im logischen Plan an physische Spalten |
PHYSICAL_PLANNER_CREATE_PLAN |
phase_timing | Die Zeit für das Erstellen des physischen Plans |
PHYSICAL_PLANNER_RESOLVE_TYPES |
phase_timing | Die Zeit für das Auflösen der Typen im logischen Plan zu physischen Typen |
PLANNER |
phase_timing | Die Zeit, um aus den geparsten SQL-Knoten den logischen Plan zu erzeugen. |
PLANNER_BINDING |
phase_timing | Die Zeit für das Binden des logischen Plans. |
OPERATOR_CARDINALITY |
operator | Kardinalität des Operators |
OPERATOR_NAME |
operator | Name des Operators |
OPERATOR_ROWS_SCANNED |
operator | Anzahl der vom Operator gescannten Zeilen |
OPERATOR_TIMING |
operator | Zeit im Operator |
OPERATOR_TYPE |
operator | Typ des Operators |
Metrikgruppen
Die Metriken sind in Gruppen organisiert, mit denen zusammengehörige Metriken gemeinsam ein- oder ausgeschaltet werden können. Die folgenden Metrikgruppen sind verfügbar:
ALL: Alle MetrikenDEFAULT: Der Standard-MetriksatzCOREEXECUTIONFILEOPERATOROPTIMIZERPHASE_TIMING
Kernmetriken {#core-metrics}
Kernmetriken
CPU_TIME
| Beschreibung | CPU-Zeit, die für die Abfrage aufgewendet wurde | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ | | Kumulativ | ✅ | | Kind | OPERATOR_TIMING |
Hinweis:
CPU_TIME misst die kumulativen Operatorzeiten.
Zeit in anderen Phasen wie Parsen, Query Planning usw. ist nicht enthalten.
Daher kann bei manchen Abfragen die LATENCY im QUERY_ROOT größer sein als die CPU_TIME.
CUMULATIVE_CARDINALITY
| Beschreibung | Kumulative Kardinalität der Abfrage | | Typ | uint64 | | Einheit | absolut | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ | | Kumulativ | ✅ | | Kind | OPERATOR_CARDINALITY |
CUMULATIVE_ROWS_SCANNED
| Beschreibung | Kumulative Anzahl der von der Abfrage gescannten Zeilen | | Typ | uint64 | | Einheit | absolut | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ | | Kumulativ | ✅ | | Kind | OPERATOR_ROWS_SCANNED |
EXTRA_INFO
| Beschreibung | Einzigartige Operator-Metriken | | Typ | Value::MAP | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ |
LATENCY
| Beschreibung | Zeit für die Ausführung der gesamten Abfrage | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
QUERY_NAME
| Beschreibung | Die SQL-Zeichenkette der Abfrage | | Typ | string | | Standard | ✅ | | Query-Knoten | ✅ |
RESULT_SET_SIZE
| Beschreibung | Die Größe des Ergebnisses | | Typ | uint64 | | Einheit | Bytes | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ | | Kind | RESULT_SET_SIZE |
ROWS_RETURNED
| Beschreibung | Die Anzahl der von der Abfrage zurückgegebenen Zeilen | | Typ | uint64 | | Einheit | absolut | | Standard | ✅ | | Query-Knoten | ✅ | | Kind | OPERATOR_CARDINALITY |
Ausführungsmetriken {#execution-metrics}
Metriken, die während der Abfrageausführung erfasst werden
BLOCKED_THREAD_TIME
| Beschreibung | Wartezeit, bis ein Thread verfügbar wird | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
SYSTEM_PEAK_BUFFER_MEMORY
| Beschreibung | Spitzenspeicherverbrauch des Systems | | Typ | uint64 | | Einheit | Bytes | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ |
SYSTEM_PEAK_TEMP_DIR_SIZE
| Beschreibung | Spitzengröße des temporären Verzeichnisses | | Typ | uint64 | | Einheit | Bytes | | Standard | ✅ | | Query-Knoten | ✅ | | Operator-Knoten | ✅ |
TOTAL_MEMORY_ALLOCATED
| Beschreibung | Der vom Buffer Manager insgesamt zugewiesene Speicher. | | Typ | uint64 | | Einheit | Bytes | | Standard | ✅ | | Query-Knoten | ✅ |
Dateimetriken {#file-metrics}
Metriken, die bei Dateioperationen erfasst werden
ATTACH_LOAD_STORAGE_LATENCY
| Beschreibung | Zeit für das Laden aus dem Storage. | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
ATTACH_REPLAY_WAL_LATENCY
| Beschreibung | Zeit für das Replay der WAL-Datei. | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
CHECKPOINT_LATENCY
| Beschreibung | Zeit für das Ausführen von Checkpoints | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
COMMIT_LOCAL_STORAGE_LATENCY
| Beschreibung | Zeit für das Committen des transaktionslokalen Speichers. | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
TOTAL_BYTES_READ
| Beschreibung | Die vom Dateisystem insgesamt gelesenen Bytes. | | Typ | uint64 | | Einheit | Bytes | | Standard | ✅ | | Query-Knoten | ✅ |
TOTAL_BYTES_WRITTEN
| Beschreibung | Die vom Dateisystem insgesamt geschriebenen Bytes. | | Typ | uint64 | | Einheit | Bytes | | Standard | ✅ | | Query-Knoten | ✅ |
WAITING_TO_ATTACH_LATENCY
| Beschreibung | Wartezeit, um eine Datei per ATTACH anzuhängen. | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
WAL_REPLAY_ENTRY_COUNT
| Beschreibung | Die Gesamtzahl der in der WAL wiederzugebenden Einträge. | | Typ | uint64 | | Einheit | absolut | | Standard | ✅ | | Query-Knoten | ✅ |
WRITE_TO_WAL_LATENCY
| Beschreibung | Zeit für das Schreiben in die WAL. | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Query-Knoten | ✅ |
Operator-Metriken {#operator-metrics}
Metriken, die für jeden Operator erfasst werden
OPERATOR_CARDINALITY
| Beschreibung | Kardinalität des Operators | | Typ | uint64 | | Einheit | absolut | | Standard | ✅ | | Operator-Knoten | ✅ |
OPERATOR_NAME
| Beschreibung | Name des Operators | | Typ | string | | Standard | ✅ | | Operator-Knoten | ✅ |
OPERATOR_ROWS_SCANNED
| Beschreibung | Anzahl der vom Operator gescannten Zeilen | | Typ | uint64 | | Einheit | absolut | | Standard | ✅ | | Operator-Knoten | ✅ |
OPERATOR_TIMING
| Beschreibung | Zeit im Operator | | Typ | double | | Einheit | Sekunden | | Standard | ✅ | | Operator-Knoten | ✅ |
OPERATOR_TYPE
| Beschreibung | Typ des Operators | | Typ | uint8 | | Standard | ✅ | | Operator-Knoten | ✅ |
Phase_timing-Metriken {#phase_timing-metrics}
Diese Gruppe enthält Metriken zum Planner und zum Physical Planner. Der Planner erzeugt den logischen Plan, der Physical Planner erzeugt aus dem logischen Plan den physischen Plan.
ALL_OPTIMIZERS
| Beschreibung | Aktiviert alle Optimizer | | Typ | double | | Query-Knoten | ✅ |
CUMULATIVE_OPTIMIZER_TIMING
| Beschreibung | Zeit in allen Optimizern | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ | | Kumulativ | ✅ |
PHYSICAL_PLANNER
| Beschreibung | Die Zeit für die Erzeugung des physischen Plans | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ |
PHYSICAL_PLANNER_COLUMN_BINDING
| Beschreibung | Die Zeit für das Binden der Spalten im logischen Plan an physische Spalten | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ |
PHYSICAL_PLANNER_CREATE_PLAN
| Beschreibung | Die Zeit für das Erstellen des physischen Plans | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ |
PHYSICAL_PLANNER_RESOLVE_TYPES
| Beschreibung | Die Zeit für das Auflösen der Typen im logischen Plan zu physischen Typen | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ |
PLANNER
| Beschreibung | Die Zeit, um aus den geparsten SQL-Knoten den logischen Plan zu erzeugen. | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ |
PLANNER_BINDING
| Beschreibung | Die Zeit für das Binden des logischen Plans. | | Typ | double | | Einheit | Millisekunden | | Query-Knoten | ✅ |
Optimizer-Metriken {#optimizer-metrics}
Optimizer-Metriken sitzen auf der Ebene QUERY_ROOT und messen die Zeit jedes Optimizers.
Diese Metriken sind nur verfügbar, wenn der jeweilige Optimizer aktiviert ist.
Die verfügbaren Optimierungen können mit der Tabellenfunktion duckdb_optimizers(){:.language-sql .highlight} abgefragt werden.
Jeder Optimizer hat eine zugehörige Metrik nach dem Schema: OPTIMIZER_⟨OPTIMIZER_NAME⟩{:.language-sql .highlight}.
Zum Beispiel entspricht die Metrik OPTIMIZER_JOIN_ORDER dem Optimizer JOIN_ORDER.
Zusätzlich stehen die folgenden Metriken zur Unterstützung der Optimizer-Metriken zur Verfügung:
Kumulative Metriken {#cumulative-metrics}
DuckDB unterstützt außerdem mehrere kumulative Metriken, die in allen Knoten verfügbar sind.
Im Knoten QUERY_ROOT stellen diese Metriken die Summe der entsprechenden Metriken über alle Operatoren der Abfrage dar.
Die OPERATOR-Knoten stellen die Summe der jeweiligen Operator-Metrik und derjenigen aller Kindknoten rekursiv dar.
Diese kumulativen Metriken können unabhängig aktiviert werden, auch wenn die zugrunde liegenden spezifischen Metriken deaktiviert sind.
Die folgenden kumulativen Metriken sind verfügbar:
Beispiele
Die folgenden Beispiele zeigen, wie Sie benutzerdefiniertes Profiling aktivieren und das Ausgabeformat auf json setzen.
Im ersten Beispiel aktivieren wir Profiling und schreiben die Ausgabe in eine Datei.
Wir aktivieren nur EXTRA_INFO, OPERATOR_CARDINALITY und OPERATOR_TIMING.
CREATE TABLE students (name VARCHAR, sid INTEGER);CREATE TABLE exams (eid INTEGER, subject VARCHAR, sid INTEGER);INSERT INTO students VALUES ('Mark', 1), ('Joe', 2), ('Matthew', 3);INSERT INTO exams VALUES (10, 'Physics', 1), (20, 'Chemistry', 2), (30, 'Literature', 3);
PRAGMA enable_profiling = 'json';PRAGMA profiling_output = '/path/to/file.json';
PRAGMA configure_profiling = '{"CPU_TIME": "false", "EXTRA_INFO": "true", "OPERATOR_CARDINALITY": "true", "OPERATOR_TIMING": "true"}';
SELECT nameFROM studentsJOIN exams USING (sid)WHERE name LIKE 'Ma%';Der Inhalt der Datei nach Ausführung der Abfrage:
{ "extra_info": {}, "query_name": "SELECT name\nFROM students\nJOIN exams USING (sid)\nWHERE name LIKE 'Ma%';", "children": [ { "operator_timing": 0.000001, "operator_cardinality": 2, "operator_type": "PROJECTION", "extra_info": { "Projections": "name", "Estimated Cardinality": "1" }, "children": [ { "extra_info": { "Join Type": "INNER", "Conditions": "sid = sid", "Build Min": "1", "Build Max": "3", "Estimated Cardinality": "1" }, "operator_cardinality": 2, "operator_type": "HASH_JOIN", "operator_timing": 0.00023899999999999998, "children": [...Das zweite Beispiel fügt der Ausgabe detaillierte Metriken hinzu.
PRAGMA profiling_mode = 'detailed';
SELECT nameFROM studentsJOIN exams USING (sid)WHERE name LIKE 'Ma%';Der Inhalt der ausgegebenen Datei:
{ "all_optimizers": 0.001413, "cumulative_optimizer_timing": 0.0014120000000000003, "planner": 0.000873, "planner_binding": 0.000869, "physical_planner": 0.000236, "physical_planner_column_binding": 0.000005, "physical_planner_resolve_types": 0.000001, "physical_planner_create_plan": 0.000226, "optimizer_expression_rewriter": 0.000029, "optimizer_filter_pullup": 0.000002, "optimizer_filter_pushdown": 0.000102,... "optimizer_column_lifetime": 0.000009999999999999999, "rows_returned": 2, "latency": 0.003708, "cumulative_rows_scanned": 6, "cumulative_cardinality": 11, "extra_info": {}, "cpu_time": 0.000095, "optimizer_build_side_probe_side": 0.000017, "result_set_size": 32, "blocked_thread_time": 0.0, "query_name": "SELECT name\nFROM students\nJOIN exams USING (sid)\nWHERE name LIKE 'Ma%';", "children": [ { "operator_timing": 0.000001, "operator_rows_scanned": 0, "cumulative_rows_scanned": 6, "operator_cardinality": 2, "operator_type": "PROJECTION", "cumulative_cardinality": 11, "extra_info": { "Projections": "name", "Estimated Cardinality": "1" }, "result_set_size": 32, "cpu_time": 0.000095, "children": [...