Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfragen optimieren und ausführen » Algorithmen zur Abfrageausführung

 

Relationale Algebra-Operatoren in Zugriffsplänen

Ein Zugriffsplan besteht aus einer Baumstruktur mit relationalen Algebra-Operatoren, die, beginnend an den Blättern des Baums, die Basiseingaben in die Abfrage verwerten (normalerweise aus den Zeilen einer Tabelle) und die Zeilen von unten nach oben verarbeiten, so dass die Wurzeln des Baums das Endergebnis enthalten. Zum leichteren Verständnis können Zugriffspläne grafisch dargestellt werden. Siehe Ausführungspläne lesen und Grafische Pläne lesen.

SQL Anywhere unterstützt mehrere Implementierungen dieser verschiedenen relationalen Algebra-Operationen. SQL Anywhere unterstützt beispielsweise drei unterschiedliche Implementierungen des Inner-Joins: Nested-Loops-Join, Merge-Join und Hash-Join. Jeder dieser Operatoren kann Vorteile in bestimmten Situationen bieten: Zu den Parametern, die der Abfrageoptimierer analysiert, um seine Wahl zu treffen, gehören die Menge der Tabellendaten im Cache, die Eigenschaften und die Selektivität des Join-Prädikats, die Sortierung der Eingabedaten für den Join und der Ausgabedaten vom Join, der verfügbare Arbeitsspeicher zum Durchführen des Joins sowie eine Vielzahl anderer Faktoren.

SQL Anywhere schaltet eventuell zur Ausführungszeit dynamisch vom physischen algebraischen Operator, der vom Optimierer gewählt wurde, auf einen anderen physischen Algorithmus um, der mit dem Original logisch gleichwertig ist. Normalerweise wird dieser alternative Zugriffsplan in einer der beiden folgenden Situationen benutzt:

  • Wenn der gesamte Speicherplatz, der zum Ausführen der Anweisung genutzt wird, nahe eines Schwellenwerts des Speichernutzungswächters liegt, dann erfolgt die Umschaltung auf eine Strategie, bei der die Ausführung langsamer wird, die aber einen beträchtlichen Teil des Arbeitsspeichers für die Nutzung durch andere Operatoren (oder Anforderungen) freigibt. Wenn dieser Fall eintritt, wird die Eigenschaft "QueryLowMemoryStrategy" erhöht. Diese Information erscheint auch im grafischen Plan einer Anweisung. Hinweise zur Eigenschaft "QueryLowMemoryStrategy" finden Sie unter Verbindungseigenschaften.

    Die Speichermenge, die von einem Operator verwendet werden kann, hängt von der Multiprogramming-Stufe des Datenbankservers und der Anzahl der aktiven Verbindungen ab.

    Weitere Hinweise zum Speichernutzungswächter und zur Multiprogramming-Stufe finden Sie unter:

  • Wenn der spezielle Operator (beispielsweise ein Hash-Inner-Join) zu Beginn der Ausführung feststellt, dass seine Eingaben nicht die erwartete Kardinalität haben, die vom Optimierer zur Optimierungszeit berechnet wurde. In diesem Fall schaltet der Operator möglicherweise auf eine andere Strategie um, deren Ausführung preiswerter ist. Normalerweise verwendet diese alternative Strategie Index-Verarbeitung mit Nested-Loops. Im Fall eines Hash-Joins wird die Eigenschaft "QueryJHToJNLOptUsed" erhöht, wenn diese Umschaltung erfolgt. Das Umschalten der Join-Methode wird auch im grafischen Plan der Anweisung dargestellt. Hinweise zur Eigenschaft "QueryLowMemoryStrategy" finden Sie unter Verbindungseigenschaften.