Deep Dive

Was "optimiert für InterSystems IRIS" konkret bedeutet

Jedes Datenbank-Tool behauptet, InterSystems IRIS zu unterstützen. Diese Seite ist die spezifische Version dieser Behauptung: die Informationen, die SQL DATA LENS anzeigt, weil es weiß, was IRIS ist, und die ein generischer JDBC-Client nicht abfragen kann.

InterSystems IRIS führt ein integriertes Datenwörterbuch, das über mehrere Datenmodelle gleichzeitig erreichbar ist. Dieselbe Information kann eine Tabelle, ein Objekt, ein mehrdimensionales Array oder ein Dokument sein. Darunter liegen die Daten in spärlich belegten, baumartig strukturierten mehrdimensionalen Arrays namens Globals — und Globals sind das, was die SQL- und Objektschnittstellen schnell macht und was dynamische Typen wie XML und JSON unkompliziert speicherbar macht.

Ein JDBC-Treiber exponiert die SQL-Projektion dieses Modells und hört dort auf. Das ist eine völlig gute Sicht zum Schreiben eines SELECT. Es reicht nicht, wenn Sie wissen müssen, warum das SELECT langsam ist, was der Optimierer über Ihre Daten glaubt oder was in einer Spalte tatsächlich gespeichert ist, die SQL als String meldet.

Tabellenstatistiken: Was der Optimierer zu wissen glaubt

IRIS und Caché untersuchen regelmäßig Tabellendaten und sammeln Statistiken in einer Operation namens Tune Table. Diese Statistiken entscheiden über den Query-Plan, also sind sie bei plötzlich langsamen Abfragen einer der ersten Orte, an denen man nachsieht. SQL DATA LENS zeigt sie in der Tabellenansicht, anstatt Sie von Hand Systemtabellen abfragen zu lassen:

  • Extent-Größe — die Anzahl der Zeilen, von der IRIS glaubt, dass die Tabelle sie enthält. Nützlich zu wissen, weil SELECT COUNT(*) auf einer Tabelle mit mehreren hundert Millionen Zeilen kein praktikabler Weg ist, dieselbe Frage zu beantworten.
  • Tabellen- und Indexgrößen — wo der Speicher tatsächlich liegt und wie groß jeder Index geworden ist.
  • Der exakte Klassenname hinter der Tabelle im Multimodell-Wörterbuch. Jede SQL-Tabelle in IRIS ist auch eine Klasse, und sobald Sie sich den Speicher ansehen oder die Klassendefinition lesen müssen, brauchen Sie ihren echten Namen.
Tabellenliste eines IRIS-Namespace mit Extent-Größe, Tabellengröße, Indexgröße, Owner und zugrundeliegendem Klassennamen pro Tabelle; das Kontextmenü ist bei Tasks geöffnet und die Aktion Tune table for all tables ist hervorgehoben
Extent-Größe, Indexgrößen und der Klassenname — die drei Dinge, die Sie zuerst nachschlagen, wenn eine Abfrage langsam wird.

Selektivität und warum der Ausreißer mehr zählt

Jede Spalte in einer IRIS-Tabelle trägt einen Selektivitätswert: den Anteil der Zeilen, den eine Abfrage zurückgeben würde, wenn sie nach einem typischen Wert in dieser Spalte sucht. Er wird als 1/D berechnet, wobei D die Anzahl der unterschiedlichen Werte ist. Eine Spalte mit einer Selektivität nahe 1 ist als Index nutzlos; eine Spalte nahe 0 ist ausgezeichnet.

Die interessanteren Zahlen liegen eine Ebene tiefer, im Tab IRIS Column Info: outlier_selectivity, outlier_value und average_field_size. Ein Ausreißer ist der klassische Grund dafür, dass eine Abfrage für die meisten Eingaben schnell und für eine pathologisch langsam ist — eine Status-Spalte, in der 98 % der Zeilen COMPLETE sagen, zum Beispiel. Der Optimierer weiß das. Ohne ein Tool, das es Ihnen zeigt, wissen Sie es nicht.

IRIS Column Info-Tab mit maximaler Länge, Minimal- und Maximalwert, Selektivität, Ausreißer-Selektivität, Ausreißer-Wert, durchschnittlicher Feldgröße und Histogramm pro Spalte
Die Ausreißer-Selektivität erklärt die Abfrage, die im Test schnell und in Produktion langsam ist.

Indizes und Storage: die Globals hinter der Tabelle

Die Tabs IRIS Indexes und IRIS Storage zeigen die internen Global-Namen, Struktur und Größen, die eine Tabelle unterstützen. Das ist die Brücke zwischen der SQL-Welt und der physischen: Sie sehen, welches Global die Daten hält, welche Globals die Indizes halten und wie viel Platz jedes verbraucht — und können dann den Global Browser öffnen und hineinsehen.

IRIS Storage-Tab, der die Daten-, Index-, Stream- und ID-Global-Namen zeigt, die eine Tabelle unterstützen, mit den zugewiesenen und verwendeten Megabytes für jedes, der Storage-Klasse und der Extent-Größe
Von der Tabelle zur Storage-Definition zum Global selbst, ohne das Fenster zu verlassen.

Lesen, was Globals tatsächlich enthalten

IRIS und Caché speichern Datenelemente in einer kompakten binären Darstellung, die von der $LISTBUILD-Funktionsfamilie erstellt wird. Lesen Sie ein Global mit einem generischen Tool und Sie erhalten einen Wert, der wie Leitungsrauschen aussieht. Der Global Browser dekodiert es in einzelne Elemente, läuft Subscript-Ebenen entlang und meldet gemischte Datentypen und ungültige Listenformate, anstatt daran zu scheitern.

Das ist die klarste Illustration des Unterschieds. Zwei Tools verbinden sich mit derselben Datenbank; eines zeigt Ihnen eine Zeichenkette von Steuerzeichen, das andere zeigt Ihnen die Felder.

Und die Verbindung selbst

Optimierung bedeutet auch, die Geschichte der Plattform nicht zu Ihrem Problem zu machen. 8 InterSystems-Treiber sind in der Anwendung enthalten — 7 IRIS-Versionen von 3.3 to 3.10.5 plus Caché 2018.1 — jede in einem isolierten Classloader geladen. Ein Caché-2018-Server und eine aktuelle IRIS-Instanz können in einer Sitzung nebeneinander geöffnet sein, was während einer Migration sehr wichtig ist und in einem generischen Client tatsächlich umständlich zu arrangieren ist.

Namespaces werden für Sie aufgelistet, anstatt von Ihnen konfiguriert zu werden: Verbinden Sie sich mit einem Server und jeder Namespace erscheint im Baum, ohne ihre Namen zu kennen und ohne eine separate JDBC-URL für jeden.

Wohin als Nächstes. SQL Performance deckt den Workflow ab, in den diese Zahlen einfließen — Scanner, Cached Queries, Ausführungspläne. Table Viewer dokumentiert die oben beschriebenen Tabs. Vergleich stellt das alles neben das Management Portal, DBeaver und DataGrip.

Sehen Sie sich Ihre eigenen Statistiken an

Installieren Sie es, öffnen Sie die Tabelle, die Sie beschäftigt hat, und lesen Sie die Zahlen, die der Optimierer verwendet. Das dauert normalerweise weniger als fünf Minuten.

Windows 10, 11 and Windows Server (64-bit) · ~140 MB · Version 3.24 · volle 30-Tage-Pro-Trial enthalten