Abfrageprofile für Hybridtabellen analysieren¶
Unistore-Workloads werfen einige interessante Fragen zur Ausführung von Abfragen auf, die Sie mit dem Feature Snowsight-Abfrageprofil oder mit Informationen aus der Ausgabe von EXPLAIN untersuchen können. Zusätzlich zur Überwachung der Gesamtleistung und des Durchsatzes möchten Sie vielleicht auch wissen, ob eine Tabellenscan für den Zeilenspeicher oder den Objektspeicher ausgeführt wird oder ob ein bestimmter sekundärer Index verwendet wird.
In diesem Abschnitt werden Query Profile-Operatoren und -Attribute, die sich auf Operationen mit Hybridtabellen beziehen, und einige Beispiele vorgestellt, damit Sie verstehen, wie Sie Abfragepläne lesen können, die auf Hybridtabellen zugreifen. Siehe auch Abfrageaktivität mit Abfrageverlauf überwachen.
Hybridtabellenscans und Indexscans¶
Operatoren für Tabellen- und Indexscans erscheinen in Abfrageprofilen, um den Zugriff auf Hybridtabellen anzuzeigen. Diese Operatoren erscheinen in der Regel am unteren Ende des Strukturbaums und stellen den ersten Schritt beim Lesen der Daten dar, die für die Ausführung einer bestimmten Abfrage benötigt werden. Abfragen auf Standardtabellen verwenden immer Tabellenscans; sie verwenden keine Indexscans.
Wenn ein Primärschlüsselindex verwendet wird, um eine Hybridtabelle zu durchsuchen, erscheint ein TableScan-Operator im Abfrageprofil, nicht ein IndexScan-Operator. Wenn ein anderer Index zum Scannen einer Hybridtabelle verwendet wird, z. B. ein sekundärer Index, sehen Sie einen IndexScan-Operator.
Unter Attributes für den IndexScan-Operator sehen Sie den vollständig qualifizierten Namen des Index und Access predicates. Dies sind die Prädikate, die während der Überprüfung auf den Index angewendet werden. Sie können auch Prädikate für Filter sehen, die bei Tabellenscans angewendet werden.
Wenn ein Prädikat in einen Index „geschoben“ wird, enthält das Prädikat einen Platzhalter in Klammern für die Konstante, die in der Abfrage verwendet wurde. Beispiel: SENSOR_DATA_DEVICE2.DEVICE_ID = (:SFAP_PRE_NR_1)
Scanmodus¶
Hybridtabellendaten werden in zwei Formaten verwaltet, um sowohl operationelle als auch analytische Workloads zu bedienen. Eine häufige Frage von Administratoren ist, ob eine bestimmte Abfrage auf den Zeilenspeicher oder den Spaltenspeicher (Objektspeicher) zugreift. Eine Abfrage kann von einem oder beiden Speichertypen lesen, je nach den betreffenden Tabellen, den spezifischen Anforderungen der Abfrage, der Verfügbarkeit von Indizes und anderen Faktoren.
Das Profil für Abfragen von Hybridtabellen enthält ein Scan Mode-Attribut für jeden Tabellen-Scan-Operator im Strukturbaum:
ROW-BASED: Die Abfrage liest aus den Tabellendaten im Zeilenspeicher oder verwendet Indizes, um Abfrageergebnisse zu berechnen.
COLUMN-BASED: Die Abfrage liest aus einer Kopie des Objektspeichers die gleichen Daten, die in den Zeilenspeicher geladen wurden. Indexscans können auch auf den Objektspeicher zugreifen, z. B. bei Abfragen von Time Travel.
Der Scanmodus ist spezifisch für Hybridtabellen. Wenn ein Tabellenscan in einer Standardtabelle durchgeführt wird, wird kein Scan Mode-Attribut angezeigt.
Daten, die aus dem spaltenbasierten Warehouse-Cache gelesen werden¶
Wenn möglich, lesen Tabellenscans für Hybridtabelle Daten aus einem spaltenbasierten Warehouse-Cache. Dieser Cache ist eine Erweiterung des Standard-Warehouse-Cache; siehe Optimieren des Warehouse-Cache. Der Cache enthält Daten, die vom Hybridtabellen-Speicheranbieter gelesen wurden und über schreibgeschützte Abfragen auf Hybridtabellen zugänglich sind.
Um die Cache-Nutzung in einem bestimmten Abfrageprofil zu sehen, wählen Sie den Tabellenscan-Operator und überprüfen Sie die Percentage scanned from cache unter Statistics.
Abfragen, die aus Hybridtabellen auswählen, profitieren nicht vom Cache für Abfrageergebnisse.
Drosselung für Hybridtabellenanforderungen¶
In der Profile Overview können Sie einen Hybrid Table Requests Throttling-Prozentsatz sehen. Um diese Übersicht zu sehen, wählen Sie keinen Operator im Strukturbaum aus; der Überblick gilt für den gesamten Abfrageplan.
Bei der folgenden Abfrage wurde beispielsweise festgestellt, dass 87,5 % der Ausführungszeit durch den Hybridtabellen-Speicheranbieter gedrosselt wurde. Ein hoher Drosselungsprozentsatz ist ein Indikator dafür, dass im Verhältnis zum Kontingent für die Datenbank zu viele Lese- und Schreibanfragen für Hybridtabellen an den Speicheranbieter gesendet werden. Weitere Informationen dazu finden Sie unter Kontingente und Drosselung.

Beispiele¶
Die folgenden Snowsight-Beispiele für Abfrageprofile zeigen Attribute, die für Operationen in Hybridtabellen spezifisch sind. Um diese Beispiele zu verstehen, müssen Sie die Tabellen, die abgefragt und geändert werden, nicht erstellen und laden. Hier ist jedoch die CREATE TABLE-Anweisung für eine der Tabellen als Referenz. Beachten Sie die Definition der PRIMARY KEY-Einschränkung (auf die Spalte timestamp
) und einen sekundären Index (auf die Spalte device_id
):
CREATE OR REPLACE HYBRID TABLE sensor_data_device1 (
device_id VARCHAR(10),
timestamp TIMESTAMP PRIMARY KEY,
temperature DECIMAL(6,4),
vibration DECIMAL(6,4),
motor_rpm INT,
INDEX device_idx(device_id));
Eine ähnliche Hybridtabelle, sensor_data_device2
, wird ebenfalls in den Beispielen verwendet.
Abfrageplan, der auf die Primärschlüsselspalte zugreift¶
Wenn Ihre Abfrage den Primärschlüssel der Tabelle (timestamp
) filtert, der automatisch indiziert wird, verwendet das Abfrageprofil einen TableScan-Operator. Beachten Sie auch, dass für diese Abfrage der Modus ROW_BASED verwendet wird.
SELECT * FROM sensor_data_device1 WHERE timestamp='2024-03-01 13:45:56.000';

Abfrageplan, der auf einen sekundären Index zugreift¶
Die Abfrage, die dieses Profil erzeugt hat, sieht folgendermaßen aus:
SELECT COUNT(*) FROM sensor_data_device1 WHERE device_id='DEVICE2';
Hier wird nur der Teil des Profils gezeigt, der sich auf den Operator IndexScan und seine Attribute konzentriert. Der Modus zum Scannen ist ROW_BASED, und Sie können das vollständige Prädikat sehen, indem Sie den Mauszeiger über Zugriffsprädikate bewegen. Der vollständig qualifizierte Indexname wird ebenfalls angezeigt.

Abfrageplan für DML auf einer Hybridtabelle¶
DML-Operationen auf Hybridtabellen ändern normalerweise einzelne Zeilen. Beispiel:
UPDATE sensor_data_device2 SET device_id='DEVICE3' WHERE timestamp = '2024-04-02 00:00:05.000';
Das Abfrageprofil für den Operator TableScan zeigt, dass dieses UPDATE auf den Zeilenspeicher für die Hybridtabelle zugreift (Scanmodus ist ROW_BASED):

Wiederkehrende Abfrage, die von zwischengespeicherten Daten profitiert¶
Nehmen Sie in diesem Fall an, dass die folgende Abfrage zweimal kurz hintereinander auf eine Hybridtabelle ausgeführt wird.
SELECT device_id, AVG(temperature)
FROM sensor_data_device2
WHERE temperature>33
GROUP BY device_id;
Die erste Abfrage liest alle Daten aus dem Objektspeicher. Der zweite Durchlauf der Abfrage liest 100 % der Daten aus dem spaltenbasierten Cache. Beachten Sie auch, dass für diese Abfrage der Scanmodus COLUMN_BASED verwendet wird.

Abfrageplan für eine Verknüpfung (Hybridtabelle zu Standardtabelle)¶
Wenn Sie eine Hybridtabelle mit einer Standardtabelle verknüpfen, sehen Sie ein Scan Mode-Attribut für die Überprüfung in der Hybridtabelle, aber nicht in der Standardtabelle. Der Operator TableScan auf der linken Seite dieses Verknüpfungsplans hat zum Beispiel den Modus ROW_BASED verwendet. Die Tabelle order_header
ist eine Hybridtabelle mit order_id
als Primärschlüssel (in diesem Beispiel die Verknüpfungsspalte). Die andere Tabelle, truck_history
, ist eine Standardtabelle.
