DE102021109138A1 - Ausführung von abfrageplänen - Google Patents

Ausführung von abfrageplänen Download PDF

Info

Publication number
DE102021109138A1
DE102021109138A1 DE102021109138.1A DE102021109138A DE102021109138A1 DE 102021109138 A1 DE102021109138 A1 DE 102021109138A1 DE 102021109138 A DE102021109138 A DE 102021109138A DE 102021109138 A1 DE102021109138 A1 DE 102021109138A1
Authority
DE
Germany
Prior art keywords
plan
sub
subplan
query
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102021109138.1A
Other languages
English (en)
Inventor
Krishnamoorthy Balaraman
Abhijeet Walimbe
Suresh SOUNDARARAJAN
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Enterprise Development LP
Original Assignee
Hewlett Packard Enterprise Development LP
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Enterprise Development LP filed Critical Hewlett Packard Enterprise Development LP
Publication of DE102021109138A1 publication Critical patent/DE102021109138A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24535Query rewriting; Transformation of sub-queries or views

Abstract

Es werden Beispieltechniken für die Ausführung von Abfrageplänen beschrieben. In einem Beispiel kann ein Abfrageplan einen ersten Teilplan und einen zweiten Teilplan enthalten, die die gleiche Ausgabe liefern sollen. Einer von dem ersten Teilplan und dem zweiten Teilplan kann während der Ausführung des Abfrageplans ausgewählt werden, basierend auf einem Laufzeitleistungsparameter einer Komponente, die an der Ausführung des ersten Teilplans beteiligt sein soll, und einem Laufzeitleistungsparameter einer Komponente, die an der Ausführung des zweiten Teilplans beteiligt sein soll.

Description

  • HINTERGRUND
  • Eine Datenbankabfrage kann zum Abrufen von Daten aus einer Datenbank verwendet werden. Die Datenbankabfrage kann in einer deklarativen Sprache, wie z. B. der strukturierten Abfragesprache (SQL), bereitgestellt werden, wobei die Datenbankabfrage angeben kann, was berechnet werden soll, nicht aber die für die Berechnung auszuführenden Operationen. Als Reaktion auf den Empfang der Datenbankabfrage kann ein Abfrageoptimierer einen Abfrageplan generieren, der eine Reihe von Operationen spezifizieren kann, die ein Datenbankmanagementsystem durchführen soll, um ein Ergebnis für die Datenbankabfrage auszugeben. Der Abfrageoptimierer kann einen Satz von alternativen Abfrageplänen erzeugen, die der Datenbankabfrage entsprechen, und kann einen Abfrageplan aus dem Satz von Abfrageplänen zur Ausführung auswählen, basierend auf den Ressourcen, die für die Ausführung der Abfragepläne wahrscheinlich verbraucht werden. Der ausgewählte Abfrageplan wird dann von einem Abfrage-Executor ausgeführt, um die Daten abzurufen.
  • Figurenliste
  • Die folgende detaillierte Beschreibung bezieht sich auf die Abbildungen, wobei:
    • zeigt ein System zur Ausführung von Abfrageplänen gemäß einer Beispielimplementierung des vorliegenden Gegenstands;
    • illustriert eine Netzwerkumgebung mit einem System, das auf Datenbankabfragen antworten soll, gemäß einer Beispielimplementierung des vorliegenden Gegenstands;
    • zeigt einen Abfrageplan, der von einem Abfrageoptimierer gemäß einer Beispielimplementierung des vorliegenden Gegenstands erzeugt wurde;
    • zeigt ein Verfahren zur Auswahl eines Teilplans aus einer Vielzahl von gleichwertigen Teilplänen, gemäß einer Beispielimplementierung des vorliegenden Gegenstands;
    • zeigt einen Abfrageplan, der von einem Abfrageoptimierer gemäß einer Beispielimplementierung des vorliegenden Gegenstands erzeugt wurde;
    • illustriert ein Verfahren zur Erzeugung eines Abfrageplans gemäß einer Beispielimplementierung des vorliegenden Gegenstands;
    • zeigt ein Verfahren zum Ausführen eines Abfrageplans gemäß einer Beispielimplementierung des vorliegenden Gegenstands; und
    • zeigt eine Computerumgebung, die ein nichttransitorisches computerlesbares Medium zum Erzeugen eines Abfrageplans implementiert, gemäß einer Beispielimplementierung des vorliegenden Gegenstands.
  • DETAILLIERTE BESCHREIBUNG
  • Ein Abfrageoptimierer kann einen Abfrageplan zur Ausführung aus einem Satz alternativer Abfragepläne auswählen, basierend auf der Menge der Ressourcen, die wahrscheinlich zur Ausführung des Abfrageplans verbraucht werden. Die Menge der wahrscheinlich verbrauchten Ressourcen kann auf der Grundlage von Statistiken der Datenbanktabellen, auf die zur Ausführung des Abfrageplans zugegriffen werden muss, geschätzt werden. Die Statistiken können z. B. die Anzahl der Zeilen in den Datenbanktabellen und die Anzahl der eindeutigen Werte in einer Spalte der Datenbanktabellen umfassen. Der ausgewählte Abfrageplan wird anschließend von einem Abfrage-Executor ausgeführt.
  • In einigen Fällen können sich die Leistungsparameter eines Systems, das für die Ausführung des Abfrageplans verwendet wird, im Laufe der Zeit ändern, z. B. aufgrund einer Zunahme der Arbeitslast des Systems. Zum Beispiel kann die Latenzzeit einer Festplatte, auf die zur Ausführung eines ausgewählten Abfrageplans zugegriffen werden soll, während der Ausführung des Abfrageplans hoch sein. Als weiteres Beispiel kann die Auslastungszeit eines Prozessors, der einen Plattenprozess zum Abrufen von Daten von der Platte ausführen soll, während der Ausführung des Abfrageplans hoch sein. Infolgedessen kann die Ausführung des ausgewählten Abfrageplans eine große Zeitspanne in Anspruch nehmen. Die verbrauchte Zeit kann größer sein als die Zeit, die für die Ausführung eines anderen Abfrageplans aus der Menge der alternativen Abfragepläne verbraucht worden wäre.
  • Außerdem kann es vorkommen, dass die Statistiken, auf deren Grundlage der Abfrageplan ausgewählt wurde, zum Zeitpunkt der Auswahl des Abfrageplans veraltet waren. Beispielsweise kann ein Abfrageplan auf der Grundlage der Angabe ausgewählt worden sein, dass die Anzahl der Datensätze in einer Datenbanktabelle eine Million beträgt, während die Anzahl der Datensätze seit der letzten Aktualisierung der Statistiken auf zehn Millionen angewachsen sein kann. Dementsprechend kann der ausgewählte Abfrageplan mehr Ressourcen verbrauchen, als erwartet wurde. Die verbrauchten Ressourcen können höher sein als die Ressourcen, die für die Ausführung eines alternativen Abfrageplans verbraucht worden wären. Daher kann der Prozess der Auswahl eines Abfrageplans weniger effizient sein.
  • Der vorliegende Gegenstand bezieht sich auf die Ausführung von Abfrageplänen. Mit den Implementierungen des vorliegenden Gegenstands können die Zeit und die Ressourcen, die für die Ausführung von Abfrageplänen verbraucht werden, reduziert werden.
  • Gemäß einer Beispielimplementierung enthält ein Abfrageplan eine Vielzahl von äquivalenten Teilplänen, die dieselbe Ausgabe liefern sollen. Eine Komponente, die an der Ausführung eines äquivalenten Teilplans beteiligt ist, kann eine andere sein als die, die an der Ausführung eines anderen äquivalenten Teilplans beteiligt ist. Zum Beispiel kann eine erste Datei, eine erste Festplatte oder ein erster Prozessor an der Ausführung eines ersten Teilplans beteiligt sein, während eine zweite Datei, eine zweite Festplatte oder ein zweiter Prozessor an der Ausführung eines zweiten Teilplans beteiligt sein kann. Beispiele für äquivalente Teilpläne sind ein erster Teilplan, der eine erste Join-Operation einer ersten Kopie eines Indexes und einer Tabelle beinhaltet, und ein zweiter Teilplan, der eine zweite Join-Operation einer zweiten Kopie des Indexes und der Tabelle beinhaltet. Die erste Kopie des Indexes kann auf der ersten Platte und die zweite Kopie des Indexes auf der zweiten Platte gespeichert sein. Ferner kann die erste Join-Operation von einer ersten Recheneinheit und die zweite Join-Operation von einer zweiten Recheneinheit durchgeführt werden.
  • Ein Teilplan kann aus der Vielzahl der gleichwertigen Teilpläne ausgewählt werden. Der ausgewählte Teilplan kann dann ausgeführt werden. Die Auswahl des Teilplans muss nicht vor Beginn der Ausführung des Abfrageplans erfolgen. Stattdessen kann die Auswahl zur Laufzeit erfolgen, z. B. kurz bevor einer der äquivalenten Teilpläne ausgeführt werden soll. In einem Beispiel kann der Abfrageplan, um die Auswahl des Teilplans zur Laufzeit zu erleichtern, einen Teilplan-Auswahloperator enthalten, der die Komponenten angibt, die an der Ausführung jedes äquivalenten Teilplans beteiligt sind. Die Ausführung des Teilplan-Auswahloperators kann die Bestimmung der LaufzeitLeistungsparameter der an den äquivalenten Teilplänen beteiligten Komponenten bewirken.
  • In einem Beispiel erfolgt die Auswahl eines Teilplans zur Ausführung auf der Grundlage von Laufzeitleistungsparametern der Komponenten, die an der Ausführung der entsprechenden Teilpläne beteiligt sein sollen. Ein Laufzeitleistungsparameter einer Komponente kann sich auf einen Parameter beziehen, der die Leistung der Komponente zur Laufzeit angibt, z. B. wenn der Abfrageplan ausgeführt wird. Die Leistung einer Komponente kann die Geschwindigkeit angeben, mit der eine Aufgabe, an der die Komponente beteiligt ist, abgeschlossen werden kann, und kann von der Arbeitslast der Komponente abhängen. Die Laufzeit-Performance-Parameter können z. B. die Anzahl der Zugriffe auf eine Datei pro Zeiteinheit, die Latenzzeit einer Festplatte und die Auslastungszeit eines Prozessors umfassen. Wenn z. B. die erste Datei, die dem ersten Teilplan entspricht, eine geringere Anzahl von Zugriffen hat als die zweite Datei, oder wenn eine Latenz der ersten Festplatte geringer ist als die der zweiten Festplatte, oder wenn eine Belegtzeit des ersten Prozessors geringer ist als die des zweiten Prozessors, kann der erste Teilplan ausgewählt werden.
  • Die Bereitstellung von gleichwertigen Teilplänen in einem Abfrageplan und die Auswahl eines auszuführenden Teilplans auf der Grundlage von Laufzeitleistungsparametern der am Teilplan beteiligten Komponenten kann die Verwendung überlasteter Komponenten bei der Ausführung des Abfrageplans verhindern. Daher kann die Zeit, die für die Ausführung des Abfrageplans benötigt wird, reduziert werden. Die Auswahl basierend auf den Laufzeit-Performance-Parametern reduziert auch die Abhängigkeit von Statistiken von Datenbanktabellen, die veraltet sein können, für die Auswahl. Daher wird die Auswahl effizienter.
  • Indem die Auswahl eines äquivalenten Teilplans auf den Zeitpunkt der Ausführung des Teilplans verschoben wird, kann außerdem sichergestellt werden, dass die Auswahl auf den aktuellen Leistungsparametern basiert. Der vorliegende Gegenstand kann in statischen Szenarien verwendet werden, in denen ein Abfrageplan einmal generiert, gespeichert und mehrfach ausgeführt wird, da die Auswahl von Teilplänen dynamisch während der Ausführung des Abfrageplans erfolgt. Der vorliegende Gegenstand kann auch in dynamischen Szenarien verwendet werden, in denen Abfragepläne vor einer Ausführung generiert und nach der Ausführung verworfen werden.
  • Die folgende Beschreibung bezieht sich auf die beigefügten Zeichnungen. Wo immer möglich, werden in den Zeichnungen und der folgenden Beschreibung die gleichen Referenznummern verwendet, um sich auf gleiche oder ähnliche Teile zu beziehen. Während in der Beschreibung mehrere Beispiele beschrieben werden, sind Änderungen, Anpassungen und andere Implementierungen möglich und sollen hier behandelt werden.
  • zeigt ein System 100 zum Ausführen von Abfrageplänen gemäß einer Beispielimplementierung des vorliegenden Gegenstands. Das System 100 kann als Rechengerät implementiert sein, wie z. B. ein Desktop-Computer, ein Laptop-Computer, ein Server oder dergleichen. Das System 100 umfasst einen Prozessor 102 und einen mit dem Prozessor 102 gekoppelten Speicher 104.
  • Der Prozessor 102 kann als Mikroprozessor, Mikrocomputer, Mikrocontroller, digitaler Signalprozessor, zentrale Verarbeitungseinheit, Zustandsmaschine, logische Schaltung und/oder beliebiges Gerät implementiert sein, das Signale auf der Grundlage von Betriebsanweisungen manipulieren kann. Neben anderen Fähigkeiten kann der Prozessor 102 computerlesbare Anweisungen, die im Speicher 104 enthalten sind, abrufen und ausführen. Die computerlesbaren Anweisungen können Anweisungen 106 und Anweisungen 108 enthalten. Die Funktionen des Prozessors 102 können sowohl durch den Einsatz dedizierter Hardware als auch durch Hardware, die maschinenlesbare Befehle ausführen kann, bereitgestellt werden.
  • Der Speicher 104 kann jedes nicht-transitorische, computerlesbare Medium umfassen, einschließlich flüchtiger Speicher (z. B. RAM) und/oder nichtflüchtiger Speicher (z. B. EPROM, Flash-Speicher, Memristor usw.). Der Speicher 104 kann auch eine externe Speichereinheit sein, wie z. B. ein Flash-Laufwerk, ein Compact-Disk-Laufwerk, ein externes Festplattenlaufwerk oder ähnliches.
  • Zusätzlich zum Prozessor 102 und dem Speicher 104 kann das System 100 auch eine oder mehrere Schnittstellen und Systemdaten enthalten (in nicht dargestellt). Die Schnittstelle(n) kann/können eine Vielzahl von anweisungsbasierten Schnittstellen und Hardwareschnittstellen umfassen, die die Interaktion mit einem Benutzer und mit anderen Kommunikations- und Rechengeräten, wie z. B. Netzwerkeinheiten, Webservern und externen Repositories, und Peripheriegeräten ermöglichen. Die Systemdaten können als Repository zum Speichern von Daten dienen, die von den Anweisungen abgerufen, verarbeitet, empfangen oder erstellt werden können.
  • Im Betrieb kann ein Abfrageplan empfangen werden. Der Abfrageplan kann ausgeführt werden, um ein Ergebnis für eine Datenbankabfrage zu liefern. Der Abfrageplan kann in Form von Anweisungen bereitgestellt werden, die ausgeführt werden können, um das Ergebnis zu erhalten. In einem Beispiel kann der Abfrageplan in Form einer Baumstruktur bereitgestellt werden, wobei jeder Knoten in der Baumstruktur einen entsprechenden Satz von Anweisungen hat. Der Abfrageplan kann von einem Abfrageoptimierer (in nicht dargestellt) als Reaktion auf den Empfang einer Abfrage von einem Benutzer oder einem Computergerät erzeugt werden. Der Abfrageoptimierer kann auf dem System 100 oder auf einem anderen Computergerät implementiert sein.
  • Der Abfrageplan kann eine Vielzahl von Teilplänen enthalten. Ein Teilplan kann, wenn er ausgeführt wird, eine Ausgabe liefern, die verwendet werden kann, um das Ergebnis für die Datenbankabfrage zu erhalten. Die Vielzahl von Teilplänen kann Teilpläne enthalten, die die gleiche Ausgabe liefern sollen. Die Teilpläne, die die gleiche Ausgabe liefern sollen, können als äquivalente Teilpläne bezeichnet werden. Beispiele für äquivalente Teilpläne sind ein erster Teilplan und ein zweiter Teilplan.
  • An der Ausführung des ersten Teilplans kann eine erste Komponente beteiligt sein müssen und an der Ausführung des zweiten Teilplans eine zweite Komponente. Die erste Komponente kann z. B. ein erster Prozessor sein, der zumindest einen Teil des ersten Teilplans ausführen soll, ein erster Speicher, der mit dem ersten Prozessor gekoppelt ist, eine erste Datei, auf die zur Ausführung des ersten Teilplans zugegriffen werden soll, oder eine erste Festplatte, auf der die erste Datei gespeichert ist. In ähnlicher Weise kann die zweite Komponente beispielsweise ein zweiter Prozessor sein, der zumindest einen Teil des zweiten Teilplans ausführt, ein zweiter Speicher, der mit dem zweiten Prozessor gekoppelt ist, eine zweite Datei, auf die zugegriffen werden soll, um den zweiten Teilplan auszuführen, oder eine zweite Festplatte, auf der die zweite Datei gespeichert ist. In einem Beispiel können mehr als eine der vorgenannten Komponenten an der Ausführung des ersten und zweiten Teilplans beteiligt sein.
  • Das System 100 kann den ersten Teilplan aus dem ersten Teilplan und dem zweiten Teilplan zur Ausführung auswählen. Die Auswahl kann während der Ausführung des Abfrageplans, d.h. zur Laufzeit, durchgeführt werden. Die Auswahl kann auf einem Laufzeitleistungsparameter der ersten Komponente und einem Laufzeitleistungsparameter der zweiten Komponente basieren. Ein Laufzeit-Performance-Parameter einer Komponente kann sich auf einen Parameter beziehen, der die Performance der Komponente zur Laufzeit angibt, z. B. wenn der Abfrageplan ausgeführt wird. Die Leistung einer Komponente kann die Geschwindigkeit angeben, mit der eine Aufgabe, an der die Komponente beteiligt ist, abgeschlossen werden kann, und kann von der Arbeitslast der Komponente abhängen. In einem Beispiel kann der Laufzeit-Performance-Parameter angeben, wie ausgelastet die Komponente ist und kann während des Betriebs der Komponente dynamisch variieren. Wenn es sich bei der Komponente beispielsweise um einen Prozessor handelt, kann der Laufzeit-Performance-Parameter eine Auslastungszeit des Prozessors sein, die eine Zeitspanne angibt, in der der Prozessor mit der Ausführung von Code beschäftigt ist.
  • Wenn es sich bei der Komponente um eine Festplatte handelt, können die Laufzeit-Performance-Parameter z. B. eine Anzahl von Zugriffsanforderungen, die von der Festplatte pro Zeiteinheit verarbeitet werden, eine Warteschlangenlänge der Festplatte, eine Latenz der Festplatte, eine Cache-Trefferquote eines Plattenpuffers der Festplatte umfassen. Die Länge der Warteschlange der Festplatte kann sich auf die Anzahl der Anfragen beziehen, die bei der Festplatte zur Bearbeitung anstehen. Die Latenz der Festplatte kann sich auf die Summe einer Suchzeit und einer Übertragungszeit der Festplatte beziehen. Ein Festplattenpuffer bezieht sich auf einen in die Festplatte eingebetteten Speicher, der als Puffer zwischen der Festplatte und einem Rechengerät fungiert. Eine Cache-Trefferrate des Plattenpuffers kann sich auf das Verhältnis zwischen der Anzahl der Cache-Treffer und der Anzahl der Cache-Treffer und -Fehlversuche des Plattenpuffers beziehen. Eine hohe Cache-Trefferquote zeigt an, dass eine geringere Anzahl von Festplattenzugriffen durchgeführt werden muss. Dementsprechend zeigt eine hohe Cache-Trefferquote an, dass Daten schneller von der Festplatte abgerufen werden.
  • Handelt es sich bei der Komponente um eine Datei, z. B. eine Tabelle oder einen Index, kann der Laufzeit-Performance-Parameter z. B. die Anzahl der Zugriffsanforderungen, z. B. Leseanforderungen und Schreibanforderungen, für die Datei pro Zeiteinheit sein. Wenn es sich bei der Komponente um einen Speicher handelt, kann der Laufzeit-Performance-Parameter eine Menge an Speicherkapazität sein, die zum Speichern von Anweisungen und Informationen genutzt wird. In einem Beispiel kann der Laufzeitleistungsparameter auch den Zustand einer Komponente anzeigen, z. B. ob die Komponente in Ordnung ist, beschädigt ist oder einen Fehler aufweist.
  • In einem Beispiel können Laufzeitleistungsparameter mehrerer Komponenten, die an einem Teilplan beteiligt sind, für die Auswahl eines Teilplans berücksichtigt werden. Des Weiteren kann in einem Beispiel auch eine Latenz bei der Kommunikation zwischen den an der Ausführung eines Teilplans beteiligten Rechengeräten für die Auswahl berücksichtigt werden. Nehmen wir zum Beispiel an, dass ein erstes Rechengerät, das die erste Festplatte verwaltet, auf der die erste Datei gespeichert ist, Datensätze, die aus der ersten Datei abgerufen wurden, einem zweiten Rechengerät zur weiteren Ausführung des ersten Teilplans oder des Abfrageplans bereitstellen soll. Ähnlich verhält es sich, wenn ein drittes Rechengerät, das den zweiten Datenträger verwaltet, auf dem die zweite Datei gespeichert ist, die aus der zweiten Datei abgerufenen Datensätze einem vierten Rechengerät zur weiteren Ausführung des zweiten Teilplans oder des Abfrageplans zur Verfügung stellen soll. In einem solchen Fall kann eine Latenz in der Kommunikation zwischen der ersten Rechenvorrichtung und der zweiten Vorrichtung und eine Latenz in der Kommunikation zwischen der dritten Rechenvorrichtung und der vierten Rechenvorrichtung für die Auswahl des ersten Teilplans berücksichtigt werden. In einem weiteren Beispiel können auch die Mietkosten eines Prozessors, der an der Ausführung eines Teilplans beteiligt sein soll (z. B. wenn die Ausführung des Teilplans in einer öffentlichen Cloud-Umgebung erfolgt), für die Auswahl des Teilplans berücksichtigt werden. Wenn z. B. die ersten Mietkosten des ersten Prozessors, der an der Ausführung des ersten Teilplans beteiligt ist, geringer sind als die zweiten Mietkosten des zweiten Prozessors, kann der erste Teilplan bei der Auswahl günstiger berücksichtigt werden.
  • Die Auswahl des ersten Teilplans, wie oben erläutert, kann erfolgen, wenn die Anweisungen 106 ausgeführt werden. Nach der Auswahl kann das System 100 die Ausführung des ersten Teilplans veranlassen, z. B. indem es eine andere Rechenvorrichtung anweist, den ersten Teilplan auszuführen. Die andere Rechenvorrichtung kann z. B. eine Rechenvorrichtung sein, die eine Festplatte verwaltet, auf der eine Datei gespeichert ist, auf die zur Ausführung des ersten Teilplans zugegriffen werden soll. In einem anderen Beispiel kann der erste Teilplan durch das System 100 ausgeführt werden.
  • Um die Ausführung des ersten Teilplans zu veranlassen, kann das System 100 die Anweisungen 108 ausführen. In einem Beispiel können die Anweisungen 106 und 108 als Teil des Abfrageplans bereitgestellt werden, um die Auswahl des ersten Teilplans während der Ausführung des Abfrageplans und nicht vor Beginn der Ausführung zu ermöglichen.
  • zeigt eine Netzwerkumgebung 200 mit dem System 100, das auf Datenbankabfragen antworten soll, gemäß einer Beispielimplementierung des vorliegenden Gegenstands. Die Datenbankabfragen können auch als Queries bezeichnet werden. Das System 100 kann Abfragen von einem Client (in nicht dargestellt) empfangen und Ergebnisse für die Abfragen basierend auf Daten einer Datenbank zurückgeben. In einem Beispiel kann das System 100 die auszuführenden Operationen durchführen, um die Ergebnisse zurückzugeben. In einem anderen Beispiel kann das System 100 andere Rechengeräte anweisen, die Operationen durchzuführen und die Durchführung der Operationen zu koordinieren und die Ergebnisse zurückzugeben. In einem weiteren Beispiel kann das System 100 einige der Operationen ausführen, während es die Ausführung anderer Operationen durch andere Computergeräte veranlasst.
  • Die Daten der Datenbank können auf verschiedene Weise organisiert werden, z. B. mithilfe von Tabellen und Indizes, und können auf Festplatten gespeichert werden, z. B. auf einer Festplatte, einem Solid-State-Laufwerk (SSD) oder ähnlichem. Die Festplatten können eine erste Festplatte 202, eine zweite Festplatte 204 und eine dritte Festplatte 206 umfassen. Die Daten auf den Festplatten können von entsprechenden Rechengeräten, die die Festplatten verwalten, abgerufen und verarbeitet werden. Zum Beispiel kann eine erste Rechenvorrichtung 208, die der ersten Festplatte 202 entspricht, Daten auf der ersten Festplatte 202 abrufen, um auf Datenbankabfragen zu antworten. Die erste Rechenvorrichtung 208 kann einen ersten Prozessor (in nicht dargestellt) enthalten, der einen Plattenprozess ausführt, der am Abrufen von Daten von der ersten Platte 202 beteiligt ist. In ähnlicher Weise kann eine zweite Rechenvorrichtung 210, die der zweiten Festplatte 204 entspricht, Daten von der zweiten Festplatte 204 abrufen und eine dritte Rechenvorrichtung 212, die der dritten Festplatte 206 entspricht, kann Daten von der dritten Festplatte 206 abrufen. Die zweite Rechenvorrichtung 210 und die dritte Rechenvorrichtung 212 können einen zweiten bzw. einen dritten Prozessor enthalten (in nicht dargestellt), die Plattenprozesse ausführen, die der zweiten Platte 204 bzw. der dritten Platte 206 entsprechen. In einem Beispiel kann eine Rechenvorrichtung Daten verwalten, die auf mehreren Festplatten gespeichert sind. Zum Beispiel kann die erste Rechenvorrichtung 208 den Abruf von Daten sowohl von der ersten Platte 202 als auch von der zweiten Platte 204 verwalten. Ferner können in einem Beispiel die Daten, die der Datenbank entsprechen, auf einer Platte gespeichert sein.
  • Die Festplatten, die Rechengeräte und das System 100 können über ein Kommunikationsnetzwerk 214 miteinander kommunizieren, das ein drahtloses oder ein drahtgebundenes Netzwerk oder eine Kombination davon sein kann. Das Kommunikationsnetzwerk 214 kann eine Sammlung von einzelnen Netzwerken sein, die miteinander verbunden sind und als ein einziges großes Netzwerk funktionieren (z. B. das Internet oder ein Intranet). Beispiele für solche individuellen Netzwerke sind das Global System for Mobile Communication (GSM)-Netzwerk, das Universal Mobile Telecommunications System (UMTS)-Netzwerk, das Personal Communications Service (PCS)-Netzwerk, das Time Division Multiple Access (TDMA)-Netzwerk, das Code Division Multiple Access (CDMA)-Netzwerk, das Next Generation Network (NGN), das Public Switched Telephone Network (PSTN) und das Integrated Services Digital Network (ISDN). Je nach Technologie kann das Kommunikationsnetzwerk 214 verschiedene Netzwerkeinheiten enthalten, wie z. B. Transceiver, Gateways und Router. Obwohl die Festplatten so dargestellt sind, dass sie über das Kommunikationsnetzwerk 214 mit den entsprechenden Computergeräten verbunden sind, können die Festplatten in einem Beispiel in die entsprechenden Computergeräte eingebaut sein.
  • In einem Beispiel kann eine deklarative Sprache, wie z. B. die strukturierte Abfragesprache (SQL), für die Verwaltung und den Abruf von Daten der Datenbank verwendet werden. Bei einer deklarativen Sprache kann eine Abfrage angeben, was berechnet werden soll, aber nicht, wie die Berechnung erfolgen soll. Die Abfrage kann z. B. angeben, welche Datensätze aus der Datenbank abgerufen werden sollen, aber nicht, wie sie abgerufen werden sollen. Um die Art und Weise zu bestimmen, in der die Datensätze abgerufen werden sollen, kann ein Abfrageplan verwendet werden. Der Abfrageplan kann die Abfolge der Schritte angeben, die befolgt werden müssen, um das Ergebnis der Abfrage zu liefern. Der Abfrageplan kann von einem Abfrageoptimierer 216 generiert werden. In einem Beispiel kann der Abfrageoptimierer 216 durch den Prozessor 102 implementiert werden, indem ein Satz von Anweisungen ausgeführt wird (in nicht dargestellt). Obwohl der Abfrageoptimierer 216 so dargestellt ist, dass er auf einem Gerät implementiert ist, das keine Festplatte verwaltet, auf der Daten der Datenbank gespeichert sind, kann der Abfrageoptimierer 216 in anderen Implementierungen auf der ersten Rechenvorrichtung 208, der zweiten Rechenvorrichtung 210 oder der dritten Rechenvorrichtung 212 implementiert sein.
  • Im Allgemeinen kann es mehrere alternative Wege geben, auf denen eine Abfrage behandelt werden kann. Nehmen wir zum Beispiel an, dass eine Abfrage 218 nach einigen Datensätzen in einer Tabelle mit dem Titel „ORDERS“ fragt. Die Tabelle kann auch als ORDERS-Tabelle bezeichnet werden und kann z. B. auf der dritten Platte 206 gespeichert sein. Die Tabelle ORDERS kann das Datum angeben, an dem eine Bestellung aufgegeben wurde („ORD_DATE“), einen Wert (z. B. einen monetären oder quantitativen Wert), der mit der Bestellung verbunden ist („ORD_AMT“), und eine Kennung eines Kunden, der die Bestellung aufgegeben hat („CUST_ID“). Die Tabelle ORDERS kann eine Spalte ORD_NUM haben, die eine Bestellnummer angibt, die jeder Bestellung entspricht. Die ORD_NUM kann der Primärschlüssel sein, d.h. der eindeutige Bezeichner für jeden Datensatz in der Tabelle ORDERS. Die Abfrage 218 kann nach den Datensätzen der Tabelle ORDERS fragen, die von einem Kunden mit der Kennung „C_15“ aufgegeben wurden und die an einem ersten Datum aufgegeben wurden (z.B. 9. Juni 2020). Der Kunde mit der Kennung C_15 kann als Kunde C_15 bezeichnet werden.
  • In einem Beispiel kann ein Datenbankindex, der auch als Index bezeichnet wird, auf einer Spalte der Tabelle ORDERS definiert werden. Ein Index ist eine Datenstruktur, die die Geschwindigkeit von Datenabrufoperationen auf einer Datenbanktabelle verbessert. Der Index kann z. B. von einem Datenbankadministrator definiert werden. In einem Beispiel kann ein Index, der für eine Spalte einer Tabelle definiert ist, einen Wert des Primärschlüssels der Tabelle angeben, der jedem Wert in der Spalte entspricht. Außerdem kann der Index auf der Grundlage der Werte der Spalte geordnet sein. Zum Beispiel kann ein erster Index, IDX_1, für die Spalte CUST_ID der Tabelle ORDERS definiert werden. Der erste Index kann Werte der ORD_NUM (die der Primärschlüssel der Tabelle ORDERS ist) angeben, die jedem Wert von CUST_ID in der Tabelle ORDERS entsprechen. Weiterhin können die Datensätze des ersten Indexes basierend auf den Werten CUST_ID sortiert werden. Zum Beispiel können, wie dargestellt, alle Werte, die dem Kunden C_15 entsprechen, zusammenhängend auf dem ersten Index angeordnet werden. Ein zweiter Index, IDX_2, kann auf der Spalte ORD_DATE der Tabelle ORDERS definiert werden. In einem Beispiel kann der erste Index auf der ersten Platte 202 und der zweite Index auf der zweiten Platte 204 gespeichert sein.
  • Der erste Index oder der zweite Index kann verwendet werden, um die Zeit für die Beantwortung der Abfrage 218 zu reduzieren. Mit dem ersten Index können z. B. die Bestellnummern der vom Kunden C_15 aufgegebenen Bestellungen identifiziert werden. Danach können die Datensätze in der Tabelle ORDERS für die identifizierten Bestellnummern abgerufen werden. Anschließend können die Datensätze, die am 9. Juni 2020 aufgegeben wurden, aus den abgerufenen Datensätzen gefiltert und als Antwort auf die Abfrage 218 zurückgegeben werden. Alternativ können die Bestellnummern von Bestellungen, die am 9. Juni 2020 aufgegeben wurden, mit Hilfe des zweiten Index identifiziert werden. Danach können die Datensätze in der Tabelle ORDERS für die identifizierten Bestellnummern abgerufen werden. Anschließend können die Datensätze, die vom Kunden C_15 aufgegeben wurden, aus den abgerufenen Datensätzen gefiltert und zur Beantwortung der Abfrage 218 zurückgegeben werden.
  • Wie oben erläutert, gibt es also zwei mögliche Wege, auf denen Ergebnisse für die Abfrage 218 zurückgegeben werden können. In ähnlicher Weise kann es eine Vielzahl von alternativen Wegen geben, auf denen Ergebnisse für andere Abfragen zurückgegeben werden können. Ferner kann es in einigen Fällen eine Vielzahl von alternativen Wegen geben, auf denen ein Zwischenergebnis, das für die Gewinnung eines endgültigen Ergebnisses für eine Abfrage zu erhalten ist, gewonnen werden kann. Gemäß dem vorliegenden Gegenstand kann ein vom Abfrageoptimierer 216 erzeugter Abfrageplan eine Vielzahl von alternativen Wegen, auf denen ein Ergebnis (End- oder Zwischenergebnis) erhalten werden kann, in Form von äquivalenten Teilplänen erfassen. Zwei Teilpläne können als äquivalente Teilpläne bezeichnet werden, wenn die Ausführung der beiden Teilpläne die gleiche Ausgabe ergibt. Im Fall der Abfrage 218 kann z. B. ein erster Teilplan die Verwendung des ersten Indexes und der zweite Teilplan die Verwendung des zweiten Indexes beinhalten.
  • Eine Komponente, die an der Ausführung eines der äquivalenten Teilpläne beteiligt ist, kann eine andere sein als die, die an der Ausführung eines anderen der äquivalenten Teilpläne beteiligt ist. Wie bereits erläutert, ist zum Beispiel der erste Index an der Ausführung des ersten Teilplans beteiligt, während der zweite Index an der Ausführung des zweiten Teilplans beteiligt ist. In ähnlicher Weise sind, während die erste Platte 202 und der erste Prozessor an der Ausführung des ersten Teilplans beteiligt sind (da die erste Platte 202 den ersten Index speichert und der erste Prozessor einen Plattenprozess zum Abrufen von Daten von der ersten Platte 202 ausführt), die zweite Platte 204 und der zweite Prozessor an der Ausführung des zweiten Teilplans beteiligt.
  • Ein Abfrageexekutor 220 kann einen der äquivalenten Teilpläne zur Ausführung auswählen, basierend auf Laufzeitleistungsparametern der an einem Teilplan beteiligten Komponenten. Beispielsweise können die Laufzeitleistungsparameter des ersten Index, des zweiten Index, der ersten Festplatte 202, der zweiten Festplatte 204, des ersten Prozessors, des zweiten Prozessors, eines ersten Speichers (Speicher der ersten Rechenvorrichtung 208) und eines zweiten Speichers (Speicher der zweiten Rechenvorrichtung 210) bestimmt werden, um entweder den ersten Plan oder den zweiten Plan zur Ausführung auszuwählen. Der Abfrage-Executor 220 kann beispielsweise durch den Prozessor 102 implementiert werden, indem ein Satz von Anweisungen ausgeführt wird (in nicht dargestellt). Obwohl der Abfrage-Executor 220 so dargestellt ist, dass er auf einem Gerät implementiert ist, das keine Festplatte verwaltet, auf der Daten der Datenbank gespeichert sind, kann der Abfrage-Executor 220 in anderen Implementierungen auf der ersten Rechenvorrichtung 208, der zweiten Rechenvorrichtung 210 oder der dritten Rechenvorrichtung 212 implementiert sein.
  • Die Auswahl eines äquivalenten Teilplans zur Ausführung erfolgt während einer Ausführung des Abfrageplans. Eine solche Auswahl reduziert die für die Ausführung des Abfrageplans benötigte Zeit. Dies soll anhand eines Beispiels erläutert werden. Nehmen wir an, dass während der Ausführung eines Abfrageplans, um ein Ergebnis an die Abfrage 218 zurückzugeben, die erste Platte 202, der erste Index und der erste Prozessor stark belastet sind, während die zweite Platte 204, der zweite Index und der zweite Prozessor leicht belastet sind. In einem solchen Fall kann der zweite Teilplan, der die Nutzung des zweiten Index, des zweiten Prozessors und der zweiten Festplatte 204 beinhaltet, zur Ausführung ausgewählt werden. Dementsprechend kann das Ergebnis schnell zurückgegeben werden.
  • In einem Beispiel kann die Auswahl eines der äquivalenten Teilpläne durch Ausführen eines Teilplan-Auswahloperators (in nicht dargestellt) erfolgen, der in einem Abfrageplan vorhanden ist. Der Teilplan-Auswahloperator kann die an der Ausführung eines Teilplans zu beteiligenden Komponenten angeben und die Bestimmung der Laufzeitleistungsparameter der Komponenten bewirken. Die Auswahl von Teilplänen auf der Basis des Teilplan-Auswahloperators wird gemäß einem Beispiel unter Bezugnahme auf erläutert.
  • In einem Beispiel kann die Erzeugung des Abfrageplans durch den Abfrageoptimierer 216 die Erzeugung einer Vielzahl von vorläufigen Abfrageplänen beinhalten. Anschließend kann der Abfrageoptimierer 216 die vorläufigen Abfragepläne zusammenführen. Der Abfrageoptimierer 216 kann auch einen Teilplanauswahloperator bereitstellen, um die Auswahl eines der äquivalenten Teilpläne zu ermöglichen. Die Generierung des Abfrageplans gemäß einem Beispiel wird unter Bezugnahme auf erläutert.
  • zeigt einen Abfrageplan 300, der vom Abfrageoptimierer 216 gemäß einer Beispielimplementierung des vorliegenden Gegenstands erzeugt wurde. Die Pfeile im Abfrageplan 300, die in die Aufwärtsrichtung zeigen, geben die Bewegungsrichtung der Daten für die Ausführung des Abfrageplans 300 an.
  • Ein Abfrageplan kann in Form einer Baumstruktur mit einer Vielzahl von Knoten dargestellt werden. Wenn der Abfrageplan in Form einer Baumstruktur dargestellt wird, kann der Abfrageplan auch als Abfragebaum bezeichnet werden. Die Blattknoten im Abfrageplan können die Tabellen darstellen, auf die zur Ausführung des Abfrageplans zugegriffen werden soll. Weiterhin können die nicht-blättrigen Knoten im Abfrageplan eine Operation spezifizieren, die auf den Tabellen an den Blattknoten und/oder Zwischentabellen, die als Ergebnis anderer Operationen erhalten wurden, ausgeführt werden soll und die bei der Rückgabe eines Ergebnisses für eine Abfrage hilft. Die von den Nicht-Blatt-Knoten spezifizierten Operationen können z. B. das Lesen von Datensätzen, die Durchführung von Join-Operationen, das Filtern von Datensätzen basierend auf einer Bedingung und die Ausgabe von Ergebnissen an den Client sein. Die Nicht-Blatt-Knoten können Anweisungen enthalten, die von einer Recheneinheit zur Ausführung des Abfrageplans ausgeführt werden können. Die Nicht-Blatt-Knoten können auch als Operatoren bezeichnet werden.
  • Ein vom Abfrageoptimierer 216 erzeugter Abfrageplan kann eine Vielzahl gleichwertiger Teilpläne enthalten. Zum Beispiel enthält der Abfrageplan 300 einen ersten Teilplan 302 und einen zweiten Teilplan 304. Der erste Teilplan 302 kann einen ersten Indexknoten 306 und einen Auftragsknoten 308 als Blattknoten enthalten, die den ersten Index bzw. die Tabelle ORDERS darstellen. Ein Knoten 310 enthält einen Leseoperator, der angibt, dass Datensätze im ersten Index, die den Kunden C_15 betreffen, gelesen werden sollen. Der Lesevorgang kann von der ersten Rechenvorrichtung 208 durchgeführt werden, da sie der ersten Platte 202 entspricht, die den ersten Index speichert. Der Lesevorgang kann nach Erhalt einer entsprechenden Anweisung von dem System 100, das die Abfrage 218 erhalten hat, durchgeführt werden. Die Leseoperation identifiziert die Bestellnummern der vom Kunden C_15 aufgegebenen Bestellungen.
  • Die aus dem ersten Index gelesenen Datensätze können einem Knoten 312 bereitgestellt werden, der einen Index-Verknüpfungsoperator enthält. Der Index-Verknüpfungsoperator bewirkt die Verknüpfung der aus dem ersten Index gelesenen Datensätze mit den entsprechenden Datensätzen in der Tabelle ORDERS. Um die Verknüpfung durchzuführen, kann der Index-Verknüpfungsoperator Informationen über die aus dem ersten Index gelesenen Datensätze an einen Knoten 314 weiterleiten. Der Knoten 314 enthält einen Leseoperator, der angibt, dass Datensätze in der Tabelle ORDERS, die den identifizierten Bestellnummern entsprechen, gelesen werden sollen. Der Lesevorgang kann von der dritten Rechenvorrichtung 212 durchgeführt werden, da die dritte Rechenvorrichtung 212 der dritten Platte 206 entspricht, auf der die Tabelle ORDERS gespeichert ist. Der Lesevorgang kann nach Erhalt einer entsprechenden Anweisung vom System 100 durchgeführt werden. Die aus der ORDERS-Tabelle gelesenen Datensätze können an den Knoten 312 weitergeleitet werden. Der Knoten 312 liefert die Ergebnisse der Index-Join-Operation der Tabelle ORDERS und des ersten Index.
  • In einem Beispiel können die Knoten 310 und 314 unterhalb des Knotens 312 vorgesehen sein. Außerdem kann der Knoten 310 auf der linken Seite des Knotens 312 und der Knoten 314 auf der rechten Seite des Knotens 312 vorgesehen sein, wie dargestellt. Dies liegt daran, dass während der Traversierung des Abfrageplans 300 zur Ausführung ein untergeordneter Knoten des Knotens 312 auf der linken Seite des Knotens 312 (d. h. der Knoten 310) vor dem untergeordneten Knoten auf der rechten Seite des Knotens 314 traversiert und ausgeführt wird. Die Traversierung des Abfrageplans 300 wird später erläutert.
  • Ein Knoten 316 gibt an, dass diejenigen Datensätze, die den 9. Juni 2020 als Bestelldatum haben, aus den Datensätzen gefiltert werden sollen, die durch die Ausführung des Knotens 312 erhalten werden. Der Filtervorgang kann z. B. von der dritten Rechenvorrichtung 212 als Reaktion auf eine Anweisung vom System 100 oder vom System 100 durchgeführt werden. Ein Knoten 317 kann die Rückgabe der gefilterten Datensätze an den Client veranlassen, der die Abfrage 218 gesendet hat.
  • Der zweite Teilplan 304 kann einen zweiten Indexknoten 318 und den Auftragsknoten 308 als Blattknoten enthalten, die den zweiten Index bzw. die Tabelle ORDERS darstellen. Ein Knoten 320 enthält einen Leseoperator, der angibt, dass Datensätze im zweiten Index, die am 9. Juni 2020 abgelegt wurden, gelesen werden sollen. Der Lesevorgang kann von der zweiten Rechenvorrichtung 210 durchgeführt werden, da die zweite Rechenvorrichtung 210 der zweiten Platte 204 entspricht, auf der der zweite Index gespeichert ist. Der Lesevorgang identifiziert Bestellnummern von Bestellungen, die am 9. Juni 2020 aufgegeben wurden. Ein Knoten 322 enthält einen Index-Join-Operator, der die Verknüpfung der aus dem zweiten Index gelesenen Datensätze mit den entsprechenden Datensätzen in der Tabelle ORDERS bewirkt. Um die Verknüpfung durchzuführen, kann der Index-Verknüpfungsoperator Informationen über die aus dem zweiten Index gelesenen Datensätze an einen Knoten 324 weitergeben. Der Knoten 324 enthält einen Leseoperator, der angibt, dass Datensätze in der Tabelle ORDERS, die den bei der Ausführung des Knotens 320 identifizierten Auftragsnummern entsprechen, gelesen werden sollen. Der Lesevorgang kann von der dritten Rechenvorrichtung 212 durchgeführt werden. Der Knoten 322 liefert die Ergebnisse der Index-Join-Operation der Tabelle ORDERS und des zweiten Index. In einem Beispiel können die Knoten 320 und 324 unterhalb des Knotens 322 und links bzw. rechts vom Knoten 322 vorgesehen sein. Ein Knoten 326 gibt an, dass aus den Datensätzen, die durch die Ausführung des Knotens 322 erhalten werden, diejenigen gefiltert werden sollen, die vom Kunden C_15 bestellt wurden. Der Knoten 317 kann die gefilterten Datensätze als Antwort auf die Abfrage 218 zurückgeben.
  • Obwohl nicht dargestellt, kann ein Teilplan in einem Beispiel auch die Komponenten angeben, die an seiner Ausführung beteiligt sein sollen. Des Weiteren kann ein Teilplan auch als Ausführungspfad bezeichnet werden, da er den Pfad angibt, der zum Erreichen einer Ausgabe zu befolgen ist.
  • Das System 100 kann einen des ersten Teilplans 302 und des zweiten Teilplans 304 zur Ausführung während der Ausführung des Abfrageplans 300 auswählen. Die Auswahl kann auf den Laufzeitleistungsparametern von Komponenten basieren, die an der Ausführung des ersten Teilplans 302 beteiligt sein sollen, wie z. B. dem ersten Index, der Tabelle ORDERS, dem ersten Prozessor, dem ersten Speicher, einem dritten Prozessor (Prozessor der dritten Rechenvorrichtung 212), einem dritten Speicher (einem Speicher der dritten Rechenvorrichtung 212), der ersten Festplatte 202 und der dritten Festplatte 206. Die Auswahl kann auch auf den Laufzeit-Leistungsparametern von Komponenten basieren, die an der Ausführung des zweiten Teilplans 304 beteiligt sein sollen, wie der zweite Index, die Tabelle ORDERS, der zweite Prozessor, der zweite Speicher, der dritte Prozessor, der dritte Speicher, die zweite Platte 204 und die dritte Platte 206. Die Auswahl kann zur Laufzeit erfolgen, d. h. während der Ausführung des Abfrageplans 300 und kurz bevor einer von dem ersten Teilplan 302 und dem zweiten Teilplan 304 ausgeführt werden soll. Dementsprechend wird die Auswahl des Teilplans auf der Grundlage von Werten der Laufzeitleistungsparameter durchgeführt, die zum Zeitpunkt der Ausführung des Teilplans vorliegen. Wenn also anhand der Laufzeitleistungsparameter festgestellt wird, dass eine an der Ausführung des zweiten Teilplans 304 beteiligte Komponente stark belastet ist und die an der Ausführung des ersten Teilplans 302 beteiligten Komponenten leicht oder mäßig belastet sind, kann der erste Teilplan 302 ausgewählt werden. Der erste Teilplan 302 ist in durchgezogenen Linien und der zweite Teilplan 304 in gepunkteten Linien dargestellt, um die Auswahl des ersten Teilplans 302 gegenüber dem zweiten Teilplan 304 anzuzeigen.
  • Um das Vorhandensein von äquivalenten Teilplänen anzuzeigen und die Auswahl eines der äquivalenten Teilpläne für die Ausführung zu erleichtern, kann der Abfrageoptimierer 216 einen Teilplanauswahloperator 328 im Abfrageplan 300 bereitstellen. Ähnlich wie andere Operatoren kann der Teilplan-Auswahloperator 328 als ein Knoten im Abfrageplan 300 bereitgestellt werden. Außerdem kann der Teilplan-Auswahloperator 328 als ein Knoten bereitgestellt werden, von dem die äquivalenten Teilpläne abzweigen, wie in der Abbildung gezeigt.
  • Der Teilplan-Auswahloperator 328 kann die Teilpläne angeben, denen er entspricht, z. B. den ersten Teilplan 302 und den zweiten Teilplan 304. Weiterhin kann der Teilplan-Auswahloperator 328 auch die Komponenten anzeigen, die an der Ausführung des ersten Teilplans 302 und der Komponenten, die an der Ausführung des zweiten Teilplans 304 beteiligt sind, beteiligt sind. Für die Angaben kann der Teilplan-Auswahloperator 328 eine Äquivalenzklasse 330 enthalten, die die Menge der an der Ausführung jedes äquivalenten Teilplans zu beteiligenden Komponenten angibt. Beispielsweise enthält die Äquivalenzklasse 330 einen ersten Eintrag 332, der die Komponenten angibt, die an der Ausführung des ersten Teilplans 302 beteiligt sind, und einen zweiten Eintrag 334, der die Komponenten angibt, die an der Ausführung des zweiten Teilplans 304 beteiligt sind. Zusätzlich zu den Komponenten kann ein Eintrag auch ein „Used Count“-Feld enthalten, das anzeigt, wie oft ein entsprechender Teilplan zur Ausführung ausgewählt wurde. Der Verwendungszähler kann verwendet werden, um eine einseitige Auswahl eines der äquivalenten Teilpläne für mehrere Ausführungen zu verhindern, wie mit Bezug auf erläutert wird.
  • Die Ausführung des Teilplanauswahloperators 328 kann die Bestimmung der Laufzeitleistungsparameter der am ersten Teilplan 302 zu beteiligenden Komponenten und der am zweiten Teilplan 304 zu beteiligenden Komponenten bewirken. Die Bestimmung der Laufzeitleistungsparameter kann z.B. durch das System 100 durchgeführt werden und wird mit Bezug auf erläutert. Weiterhin kann die Ausführung des Teilplan-Auswahloperators 328 auch die Auswahl eines des ersten Teilplans 302 und des zweiten Teilplans 304 bewirken. In einem Beispiel kann der Teilplan-Auswahloperator 328 von dem Rechengerät ausgeführt werden, das die Anfrage 218 empfangen hat, was das System 100 sein kann. Ferner kann der Teilplan-Auswahloperator 328 die Befehle 106 und 108 enthalten, die die Auswahl und Ausführung eines des ersten Teilplans 302 und des zweiten Teilplans 304 bewirken. In ähnlicher Weise können andere Teilplan-Auswahloperatoren in anderen Abfrageplänen ähnliche Anweisungen enthalten, um die Auswahl und Ausführung eines äquivalenten Teilplans zu veranlassen.
  • Indem die Bestimmung der Laufzeitleistungsparameter und die Auswahl des Teilplans während der Ausführung des Teilplan-Auswahloperators 328 (der während der Ausführung des Abfrageplans 300 ausgeführt wird) erfolgt, erleichtert der vorliegende Gegenstand die dynamische Bestimmung der Laufzeitleistungsparameter und die Auswahl von Teilplänen.
  • In einem Beispiel kann während der Ausführung des Operators zur Auswahl von Teilplänen eine Laufzeitkostenfunktion jedes Teilplans auf der Grundlage der Laufzeitleistungsparameter berechnet werden. Anschließend kann ein Teilplan auf der Grundlage eines Vergleichs der Laufzeitkostenfunktionen der verschiedenen Teilpläne ausgewählt werden. Die Auswahl eines Teilplans anhand von Laufzeitkostenfunktionen wird anhand von erläutert.
  • Im Betrieb kann das System 100 zur Ausführung des Abfrageplans 300 mit der Durchquerung des Abfrageplans 300 von der Wurzel des Abfrageplans 300, d. h. dem Knoten 317, beginnen und sich nach unten bewegen. Dementsprechend kann zu Beginn der Ausführung des Abfrageplans 300 der Knoten 317 durchlaufen werden und es kann festgestellt werden, dass es keine Ergebnisse gibt, die zurückgegeben werden müssen. Dementsprechend kann sich das System 100 im Abfrageplan 300 nach unten bewegen und den Teilplan-Auswahloperator 328 erreichen. Der Teilplan-Auswahloperator 328 kann die Berechnung der Laufzeitkostenfunktion für den ersten Teilplan 302 und für den zweiten Teilplan 304 veranlassen. Basierend auf den Laufzeitkostenfunktionen kann der erste Teilplan 302 ausgewählt werden. Anschließend kann das System 100 den ersten Teilplan 302 oder einen Teil davon ausführen oder eine andere Rechenvorrichtung, wie die erste Rechenvorrichtung 208 oder die dritte Rechenvorrichtung 212, anweisen, den ersten Teilplan 302 oder einen Teil davon auszuführen.
  • Wenn der erste Teilplan 302 ausgewählt ist, kann der Knoten 316 zuerst durchlaufen werden. Da noch keine zu filternden Datensätze vorhanden sind, kann als nächstes der Knoten 312 durchlaufen werden. Da der Knoten 312 zwei untergeordnete Knoten hat, kann der untergeordnete Knoten auf der linken Seite des Knotens 312, d. h. der Knoten 310, durchlaufen werden, und die in diesem Knoten angegebene Operation, d. h. das Lesen von Datensätzen aus dem ersten Index, kann durchgeführt werden. Nach Abschluss des vom Knoten 310 angegebenen Vorgangs können die Ergebnisse an den Knoten 312 zurückgegeben werden. Anschließend kann der Knoten 314 durchlaufen werden. Das Ergebnis der Operation am Knoten 314 kann dann an den Knoten 312 zurückgegeben werden. Anschließend kann das Ergebnis des Knotens 312, d. h. die nach der Indexvereinigungsoperation erhaltenen Datensätze, an den Knoten 316 zurückgegeben werden. Die Traversierung des Knotens 316 bewirkt eine Filterung der Datensätze. Die gefilterten Datensätze können dann an den Teilplanauswahloperator 328 zurückgegeben werden, der die gefilterten Datensätze an den Knoten 317 zurückgibt. Der Knoten 317 gibt dann die Ergebnisse als Antwort auf die Abfrage 218 zurück.
  • Obwohl mit Bezug auf einen Abfrageplan mit zwei äquivalenten Teilplänen erklärt wird, wird der vorliegende Gegenstand zur Erzeugung und Ausführung von Abfrageplänen mit mehr als zwei äquivalenten Teilplänen verwendet. Ferner kann ein Abfrageplan mehr als einen Satz äquivalenter Teilpläne enthalten, wobei ein äquivalenter Teilplan eines ersten Satzes eine Ausgabe der Ausführung eines äquivalenten Teilplans eines zweiten Satzes erhalten soll. In einem solchen Fall kann der erste Satz von Teilplänen über dem zweiten Satz von Teilplänen auf dem Abfrageplan angeordnet sein (da die Daten in einem Abfrageplan in einer Aufwärtsrichtung fließen). Außerdem kann die Durchquerung des Abfrageplans an der Wurzel des Abfrageplans beginnen und sich nach unten bewegen, ähnlich wie bei der Durchquerung des Abfrageplans 300. Da der erste Satz von Teilplänen vor dem zweiten Satz von Teilplänen während der Traversierung angetroffen wird, kann ein Teilplan aus dem ersten Satz von Teilplänen auf der Grundlage der Laufzeitleistungsparameter ausgewählt werden. Außerdem kann ein Teil des ausgewählten Teilplans, der ausgeführt werden kann, ohne die Eingabe von einem Teilplan der zweiten Menge zu erhalten, ausgeführt werden. Anschließend wird die Traversierung abwärts fortgesetzt, und wenn der zweite Satz von Teilplänen angetroffen wird, wird einer des zweiten Satzes ausgewählt und ausgeführt. Das Ergebnis der Ausführung wird dann dem ausgewählten Teilplan der ersten Menge zur Verfügung gestellt. Danach wird die Ausführung des ausgewählten Teilplans des ersten Satzes abgeschlossen. Ein Beispiel für einen Abfrageplan mit mehreren Gruppen von Teilplänen und dessen Durchlaufen wird anhand von erläutert.
  • In der obigen Erläuterung werden die äquivalenten Teilpläne unter Bezugnahme auf einen ersten Teilplan mit der Verwendung eines ersten Index und einen zweiten Teilplan mit der Verwendung eines zweiten Index erklärt. Es wird jedoch deutlich, dass die Techniken des vorliegenden Gegenstands in Szenarien verwendet werden können, in denen drei oder mehr äquivalente Teilpläne, die jeweils einen anderen Index verwenden, gebildet werden können. Weiterhin kann der vorliegende Gegenstand in Szenarien verwendet werden, in denen mehr als eine Kopie eines Indexes verfügbar ist. Nehmen wir zum Beispiel an, dass zwei Kopien des ersten Indexes verfügbar sind. Dementsprechend kann ein Teilplan die Verwendung der ersten Kopie des ersten Indexes beinhalten und ein anderer Teilplan die Verwendung der zweiten Kopie des ersten Indexes. Ferner kann einer der Teilpläne auf der Grundlage der Anzahl der Zugriffsanforderungen pro Zeiteinheit für die erste Kopie und die zweite Kopie, der Latenz der Festplatten, auf denen die erste Kopie und die zweite Kopie gespeichert sind (wenn die erste Kopie und die zweite Kopie auf verschiedenen Festplatten gespeichert sind), der Auslastungszeiten der Prozessoren, die Datensätze aus der ersten Kopie und der zweiten Kopie lesen sollen, und dergleichen ausgewählt werden. Mit Hilfe des vorliegenden Gegenstands kann also die für die Ausführung von Abfragen benötigte Zeit reduziert werden, wenn mehrere Kopien einer Indexdatei gespeichert sind. So kann ein Datenbankadministrator mehrere Kopien einer Indexdatei erstellen, um die Techniken des vorliegenden Gegenstands zu nutzen und die Geschwindigkeit der Ausführung von Abfrageplänen zu erhöhen. In ähnlicher Weise können auch mehrere Kopien einer Tabelle erstellt und in Abfrageplänen verwendet werden.
  • zeigt ein Verfahren 400 zur Auswahl eines Teilplans aus einer Vielzahl von gleichwertigen Teilplänen, gemäß einer Beispielimplementierung des vorliegenden Gegenstands. Die Reihenfolge, in der das Verfahren 400 beschrieben wird, ist nicht als Einschränkung zu verstehen, und eine beliebige Anzahl der beschriebenen Verfahrensblöcke kann in beliebiger Reihenfolge kombiniert werden, um das Verfahren 400 oder alternative Verfahren zu implementieren. Darüber hinaus kann das Verfahren 400 durch (eine) Verarbeitungsressource(n) oder (ein) Rechengerät(e) durch jede geeignete Hardware, nicht-transitorische maschinenlesbare Anweisungen oder eine Kombination davon implementiert werden.
  • Es kann davon ausgegangen werden, dass die Schritte des Verfahrens 400 von programmierten Rechengeräten durchgeführt werden können und auf der Grundlage von Anweisungen ausgeführt werden können, die in einem nicht-transitären computerlesbaren Medium gespeichert sind. Das nichttransitorische computerlesbare Medium kann z. B. digitale Speicher, magnetische Speichermedien wie Magnetplatten und Magnetbänder, Festplatten oder optisch lesbare digitale Datenspeichermedien umfassen. Obwohl das Verfahren 400 in einer Vielzahl von Systemen implementiert werden kann, wird das Verfahren 400 zur Vereinfachung der Erklärung in Bezug auf das System 100 beschrieben. In einem Beispiel können die Schritte des Verfahrens 400 von einer Verarbeitungsressource, wie z. B. dem Prozessor 102, durchgeführt werden.
  • In einem Beispiel kann das Verfahren 400 durchgeführt werden, wenn ein Teilplanauswahloperator, wie der Teilplanauswahloperator 328, ausgeführt wird. In Block 402 wird ein erster Teilplan für die Bestimmung der Laufzeitleistungsparameter ausgewählt. Der erste Teilplan kann ein äquivalenter Teilplan sein, dem ein Eintrag, wie der erste Eintrag 332, in einer Äquivalenzklasse, wie der Äquivalenzklasse 330, des Teilplanauswahloperators entspricht. Der erste Teilplan kann z. B. der erste Teilplan 302 sein. Wie bereits erläutert, kann der Teilplan-Auswahloperator eine Vielzahl von Komponenten angeben, die an der Ausführung des ersten Teilplans beteiligt sind, auch als erste Vielzahl von Komponenten bezeichnet.
  • In Block 404 können die Laufzeitleistungsparameter der ersten Vielzahl von Komponenten bestimmt werden. In einem Beispiel können zur Bestimmung der Laufzeitleistungsparameter verschiedene Leistungszähler, die den Komponenten entsprechen, genutzt werden. Zum Beispiel kann ein Zähler, der einem Prozessor zugeordnet ist, die Zeit überwachen, in der der Prozessor Code ausführt. In ähnlicher Weise kann ein Zähler, der einer Festplatte zugeordnet ist, die Arbeitslast der Festplatte überwachen. Solche Zähler können direkt die Laufzeitleistungsparameter der zugehörigen Komponenten liefern. In einem Beispiel kann ein Dienst eine Eingabe bezüglich der Leistung einer Komponente erhalten und einen Laufzeitleistungsparameter basierend auf der Eingabe ableiten.
  • In Block 406 wird eine Laufzeitkostenfunktion für den ersten Teilplan auf der Grundlage der Laufzeitleistungsparameter der ersten Vielzahl von Komponenten geschätzt. Die Laufzeitkostenfunktion kann ein Maß für die Auslastung der Komponenten und die Zeit sein, die wahrscheinlich für die Ausführung des Teilplans verbraucht wird. Ein höherer Wert der Laufzeitkostenfunktion zeigt an, dass die Arbeitslasten der beteiligten Komponenten höher sind und dass mehr Zeit für die Ausführung der Laufzeitkostenfunktion verbraucht wird. In einem Beispiel wird zur Schätzung der Laufzeitkostenfunktion ein Laufzeitleistungsparameter mit seinem entsprechenden Referenzwert verglichen. Der Referenzwert kann der bestmögliche Wert des Laufzeitleistungsparameters für eine schnelle Ausführung des Abfrageplans sein. Ein Referenzwert für die Warteschlangenlänge eines Datenträgers kann z. B. Null sein, da Null die kleinstmögliche Warteschlangenlänge ist und bedeutet, dass es keine anstehenden Anfragen bei dem Datenträger gibt und gewährleistet, dass ein Datensatz schnell von dem Datenträger abgerufen werden kann. In ähnlicher Weise kann ein Referenzwert für die Latenzzeit eines Datenträgers 5 Millisekunden sein, da 5 Millisekunden der kleinstmögliche Wert für die Latenzzeit ist und einen schnellen Abruf von Datensätzen von dem Datenträger gewährleisten kann. In ähnlicher Weise kann ein Referenzwert für die Anzahl der Zugriffsanforderungen pro Zeiteinheit für eine Datei Null sein, was ein schnelles Nachschlagen von Datensätzen in der Datei gewährleistet. Auf diese Weise können Referenzwerte auch für andere Laufzeitleistungsparameter konfiguriert werden.
  • In einem Beispiel kann der Vergleich der Laufzeit-Performance-Parameter und ihrer entsprechenden Referenzwerte durch Anordnen der Laufzeit-Performance-Parameter in einer Vektorform und Anordnen der Referenzwerte in einer Vektorform erfolgen. Betrachten Sie zum Beispiel, dass die Platten D1 und D2 und die Dateien F1 und F2 am ersten Teilplan beteiligt sind. Nehmen wir weiter an, dass zwei Laufzeit-Performance-Parameter P1 und P2, z. B. Warteschlangenlänge und Latenz, für eine Platte und ein Laufzeit-Performance-Parameter P3, z. B. Anzahl der Zugriffsanforderungen pro Zeiteinheit, für eine Datei in Betracht gezogen werden. Die Laufzeitleistungsparameter P1 und P2 der Festplatten D1 und D2 können P1D1 und P2D1 bzw. P1D2 und P2D2 sein. Außerdem können die Laufzeitparameter P3 der Dateien F1 und F2 P3F1 bzw. P3F2 sein. Dementsprechend können die Laufzeitparameter in einer Vektorform angeordnet sein als (P1D1, P2D1, P1D2, P2D2, P3F1, P3F2). Der Vektor mit den Laufzeitleistungsparametern der an einem Teilplan beteiligten Komponenten kann als Teilplanvektor bezeichnet werden.
  • Weiterhin können die Referenzwerte der Laufzeitleistungsparameter auch in einer Vektorform angeordnet sein. Ein solcher Vektor kann als Referenzvektor bezeichnet werden. Der Referenzvektor kann den Referenzwert für jeden Laufzeit-Performance-Parameter in dem Teilplanvektor haben, mit dem der Referenzvektor verglichen werden soll, und kann die Dimension des Teilplanvektors haben. Nehmen wir zum Beispiel an, dass die Referenzwerte der Leistungsparameter P1, P2 und P3 jeweils P1 R, P2R und P3R sind. Dementsprechend kann der Referenzvektor als (P1 R, P2R, P1R, P2R, P3R, P3R) angeordnet sein.
  • Die Anordnung des Referenzvektors in der oben gezeigten Form ermöglicht den Vergleich des Teilplanvektors mit dem Referenzvektor. In einem Beispiel kann der Vergleich durch die Berechnung eines euklidischen Abstands zwischen dem Teilplanvektor und dem Referenzvektor gemäß der unten angegebenen Gleichung durchgeführt werden: ( P 1 D 1 P 1 R ) 2 + ( P 2 D 1 P 2 R ) 2 + ( P 1 D 2 P 1 R ) 2 + ( P 2 D 2 P 2 R ) 2 + ( P 3 F 1 P 3 R ) 2 + ( P 3 F 2 P 3 R ) 2
    Figure DE102021109138A1_0001
  • Der oben berechnete euklidische Abstand kann die Laufzeitkostenfunktion sein, die dem ersten Teilplan entspricht, und kann als erste Laufzeitkostenfunktion oder erste Laufzeitkosten bezeichnet werden. Wie zu verstehen ist, zeigt ein niedrigerer Wert der Laufzeitkostenfunktion an, dass die Laufzeitleistungsparameter der Komponenten näher an ihren Referenzwerten liegen, und zeigt daher an, dass der entsprechende Teilplan wahrscheinlich in einer kurzen Zeitspanne ausgeführt werden kann. In einem Beispiel kann die Laufzeitkostenfunktion auch auf der Grundlage der Netzwerklatenz in einer Kommunikation zwischen einer Recheneinheit, die eine Festplatte verwaltet, und einer anderen Recheneinheit, an die ein Datensatz von der Festplatte zur weiteren Verarbeitung zurückgegeben werden soll, geschätzt werden. Die Laufzeitkostenfunktion kann auch auf der Grundlage der Mietkosten eines Prozessors bestimmt werden, der an der Ausführung eines Teilplans beteiligt ist.
  • Obwohl die Laufzeitkostenfunktion mit Bezug auf den euklidischen Abstand erklärt wird, kann in einem Beispiel auch eine andere Technik zum Vergleich von Vektoren in einem n-dimensionalen Raum verwendet werden, um die Laufzeitkostenfunktion zu bestimmen.
  • Wenn in Block 408 festgestellt wird, dass der Teilplan, für den die Laufzeitkostenfunktion berechnet wird, der erste aus der Vielzahl von äquivalenten Teilplänen ist, die vom Teilplan-Auswahloperator angegeben wurden, kann in Block 410 der erste Teilplan als bester Teilplan und die Laufzeitkostenfunktion für den ersten Teilplan als die geringsten Kosten festgelegt werden. Anschließend kann in Block 411 der nächste Teilplan, z. B. der zweite Teilplan 304, der vom Teilplanauswahloperator angegeben wurde, ausgewählt werden. Ferner können die Laufzeitkosten für die Ausführung des zweiten Teilplans auf der Grundlage der Laufzeitleistungsparameter einer zweiten Vielzahl von Komponenten berechnet werden, die an dem zweiten Teilplan beteiligt sein sollen. Die Laufzeitkostenfunktion, die dem zweiten Teilplan entspricht, kann als zweite Laufzeitkostenfunktion oder als zweite Laufzeitkosten bezeichnet werden. Der nächste ausgewählte Teilplan wird in den folgenden Abschnitten als zweiter Teilplan erklärt. Weiterhin wird der beste Teilplan als erster Teilplan erklärt.
  • Wenn in Block 408 festgestellt wird, dass der Teilplan, für den die Laufzeitkostenfunktion berechnet wird, nicht der erste aus der Vielzahl der äquivalenten Teilpläne ist, wird in Block 412 die zweite Laufzeitkostenfunktion mit den geringsten Kosten verglichen. Wenn festgestellt wird, dass die zweite Laufzeitkostenfunktion kleiner als die geringsten Kosten ist, kann in Block 416 der zweite Teilplan als bester Teilplan ausgewählt und die zweite Laufzeitkostenfunktion als die geringsten Kosten festgelegt werden. Wenn in Block 418 festgestellt wird, dass die zweite Laufzeitkostenfunktion größer als die geringsten Kosten ist, kann in Block 420 der zweite Teilplan ignoriert werden.
  • Wenn die zweite Laufzeitkostenfunktion gleich den geringsten Kosten ist, kann zur Bestimmung, ob der erste Teilplan oder der zweite Teilplan zu verwenden ist, eine Anzahl von Malen, die der erste Teilplan zur Ausführung ausgewählt wurde, und eine Anzahl von Malen, die der zweite Teilplan zur Ausführung ausgewählt wurde, verwendet werden. Die Anzahl, wie oft ein Teilplan ausgewählt wurde, kann als Zählung der verwendeten Teilpläne bezeichnet werden. In Block 422 werden die Verwendungszahl des ersten Teilplans und die des zweiten Teilplans verglichen. Wenn die Benutzungszahl des ersten Teilplans kleiner ist als die des zweiten Teilplans, kann in Block 424 der zweite Teilplan ignoriert und der erste Teilplan als bester Teilplan beibehalten werden. Wenn andererseits die Anzahl der verwendeten Werte des zweiten Teilplans geringer ist als die des ersten Teilplans, kann in Block 426 der zweite Teilplan als bester Teilplan eingestellt werden. Die Einstellung des Teilplans mit der geringeren Anzahl verwendeter Zähler als bester Teilplan hilft bei der gleichmäßigen Ausnutzung aller verfügbaren Teilpläne. Dementsprechend können die an verschiedenen Teilplänen beteiligten Komponenten gleichmäßig für die Ausführung des Abfrageplans verwendet werden.
  • In Block 428 kann ermittelt werden, ob weitere Teilpläne im Teilplanauswahloperator angegeben sind. Wenn ja, kann in Block 430 der nächste angegebene Teilplan ausgewählt werden, und die Aktionen ab Block 404 können wiederholt werden. Wenn nicht, kann in Block 432 der beste Plan für die Ausführung des Abfrageplans verwendet werden. Ferner wird in Block 434 die Anzahl der verwendeten Teilpläne um eins erhöht.
  • Die Anzahl der verwendeten Teilpläne kann zur Verbesserung des Abfrageausführungsprozesses verwendet werden. Das System 100 kann auf einseitige Verwendungszahlen von äquivalenten Teilplänen prüfen, z. B. wenn ein äquivalenter Teilplan viel häufiger ausgewählt und ausgeführt wird als ein anderer äquivalenter Teilplan. Bei der Erkennung von einseitig genutzten Zählungen kann das System 100 eine Rückmeldung geben, z. B. an einen Datenbankadministrator, dass die Komponenten, die an dem übermäßig genutzten Teilplan beteiligt sind, möglicherweise überlastet sind, und kann Abhilfemaßnahmen vorschlagen. Beispielsweise kann das System 100 die Erstellung zusätzlicher Kopien von Indizes oder die Verschiebung von Dateien von einer Festplatte auf eine andere anregen. Das System 100 kann auch anhand der Zählungen lernen, welche Teilpläne effizienter sind, und kann die effizienten Teilpläne als Standard-Teilpläne festlegen. Anschließend können die Standard-Subpläne ohne eine Laufzeitauswahl verwendet werden, wenn die Laufzeitauswahl nicht durchgeführt werden soll (z. B. aufgrund einer Anweisung des Datenbankadministrators).
  • Obwohl erklärt wird, dass die Auswahl auf der Grundlage der Laufzeitkostenfunktion erfolgt, kann in einem Beispiel auch eine Kostenfunktion, die auf der Grundlage der Menge der für die Ausführung eines Teilplans zu verbrauchenden Ressourcen bestimmt wird, für die Auswahl verwendet werden. Eine solche Kostenfunktion kann als statische Kostenfunktion oder statische Kosten bezeichnet werden. Die statische Kostenfunktion kann z. B. auf der Grundlage von Statistiken von Tabellen ermittelt werden, die an der Ausführung eines Teilplans beteiligt sein sollen. Die statischen Kosten können vor der Ausführung des Abfrageplans zusammen mit der Laufzeitkostenfunktion bestimmt werden. In einem Beispiel kann eine gewichtete Summe aus der Laufzeit-Kostenfunktion und der statischen Kostenfunktion für die Auswahl eines Teilplans verwendet werden.
  • zeigt einen Abfrageplan 500, der vom Abfrageoptimierer 216 gemäß einer Beispielimplementierung des vorliegenden Gegenstands erzeugt wurde. Der Abfrageplan 500 enthält einen ersten Satz von äquivalenten Teilplänen 502 und einen zweiten Satz von äquivalenten Teilplänen 504, die auch als erster Satz von Teilplänen 502 und zweiter Satz von Teilplänen 504 bezeichnet werden. Der erste Satz von Teilplänen 502 enthält einen ersten Teilplan 506 und einen zweiten Teilplan 508. Der Abfrageplan 500 kann zwei Kopien des zweiten Satzes von Teilplänen 504 enthalten, wobei die erste Kopie 504-1 eine Ausgabe an den ersten Teilplan 506 und die zweite Kopie 504-2 eine Ausgabe an den zweiten Teilplan 508 liefert. Jede Kopie enthält identische Sätze von Teilplänen. Zum Beispiel enthält die erste Kopie 504-1 eine erste Kopie 510-1 eines dritten Teilplans und eine erste Kopie 512-1 eines vierten Teilplans und die zweite Kopie 504-2 enthält eine zweite Kopie 510-2 des dritten Teilplans und eine zweite Kopie 512-2 des vierten Teilplans. Die erste Kopie 510-1 des dritten Teilplans und die zweite Kopie 510-2 des dritten Teilplans können als der dritte Teilplan 510 bezeichnet werden. Analog dazu können die erste Kopie 512-1 des vierten Teilplans und die zweite Kopie 512-2 des vierten Teilplans als vierter Teilplan 512 bezeichnet werden.
  • Jede Kopie des dritten Teilplans (510-1 und 510-2) kann eine Indexverknüpfung eines ersten Index und einer Tabelle beinhalten (ähnlich wie der erste Teilplan 302), während jede Kopie des vierten Teilplans (512-1 und 512-2) eine Indexverknüpfung eines zweiten Index und der Tabelle beinhalten kann (ähnlich wie der zweite Teilplan 304). Eine Ausgabe der ersten Kopie 510-1 des dritten Teilplans oder der ersten Kopie 512-1 des vierten Teilplans (je nachdem, welcher ausgewählt und ausgeführt wird) kann als Eingabe für den ersten Teilplan 506 bereitgestellt werden (wenn der erste Teilplan 506 ausgewählt ist). In ähnlicher Weise kann eine Ausgabe der zweiten Kopie 510-2 des dritten Teilplans oder der zweiten Kopie 512-2 des vierten Teilplans (je nachdem, welcher ausgewählt und ausgeführt wird) als Eingabe für den zweiten Teilplan 508 bereitgestellt werden (wenn der zweite Teilplan 508 ausgewählt ist). Es ist anzumerken, dass beide Kopien des dritten Teilplans 510 die gleichen Funktionen ausführen und sich in Bezug auf den Teilplan unterscheiden, an den sie ihre jeweiligen Ausgaben liefern. In ähnlicher Weise führen beide Kopien des vierten Teilplans 512 die gleichen Funktionen aus und unterscheiden sich hinsichtlich des Teilplans, dem sie ihre jeweiligen Ausgänge zur Verfügung stellen.
  • Der erste Teilplan 506 kann eine Indexverknüpfung der ersten Kopie eines Indexes und des Ergebnisses, das aus der Ausführung einer der zweiten Gruppe von Teilplänen 504 erhalten wurde, beinhalten, während der zweite Teilplan 508 eine zweite Kopie des Indexes und das Ergebnis, das aus der Ausführung einer der zweiten Gruppe von Teilplänen 504 erhalten wurde, beinhalten kann. Eine Ausgabe des ersten Teilplans 506 oder des zweiten Teilplans 508 kann an Knoten 514 gefiltert werden und als Antwort auf eine Datenbankabfrage an Knoten 516 zurückgegeben werden.
  • Der Abfrageplan 500 kann einen ersten Teilplan-Auswahloperator 518 enthalten, um einen aus dem ersten Teilplan 506 und dem zweiten Teilplan 508 zur Ausführung auszuwählen. Der Abfrageplan 500 kann auch einen zweiten Teilplan-Auswahloperator 520 enthalten, um einen aus der ersten Kopie 510-1 des dritten Teilplans und der ersten Kopie 512-1 des vierten Teilplans auszuwählen und die Ausgabe des ausgewählten Teilplans an den ersten Teilplan 506 zu liefern, wenn der erste Teilplan 506 ausgewählt ist. Der Abfrageplan 500 kann weiterhin einen dritten Teilplan-Auswahloperator 522 enthalten, um einen aus der zweiten Kopie 510-2 des dritten Teilplans und der zweiten Kopie 512-2 des vierten Teilplans auszuwählen und die Ausgabe des ausgewählten Teilplans an den zweiten Teilplan 508 zu liefern, wenn der zweite Teilplan 508 ausgewählt ist.
  • Die Traversierung des Abfrageplans 500 zur Ausführung wird nun erläutert. Ähnlich wie bei der Traversierung des Abfrageplans 300 kann die Traversierung des Abfrageplans 500 am Wurzelknoten des Abfrageplans, d. h. am Knoten 516, beginnen. Da an dem Knoten 516 und dem Knoten 514 keine Operation durchgeführt werden soll, kann das System 100 den ersten Teilplan-Auswahloperator 518 durchlaufen. Der erste Teilplan-Auswahloperator 518 kann die Berechnung der Laufzeitkostenfunktion des ersten Teilplans 506 und des zweiten Teilplans 508 auf der Grundlage der Laufzeitleistungsparameter der an der Ausführung beteiligten Komponenten veranlassen. Die an der Ausführung des ersten Teilplans 506 beteiligten Komponenten können beispielsweise die erste Kopie des Index, eine Festplatte, auf der die erste Kopie gespeichert ist, einen Prozessor, der die Abtastung der ersten Kopie durchführen soll, und einen Prozessor, der die Verknüpfungsoperation an einem Knoten 524 durchführen soll, umfassen. In ähnlicher Weise können die Komponenten, die an der Ausführung des zweiten Teilplans 508 beteiligt sind, z. B. die zweite Kopie des Index, eine Festplatte, auf der die zweite Kopie gespeichert ist, einen Prozessor, der den Scan der zweiten Kopie durchführen soll, und einen Prozessor, der die Verknüpfungsoperation an einem Knoten 526 durchführen soll, umfassen. Basierend auf den Laufzeitkostenfunktionen kann einer der Teilpläne, z. B. der erste Teilplan 506, ausgewählt werden.
  • Ferner kann die Ausführung des ersten Teilplans 506 beispielsweise durch Durchlaufen des Knotens 524 und dann eines Knotens 528 (der ein untergeordneter Knoten des Knotens 524 ist und sich links vom Knoten 524 befindet) begonnen werden. Beim Durchlaufen des Knotens 528 wird ein Scan der ersten Kopie des Indexes durchgeführt. Da der Kindknoten rechts vom Knoten 524 der zweite Teilplanauswahloperator 520 ist, werden die Laufzeitkostenfunktionen der ersten Kopie 510-1 des dritten Teilplans und der ersten Kopie 512-1 des vierten Teilplans berechnet und einer der Teilpläne ausgewählt. Der ausgewählte Teilplan, der die erste Kopie 512-1 des vierten Teilplans sein kann, kann ausgeführt werden und die Ausgabe kann dem zweiten Teilplanauswahloperator 520 zur Verfügung gestellt werden. Der zweite Teilplan-Auswahloperator 520 kann die Ausgabe an den Knoten 524 liefern, um die Ausführung des ersten Teilplans 506 abzuschließen. Es kann angemerkt werden, dass die Auswahl eines des zweiten Satzes von äquivalenten Teilplänen 504 unmittelbar vor der Ausführung eines der Teilpläne durchgeführt wird. Somit wird gemäß dem vorliegenden Gegenstand ein auszuführender Teilplan unmittelbar vor der Ausführung des Teilplans ausgewählt, selbst in Fällen, in denen Abfragepläne mehrere Sätze von Teilplänen enthalten.
  • Die aufgeschobene Auswahl, wie oben erläutert, bietet eine erhebliche Zeitersparnis bei der Ausführung eines Abfrageplans. Nehmen wir zum Beispiel an, dass zwei Sätze äquivalenter Teilpläne ausgeführt werden sollen. Die Auswahl eines Teilplans aus dem ersten Satz äquivalenter Teilpläne kann zum Zeitpunkt T basierend auf den Laufzeitleistungsparametern zum Zeitpunkt T erfolgen. Ferner kann die Auswahl eines Teilplans aus dem zweiten Satz äquivalenter Teilpläne zum Zeitpunkt T+ U basierend auf den Laufzeitleistungsparametern zum Zeitpunkt T+ U erfolgen. Die Zeitdifferenz U zwischen der ersten Auswahl und der zweiten Auswahl kann groß sein, z. B. einige Stunden im Falle eines langlaufenden Abfrageplans. Während dieser Zeit können sich die Laufzeit-Performance-Parameter verändert haben. Durch die Verschiebung der zweiten Auswahl wird die Auswahl eines Teilplans, der zu einer Auslastung von überlasteten Komponenten geführt hätte, vermieden und der Teilplan ausgewählt, der die bessere Performance liefern kann.
  • Obwohl die Traversierung des Abfrageplans anhand eines Abfrageplans mit zwei Sätzen von Teilplänen erklärt wird, versteht es sich von selbst, dass die Traversierung wie oben erklärt für Abfragepläne mit mehr Sätzen von Teilplänen erweitert werden kann. Obwohl die Auswahl von Teilplänen unter Bezugnahme auf Teilpläne, die auf Index-Join-Operationen basieren, erläutert wird, kann der vorliegende Gegenstand auch zur Erzeugung und Auswahl anderer Arten von Teilplänen verwendet werden. Zum Beispiel kann ein Abfrageplan verschiedene Arten von Join-Operationen, wie einen Plan zur Durchführung eines verschachtelten Schleifen-Joins, einen Plan zur Durchführung eines Hash-Joins und einen Plan zur Durchführung eines Merge-Joins, als Join-Unterpläne haben. Ferner kann einer der Join-Teilpläne für die Durchführung einer Join-Operation auf der Grundlage von Laufzeit-Leistungsparametern eines Rechengeräts, wie z. B. der Auslastungszeit des Prozessors des Rechengeräts und der Größe des verfügbaren Speichers, ausgewählt werden, um den Abfrageplan auszuführen. Obwohl Abfragepläne mit Hilfe von Baumstrukturen erläutert werden, ist es zu verstehen, dass die Abfragepläne auch mit anderen Typen der Datenstrukturen implementiert werden können.
  • In einem Beispiel kann ein äquivalenter Teilplan dynamisch während der Ausführung eines Abfrageplans erzeugt werden. Nach der Generierung des äquivalenten Teilplans kann die dem Teilplan entsprechende Laufzeitkostenfunktion berechnet und mit derjenigen verglichen werden, die den anderen äquivalenten Teilplänen entspricht. Zum Beispiel kann der zweite Teilplan 304 oder der zweite Teilplan 508 während der Ausführung des Abfrageplans 300 bzw. des Abfrageplans 500 erzeugt werden. Eine solche Erzeugung kann z. B. erfolgen, wenn ein Teilplan-Auswahloperator während der Ausführung durchlaufen wird. Wenn z. B. der Teilplan-Auswahloperator 328 während der Ausführung des Abfrageplans 300 durchlaufen wird, kann ein zum ersten Teilplan 302 äquivalenter Teilplan erzeugt werden, und die entsprechenden Details können zur Äquivalenzklasse 330 hinzugefügt werden. Die Generierung eines neuen Teilplans kann die Abfrage eines Datenbankkatalogs nach der Existenz eines neuen Indexes auf einer Tabelle oder einer neuen Kopie eines Indexes beinhalten, der nach der Generierung des Abfrageplans erstellt worden sein kann. Um die dynamische Generierung der Teilpläne zu erleichtern, kann der Teilplan-Auswahloperator Anweisungen zur Generierung eines äquivalenten Teilplans enthalten. Dementsprechend kann der Teilplan-Auswahloperator als „Mini“-Abfrageoptimierer fungieren, der Teilpläne generiert, die ausgeführt werden können, um ein Ergebnis (Zwischen- oder Endergebnis) zu erhalten. Die dynamische Generierung von äquivalenten Teilplänen ermöglicht die Nutzung neuer Indizes und neuer Tabellen, die nach der Generierung der Abfragepläne erzeugt werden, wodurch die Ausführungsgeschwindigkeit der Teilpläne weiter erhöht wird.
  • und illustrieren die Methoden 600 und 700 zur Erzeugung eines Abfrageplans bzw. zur Ausführung eines Abfrageplans gemäß Beispielimplementierungen des vorliegenden Gegenstands. Die Reihenfolge, in der die Methoden 600 und 700 beschrieben sind, ist nicht als Einschränkung zu verstehen, und eine beliebige Anzahl der beschriebenen Verfahrensblöcke kann in beliebiger Reihenfolge kombiniert werden, um die Methoden 600 und 700 oder alternative Methoden zu implementieren. Darüber hinaus können die Verfahren 600 und 700 durch Verarbeitungsressourcen oder Rechengeräte durch jede geeignete Hardware oder Hardware implementiert werden, die Anweisungen ausführen, die auf einem nicht-transitären maschinenlesbaren Medium kodiert sind.
  • Es kann davon ausgegangen werden, dass Blöcke der Verfahren 600 und 700 von programmierten Rechengeräten ausgeführt werden können und auf der Grundlage von Anweisungen, die in einem nicht-transitorischen computerlesbaren Medium gespeichert sind, ausgeführt werden können. Das nicht-transitorische computerlesbare Medium kann beispielsweise digitale Speicher, magnetische Speichermedien, wie Magnetplatten und Magnetbänder, Festplatten oder optisch lesbare digitale Datenspeichermedien umfassen. Obwohl die Verfahren 600 und 700 in einer Vielzahl von Systemen implementiert werden können, werden die Verfahren 600 und 700 der Einfachheit halber in Bezug auf das System 100 beschrieben. In einem Beispiel können die Blöcke der Methoden 600 und 700 von einer Verarbeitungsressource, wie z. B. dem Prozessor 102, ausgeführt werden.
  • In ist das Verfahren 600 zur Erzeugung eines Abfrageplans, wie z. B. des Abfrageplans 300 und des Abfrageplans 500, dargestellt. Die Operationen in den Blöcken des Verfahrens 600 können z. B. vom Abfrageoptimierer 216 ausgeführt werden.
  • In Block 602 wird ein erster vorläufiger Abfrageplan erzeugt, um ein Ergebnis für eine Abfrage bereitzustellen. Der erste vorläufige Abfrageplan kann einen ersten Teilplan, wie z. B. den ersten Teilplan 302, und keinen zweiten Teilplan, wie z. B. den zweiten Teilplan 304, enthalten. In Block 604 wird ein zweiter vorläufiger Abfrageplan für die Bereitstellung des Ergebnisses für die Abfrage erzeugt. Der zweite vorläufige Abfrageplan kann den zweiten Teilplan enthalten, und nicht den ersten Teilplan. Der erste Teilplan und der zweite Teilplan können die gleiche Ausgabe liefern, wie zuvor erklärt. Der erste vorläufige Abfrageplan und der zweite vorläufige Abfrageplan können jeweils als Baumstrukturen mit einer Vielzahl von Knoten bereitgestellt werden. Weiterhin können der erste vorläufige Abfrageplan und der zweite vorläufige Abfrageplan unabhängig voneinander ausgeführt werden, um das Ergebnis der Abfrage bereitzustellen.
  • In Block 606 können der erste vorläufige Abfrageplan und der zweite vorläufige Abfrageplan zusammengeführt werden. Das Zusammenführen kann das Entfernen von doppelten Knoten zwischen dem ersten vorläufigen Abfrageplan und dem zweiten vorläufigen Abfrageplan beinhalten. Wenn z. B. ein erster Knoten im ersten vorläufigen Abfrageplan und ein zweiter Knoten im zweiten vorläufigen Abfrageplan die gleiche Funktion ausführen, kann einer von dem ersten Knoten und dem zweiten Knoten verworfen werden. Das Zusammenführen kann auch das Bereitstellen von Teilplänen aus dem ersten vorläufigen Abfrageplan und dem zweiten vorläufigen Abfrageplan beinhalten, die als äquivalente Teilpläne die gleiche Ausgabe liefern sollen. Da zum Beispiel der erste Teilplan und der zweite Teilplan die gleiche Ausgabe liefern, können sie als äquivalente Teilpläne bereitgestellt werden. Um zwei Teilpläne als äquivalente Teilpläne bereitzustellen, können die beiden Teilpläne beispielsweise eine Ausgabe an denselben Knoten im zusammengeführten Abfrageplan liefern.
  • In einem Beispiel können nicht alle generierten vorläufigen Abfragepläne zusammengeführt werden. Stattdessen können die statischen Kosten jedes vorläufigen Abfrageplans verglichen werden und eine Teilmenge der vorläufigen Abfragepläne mit niedrigen statischen Kosten kann zum Zusammenführen ausgewählt werden. Zum Beispiel können zwei vorläufige Abfragepläne mit den geringsten statischen Kosten und den zweitgeringsten statischen Kosten zum Zusammenführen ausgewählt werden. In einem weiteren Beispiel wird der vorläufige Abfrageplan mit den geringsten statischen Kosten mit anderen vorläufigen Abfrageplänen zusammengeführt, deren statische Kosten mit denen der geringsten statischen Kosten vergleichbar sind, z. B. weniger als 120 % der geringsten statischen Kosten. Die Auswahl der vorläufigen Abfragepläne für die Zusammenführung auf der Basis der statischen Kosten stellt sicher, dass die statischen Kosten angemessen gewichtet werden.
  • In Block 608 kann ein Teilplan-Auswahloperator, wie z. B. der Teilplan-Auswahloperator 328, erzeugt werden. Der Teilplan-Auswahloperator kann das Vorhandensein von äquivalenten Teilplänen anzeigen und die Auswahl eines der äquivalenten Teilpläne bewirken, wie zuvor erläutert. In einem Beispiel kann ein Teilplan-Auswahloperator für jeden Satz von äquivalenten Teilplänen im Abfrageplan bereitgestellt werden. So kann z. B. ein Teilplan-Auswahloperator für die Auswahl aus dem ersten Teilplan und dem zweiten Teilplan und ein weiterer Teilplan-Auswahloperator für die Auswahl aus einem dritten Teilplan und einem vierten Teilplan bereitgestellt werden. In einem Beispiel kann der Teilplan-Auswahloperator als ein Knoten vorgesehen sein, von dem die entsprechenden äquivalenten Teilpläne abzweigen, wie in und dargestellt.
  • In Block 610 wird ein Abfrageplan, wie z. B. der Abfrageplan 300 oder der Abfrageplan 500, erzeugt. Der Abfrageplan enthält den Teilplan-Auswahloperator und die entsprechenden Teilpläne.
  • veranschaulicht das Verfahren 700 zur Ausführung eines Abfrageplans gemäß einer Beispielimplementierung des vorliegenden Gegenstands. Das Verfahren kann z. B. vom System 100 ausgeführt werden.
  • In Block 702 wird ein Abfrageplan, wie z. B. der Abfrageplan 300 oder der Abfrageplan 500, zur Ausführung einer Datenbankabfrage empfangen. Der Abfrageplan kann eine erste Vielzahl von äquivalenten Teilplänen enthalten, die die gleiche erste Ausgabe liefern sollen. Die erste Mehrzahl von äquivalenten Teilplänen kann beispielsweise einen ersten Teilplan und einen zweiten Teilplan enthalten, wie den ersten Teilplan 302 und den zweiten Teilplan 304 oder den ersten Teilplan 506 und den zweiten Teilplan 508. Der Abfrageplan kann auch einen ersten Teilplan-Auswahloperator enthalten, wie z. B. den Teilplan-Auswahloperator 328 oder den ersten Teilplan-Auswahloperator 518, der die Komponenten angibt, die an der Ausführung jedes der ersten Vielzahl von äquivalenten Teilplänen beteiligt sind.
  • In Block 704 wird der erste Teilplan aus der ersten Vielzahl von äquivalenten Teilplänen zur Ausführung ausgewählt. Die Auswahl kann in Reaktion auf die Ausführung des ersten Teilplan-Auswahloperators erfolgen, der während der Ausführung des Abfrageplans ausgeführt wird. Die Auswahl wird auf der Grundlage von Laufzeit-Leistungsparametern von Komponenten durchgeführt, die an der Ausführung jedes der ersten Vielzahl von äquivalenten Teilplänen beteiligt sind, wie z. B. Komponenten, die an der Ausführung des ersten Teilplans beteiligt sind, und Komponenten, die an der Ausführung des zweiten Teilplans beteiligt sind, wie zuvor erläutert.
  • In einem Beispiel können die an der Ausführung des ersten Teilplans zu beteiligenden Komponenten einen ersten Prozessor umfassen, der zumindest einen Teil des ersten Teilplans ausführen soll. Ferner umfassen die Laufzeitleistungsparameter der Komponenten eine Belegtzeit des ersten Prozessors. Dementsprechend kann das Verfahren 700 auch die Bestimmung der Belegtzeit des ersten Prozessors vor der Auswahl des ersten Teilplans umfassen. Die Bestimmung der Auslastungszeit kann auf Zählerwerten basieren, die von einem Leistungszähler bereitgestellt werden, der dem ersten Prozessor zugeordnet ist, wie zuvor erläutert.
  • In einem Beispiel beinhaltet die Auswahl des ersten Teilplans den Vergleich der Laufzeitleistungsparameter der an der Ausführung des ersten Teilplans beteiligten Komponenten mit Referenzwerten der Laufzeitleistungsparameter und den Vergleich der Laufzeitleistungsparameter der an der Ausführung des zweiten Teilplans beteiligten Komponenten mit Referenzwerten der Laufzeitleistungsparameter. Beispielsweise kann ein erster euklidischer Abstand zwischen den Laufzeitleistungsparametern von Komponenten, die an der Ausführung des ersten Teilplans beteiligt sind, und den Referenzwerten der Laufzeitleistungsparameter berechnet werden. Weiterhin kann ein zweiter euklidischer Abstand zwischen den Laufzeitleistungsparametern der Komponenten, die an der Ausführung des zweiten Teilplans beteiligt sind, und den Referenzwerten der Laufzeitleistungsparameter berechnet werden. Anschließend wird der erste Teilplan auf der Grundlage eines Vergleichs des ersten euklidischen Abstands und des zweiten euklidischen Abstands ausgewählt. Beispielsweise kann der erste Teilplan ausgewählt werden, wenn der erste euklidische Abstand kleiner ist als der zweite euklidische Abstand, wie mit Bezug auf erläutert. Der erste euklidische Abstand und der zweite euklidische Abstand können als eine erste Laufzeitkostenfunktion bzw. eine zweite Laufzeitkostenfunktion bezeichnet werden. In Block 706 wird der erste Teilplan zur Ausführung des Abfrageplans ausgeführt.
  • In einem Beispiel enthält der Abfrageplan eine zweite Vielzahl von äquivalenten Teilplänen, die dieselbe zweite Ausgabe und einen zweiten Teilplan-Auswahloperator liefern sollen. Die zweite Vielzahl von äquivalenten Teilplänen kann z. B. der zweite Satz von Teilplänen 504 sein und kann einen dritten Teilplan und einen vierten Teilplan enthalten. Der zweite Teilplan-Auswahloperator kann z. B. der zweite Teilplan-Auswahloperator 520 sein. Der zweite Teilplan-Auswahloperator kann Komponenten angeben, die an der Ausführung jedes der zweiten Vielzahl von äquivalenten Teilplänen beteiligt sind. Das Verfahren 700 kann beinhalten, dass als Reaktion auf die Ausführung des zweiten Teilplan-Auswahloperators während der Ausführung des Abfrageplans ein Teilplan aus der zweiten Vielzahl von äquivalenten Teilplänen ausgewählt wird, basierend auf Laufzeit-Leistungsparametern der Komponenten, die an der Ausführung der zweiten Vielzahl von äquivalenten Teilplänen beteiligt sein sollen, wie mit Bezug auf erläutert.
  • In einem Beispiel soll während der Ausführung des Abfrageplans die Ausführung eines der ersten Vielzahl von äquivalenten Teilplänen vor dem Beginn der Ausführung eines der zweiten Vielzahl von äquivalenten Teilplänen begonnen werden. Beispielsweise wird, wie unter Bezugnahme auf erläutert, die Ausführung eines des ersten Teilplans 506 und des zweiten Teilplans 508 vor dem Beginn der Ausführung des dritten Teilplans 510 oder des vierten Teilplans 512 begonnen. Weiterhin kann das Verfahren beinhalten, dass die Ausführung des ersten Teilplans nach der Auswahl des ersten Teilplans begonnen wird und einer der zweiten Vielzahl von äquivalenten Teilplänen zur Ausführung nach dem Beginn der Ausführung des ersten Teilplans ausgewählt wird. Auf diese Weise kann die Auswahl von Teilplänen zur Laufzeit erfolgen.
  • In einem Beispiel wird eine erste Anzahl von Malen der Auswahl des ersten Teilplans zur Ausführung und eine zweite Anzahl von Malen der Auswahl des zweiten Teilplans bestimmt. Eine Anzahl von Malen der Auswahl eines Teilplans kann z. B. ein verwendeter Zählwert des Teilplans sein. Wie in erläutert, wird der verwendete Zählwert eines Teilplans mit Null initialisiert und bei jeder Auswahl des Teilplans um eins erhöht. Als Reaktion darauf, dass die erste Anzahl von Malen größer als die zweite Anzahl von Malen um mehr als eine Schwellenanzahl von Malen ist, kann eine Benachrichtigung bereitgestellt werden, um beispielsweise die Arbeitslast der Komponenten zu reduzieren, die an der Ausführung des ersten Teilplans beteiligt sind. Alternativ kann eine Rückmeldung bereitgestellt werden, um den ersten Teilplan als Standard-Teilplan zu kennzeichnen. In einem anderen Beispiel können sowohl die Benachrichtigung als auch die Rückmeldung bereitgestellt werden. In einem Beispiel kann, wenn zwei Teilpläne die gleichen oder vergleichbare Laufzeitkosten haben, der Teilplan mit der geringeren genutzten Anzahl der beiden zur Ausführung ausgewählt werden. Eine solche Auswahl auf Basis der genutzten Zählerstände verhindert eine einseitige Auswahl von Teilplänen.
  • illustriert eine Computerumgebung 800, die ein nichttransitorisches computerlesbares Medium zum Erzeugen eines Abfrageplans gemäß einer Beispielimplementierung des vorliegenden Gegenstands implementiert. In einem Beispiel kann das nichttransitorische computerlesbare Medium 802 von einem System, wie dem System 100, verwendet werden. In einem Beispiel kann die Rechenumgebung 800 eine Verarbeitungsressource 804 enthalten, die über eine Kommunikationsverbindung 806 mit dem nichttransitoren computerlesbaren Medium 802 kommunikativ gekoppelt ist. Die Verarbeitungsressource 804 kann z. B. der Prozessor 102 sein.
  • Das nicht-transitorische computerlesbare Medium 802 kann beispielsweise ein internes Speichergerät oder ein externes Speichergerät sein. In einem Beispiel kann die Kommunikationsverbindung 806 eine direkte Kommunikationsverbindung sein, wie z. B. eine beliebige Speicher-Lese/Schreib-Schnittstelle. In einem anderen Beispiel kann die Kommunikationsverbindung 806 eine indirekte Kommunikationsverbindung sein, wie z. B. eine Netzwerkschnittstelle. In einem solchen Fall kann die Verarbeitungsressource 804 über ein Netzwerk 808 auf das nichttransitorische computerlesbare Medium 802 zugreifen. Das Netzwerk 808 kann ein einzelnes Netzwerk oder eine Kombination aus mehreren Netzwerken sein und kann eine Vielzahl unterschiedlicher Kommunikationsprotokolle verwenden.
  • Die Verarbeitungsressource 804 und das nichttransitorische computerlesbare Medium 802 können auch kommunikativ mit einer Rechenvorrichtung 810 gekoppelt sein, die eine Rechenvorrichtung sein kann, die den erzeugten Abfrageplan oder einen Teil davon ausführen soll.
  • In einer Beispielimplementierung enthält das nicht-transitorische computerlesbare Medium 802 einen Satz computerlesbarer Anweisungen zur Erzeugung von Abfrageplänen. Auf den Satz von computerlesbaren Anweisungen kann die Verarbeitungsressource 804 über die Kommunikationsverbindung 806 zugreifen und ihn anschließend ausführen. Der Satz von computerlesbaren Anweisungen kann zum Beispiel den Abfrageoptimierer 216 implementieren.
  • Bezug nehmend auf enthält das nicht-transitorische computerlesbare Medium 802 in einem Beispiel Anweisungen 814, die die Verarbeitungsressource 804 veranlassen, eine Datenbankabfrage zu empfangen, auf die ein Ergebnis bereitgestellt werden soll. Die Datenbankabfrage kann z. B. die Abfrage 218 sein.
  • Das nicht-transitorische computerlesbare Medium 802 enthält Anweisungen 816 zum Erzeugen eines ersten vorläufigen Abfrageplans, der ausführbar ist, um das Ergebnis bereitzustellen, und eines zweiten vorläufigen Abfrageplans, der ausführbar ist, um das Ergebnis bereitzustellen. Der erste vorläufige Abfrageplan umfasst einen ersten Teilplan, wie zum Beispiel den ersten Teilplan 302, und der zweite vorläufige Abfrageplan umfasst einen zweiten Teilplan, wie zum Beispiel den zweiten Teilplan 304. Der erste Teilplan und der zweite Teilplan sollen, wie bereits erläutert, die gleiche Ausgabe liefern. Eine erste Vielzahl von Komponenten soll an der Ausführung des ersten Teilplans beteiligt sein und eine zweite Vielzahl von Komponenten soll an der Ausführung des zweiten Teilplans beteiligt sein.
  • In einem Beispiel enthält die erste Vielzahl von Komponenten einen ersten Prozessor, der mindestens einen Teil des ersten Teilplans ausführen soll, einen ersten Speicher, der mit dem ersten Prozessor verbunden ist, eine erste Datei, auf die zugegriffen werden soll, um den ersten Teilplan auszuführen, eine erste Festplatte, auf der die erste Datei gespeichert ist, oder eine beliebige Kombination davon. Ferner umfasst die zweite Vielzahl von Komponenten einen zweiten Prozessor, der zumindest einen Teil des zweiten Teilplans ausführen soll, einen zweiten mit dem zweiten Prozessor gekoppelten Speicher, eine zweite Datei, auf die zur Ausführung des zweiten Teilplans zugegriffen werden soll, eine zweite Festplatte, auf der die zweite Datei gespeichert ist, oder eine beliebige Kombination davon.
  • Das nicht-transitorische computerlesbare Medium 802 enthält Anweisungen 818, um basierend auf dem ersten vorläufigen Abfrageplan und dem zweiten vorläufigen Abfrageplan einen Abfrageplan zu erzeugen, der ausgeführt werden soll, um das Ergebnis für die Datenbankabfrage auszugeben. Der Abfrageplan kann den ersten Teilplan, den zweiten Teilplan und einen Teilplanauswahloperator enthalten. Der Teilplan-Auswahloperator kann die erste Vielzahl von Komponenten und die zweite Vielzahl von Komponenten angeben. Der Teilplan-Auswahloperator ist während der Ausführung des Abfrageplans ausführbar, um einen aus dem ersten Teilplan und dem zweiten Teilplan auszuwählen, basierend auf Laufzeit-Leistungsparametern der ersten Vielzahl von Komponenten und Laufzeit-Leistungsparametern der zweiten Vielzahl von Komponenten, wie zuvor erläutert. In einem Beispiel kann die Erzeugung des Abfrageplans durch Zusammenführen des ersten vorläufigen Abfrageplans und des zweiten vorläufigen Abfrageplans und Einfügen eines Teilplan-Auswahloperators erfolgen, wie unter Bezugnahme auf erläutert.
  • In einem Beispiel sind die Anweisungen ausführbar, um den Abfrageplan als Baumstruktur zu erzeugen, die den Teilplan-Auswahloperator als einen Knoten und einen Knoten des ersten Teilplans und einen Knoten des zweiten Teilplans als untergeordnete Knoten des Teilplan-Auswahloperators aufweist, wie in den und dargestellt. In einem Beispiel sind die Anweisungen ausführbar, um eine Vielzahl von vorläufigen Abfrageplänen zu erzeugen, einschließlich des ersten vorläufigen Abfrageplans und des zweiten vorläufigen Abfrageplans, die jeweils ausführbar sind, um das Ergebnis bereitzustellen. Ferner können der erste vorläufige Abfrageplan und der zweite vorläufige Abfrageplan aus der Vielzahl der vorläufigen Abfragepläne zur Erzeugung des Abfrageplans auf der Grundlage von Statistiken einer Datenbanktabelle, auf die zur Ausführung des ersten vorläufigen Abfrageplans zugegriffen werden soll, und von Statistiken einer Datenbanktabelle, auf die zur Ausführung des zweiten vorläufigen Abfrageplans zugegriffen werden soll, ausgewählt werden. Beispielsweise können, wie bereits erläutert, statische Kosten der vorläufigen Abfragepläne auf der Grundlage der Statistiken der Tabellen, auf die zur Ausführung der vorläufigen Abfragepläne zugegriffen werden soll, berechnet werden, und die zusammenzuführenden vorläufigen Abfragepläne können auf der Grundlage der statischen Kosten ausgewählt werden, wie bereits erläutert.
  • In einem Beispiel enthält das nicht-transitorische computerlesbare Medium 802 Anweisungen zur Ausführung des erzeugten Abfrageplans. Solche Anweisungen können z. B. die Anweisungen sein, die den Abfrageausführer 220 implementieren. Dementsprechend kann das nicht-transitorische computerlesbare Medium 802 zur Auswahl eines Teilplans während der Ausführung des Abfrageplans ausgeführt werden.
  • Der vorliegende Gegenstand reduziert die für die Ausführung eines Abfrageplans benötigte Zeit, indem er äquivalente Teilpläne in einem Abfrageplan bereitstellt und die Auswahl eines Teilplans auf der Grundlage von Laufzeit-Leistungsparametern der am Teilplan beteiligten Komponenten vornimmt. Indem die Auswahl eines äquivalenten Teilplans auf den Zeitpunkt der Ausführung des Teilplans verschoben wird, stellt der vorliegende Gegenstand außerdem sicher, dass die Auswahl auf den aktuellen Leistungsparametern basiert. Der vorliegende Gegenstand kann in Szenarien eingesetzt werden, in denen die Arbeitslasten der beteiligten Komponenten dynamisch variieren.
  • Der vorliegende Gegenstand kann in statischen Szenarien verwendet werden, in denen ein Abfrageplan einmal generiert, gespeichert und mehrfach ausgeführt wird, da die Auswahl von Teilplänen dynamisch während der Ausführung des Abfrageplans erfolgt. Da die Auswahl eines Teilplans zum Zeitpunkt seiner Ausführung erfolgt, kann die Auswahl auf der Grundlage des Zustands der an der Ausführung beteiligten Komponenten durchgeführt werden. So kann der Versuch vermieden werden, einen zuvor ausgewählten Abfrageplan auf der Basis einer fehlerhaften Komponente auszuführen. Der vorliegende Gegenstand verhindert auch den Ausfall von Komponenten, wie z. B. Festplatten und Rechengeräten, aufgrund von hoher Arbeitslast. Insgesamt verbessert der vorliegende Gegenstand den Prozess der Abfrageausführung.
  • Der vorliegende Gegenstand kann mehrere Kopien eines Index verwenden, um neue Teilpläne zu erzeugen und die Teilpläne basierend auf der Arbeitslast der Kopien zu verwenden. So kann ein Datenbankadministrator mehrere Kopien einer Indexdatei erstellen und die Techniken des vorliegenden Gegenstands nutzen, um schnell auf Abfragen zu reagieren. Dementsprechend kann der vorliegende Gegenstand in Szenarien, wie z. B. E-Commerce-Anwendungen, eingesetzt werden, in denen Indizes aufgrund von Mehrfachzugriffen überlastet werden. Darüber hinaus können auch mehrere Kopien von Tabellen erstellt und verwendet werden. Die Verwendung von mehreren Kopien erhöht auch die Fehlertoleranz bei der Ausführung von Abfrageplänen. Beispielsweise können die verschiedenen Kopien auf unterschiedlichen Geräten gespeichert werden, so dass der Ausfall eines Gerätes die Ausführung des Abfrageplans nicht beeinträchtigt. Außerdem wird im vorliegenden Gegenstand jede einzelne Abfrage auch bei hoher Systemlast unabhängig verarbeitet und ausgeführt, anstatt mehrere Abfragen gemeinsam zu betrachten.
  • Obwohl Implementierungen der Ausführung von Abfrageplänen in einer Sprache beschrieben wurden, die spezifisch für strukturelle Merkmale und/oder Methoden ist, ist es zu verstehen, dass der vorliegende Gegenstand nicht notwendigerweise auf die beschriebenen spezifischen Merkmale oder Methoden beschränkt ist. Vielmehr werden die spezifischen Merkmale und Methoden als Beispielimplementierungen offengelegt und erläutert.

Claims (20)

  1. System, das Folgendes umfasst: einen Prozessor; und einen Speicher mit Anweisungen, die vom Prozessor ausgeführt werden können, um: Auswählen, während der Ausführung eines Abfrageplans, der einen ersten Teilplan und einen zweiten Teilplan umfasst, des ersten Teilplans zur Ausführung, wobei der Abfrageplan ausführbar ist, um ein Ergebnis für eine Datenbankabfrage bereitzustellen, wobei der erste Teilplan und der zweite Teilplan die gleiche Ausgabe bereitstellen sollen, wobei eine erste Komponente an der Ausführung des ersten Teilplans beteiligt sein soll und eine zweite Komponente an der Ausführung des zweiten Teilplans beteiligt sein soll, wobei die Auswahl auf einem Laufzeitleistungsparameter der ersten Komponente und einem Laufzeitleistungsparameter der zweiten Komponente basiert; und bewirken die Ausführung des ersten Teilplans.
  2. System nach Anspruch 1, wobei die erste Komponente eine erste Festplatte ist, die eine erste Datei speichert, die bei der Ausführung des ersten Teilplans zu verwenden ist, wobei die zweite Komponente eine zweite Festplatte ist, die eine zweite Datei speichert, die bei der Ausführung des zweiten Teilplans zu verwenden ist, wobei der Laufzeitleistungsparameter der ersten Komponente eine Anzahl von Zugriffsanforderungen, die von der ersten Festplatte pro Zeiteinheit verarbeitet werden, eine Warteschlangenlänge von wartenden Anforderungen, die bei der ersten Festplatte anstehen, und eine Latenz der ersten Festplatte umfasst.
  3. System nach Anspruch 1, wobei es sich bei der ersten Komponente um eine erste Datei handelt, auf die zur Ausführung des ersten Teilplans zugegriffen werden soll, wobei es sich bei der zweiten Komponente um eine zweite Datei handelt, auf die zur Ausführung des zweiten Teilplans zugegriffen werden soll, wobei es sich bei dem Laufzeitleistungsparameter der ersten Komponente um eine Anzahl von Zugriffsanforderungen für die erste Datei pro Zeiteinheit handelt, und wobei es sich bei dem Laufzeitleistungsparameter der zweiten Komponente um eine Anzahl von Zugriffsanforderungen für die zweite Datei pro Zeiteinheit handelt.
  4. System nach Anspruch 1, wobei eine erste Mehrzahl von Komponenten an der Ausführung des ersten Teilplans beteiligt ist, wobei eine zweite Mehrzahl von Komponenten an der Ausführung des zweiten Teilplans beteiligt ist und wobei die Anweisungen ausführbar sind, um: Berechnen von ersten Laufzeitkosten für die Ausführung des ersten Teilplans basierend auf den Laufzeitleistungsparametern der ersten Vielzahl von Komponenten; Berechnen von zweiten Laufzeitkosten für die Ausführung des zweiten Teilplans basierend auf den Laufzeitleistungsparametern der zweiten Vielzahl von Komponenten; und den ersten Teilplan zur Ausführung auswählen, basierend auf einem Vergleich der ersten Laufzeitkosten und der zweiten Laufzeitkosten.
  5. System nach Anspruch 1, wobei auf eine erste Datei zugegriffen werden soll, um den ersten Teilplan auszuführen, und auf eine zweite Datei zugegriffen werden soll, um den zweiten Teilplan auszuführen, wobei die Anweisungen ausführbar sind, um: Bestimmen, dass der erste Teilplan ausgeführt werden soll, basierend auf einer Latenz eines Netzwerks, das eine Recheneinrichtung, die eine Festplatte verwaltet, auf der die erste Datei gespeichert ist, und eine andere Recheneinrichtung, an die ein Datensatz aus der ersten Datei zur weiteren Verarbeitung zurückgegeben werden soll, verbinden soll, und basierend auf einer Latenz eines Netzwerks, das eine Recheneinrichtung, die eine Festplatte verwaltet, auf der die zweite Datei gespeichert ist, und eine andere Recheneinrichtung, an die ein Datensatz aus der zweiten Datei zur weiteren Verarbeitung zurückgegeben werden soll, verbinden soll.
  6. System nach Anspruch 1, wobei die Anweisungen ausführbar sind, um den ersten Teilplan auf der Grundlage eines ersten Mietpreises eines ersten Prozessors, der an der Ausführung des ersten Teilplans beteiligt ist, und eines zweiten Mietpreises eines zweiten Prozessors, der an der Ausführung des zweiten Teilplans beteiligt ist, auszuwählen.
  7. System nach Anspruch 1, wobei der Abfrageplan einen Teilplan-Auswahloperator umfasst, der den ersten Teilplan, den zweiten Teilplan, die erste Komponente und die zweite Komponente angibt und die Anweisungen zum Auswählen des ersten Teilplans und die Anweisungen zum Veranlassen der Ausführung des ersten Teilplans umfasst.
  8. System nach Anspruch 7, umfassend Anweisungen, die ausführbar sind, um den Abfrageplan zu erzeugen, wobei die Anweisungen ausführbar sind, um: einen ersten vorläufigen Abfrageplan erzeugen, der ausführbar ist, um ein Ergebnis für die Datenbankabfrage bereitzustellen, wobei der erste vorläufige Abfrageplan den ersten Teilplan umfasst; einen zweiten vorläufigen Abfrageplan erzeugen, der ausführbar ist, um ein Ergebnis für die Datenbankabfrage bereitzustellen, wobei der zweite vorläufige Abfrageplan den zweiten Teilplan umfasst; den ersten vorläufigen Abfrageplan und den zweiten vorläufigen Abfrageplan zusammenführen; den Teilplan-Auswahloperator erzeugen; und den Abfrageplan generieren.
  9. System nach Anspruch 1, das Anweisungen umfasst, die ausgeführt werden können, um den zweiten Teilplan während der Ausführung des Abfrageplans zu erzeugen.
  10. Verfahren, das Folgendes umfasst: Empfangen eines Abfrageplans zur Ausführung einer Datenbankabfrage, wobei der Abfrageplan Folgendes umfasst: eine erste Vielzahl von äquivalenten Unterplänen, die die gleiche erste Ausgabe liefern sollen; und einen ersten Teilplan-Auswahloperator, der die Komponenten angibt, die an der Ausführung jedes der ersten Vielzahl von äquivalenten Teilplänen beteiligt sind; Auswählen, als Reaktion auf das Ausführen des ersten Teilplan-Auswahloperators während der Ausführung des Abfrageplans, eines ersten Teilplans aus der ersten Vielzahl von äquivalenten Teilplänen, basierend auf Laufzeit-Leistungsparametern von Komponenten, die an der Ausführung jedes der ersten Vielzahl von äquivalenten Teilplänen beteiligt sein sollen; und Ausführen des ersten Teilplans zur Ausführung des Abfrageplans.
  11. Verfahren nach Anspruch 10, wobei die an der Ausführung des ersten Teilplans zu beteiligenden Komponenten einen ersten Prozessor umfassen, der zumindest einen Teil des ersten Teilplans ausführen soll, wobei die Laufzeitleistungsparameter der Komponenten eine Belegtzeit des ersten Prozessors umfassen, und wobei das Verfahren das Bestimmen der Belegtzeit des ersten Prozessors vor dem Auswählen des ersten Teilplans umfasst.
  12. Verfahren nach Anspruch 10, wobei die erste Vielzahl von äquivalenten Teilplänen einen zweiten Teilplan umfasst, wobei das Auswählen des ersten Teilplans umfasst: Vergleichen von Laufzeitleistungsparametern von Komponenten, die an der Ausführung des ersten Teilplans beteiligt sein sollen, mit Referenzwerten der Laufzeitleistungsparameter; und Vergleichen der Laufzeitleistungsparameter von Komponenten, die an der Ausführung des zweiten Teilplans beteiligt sein sollen, mit den Referenzwerten der Laufzeitleistungsparameter.
  13. Verfahren nach Anspruch 12, umfassend: Berechnen eines ersten euklidischen Abstands zwischen den Laufzeitleistungsparametern von Komponenten, die an der Ausführung des ersten Teilplans beteiligt sein sollen, und den Referenzwerten der Laufzeitleistungsparameter; Berechnen eines zweiten euklidischen Abstands zwischen Laufzeitleistungsparametern von Komponenten, die an der Ausführung des zweiten Teilplans beteiligt sein sollen, und den Referenzwerten der Laufzeitleistungsparameter; und Auswählen des ersten Teilplans basierend auf einem Vergleich des ersten euklidischen Abstands und des zweiten euklidischen Abstands.
  14. Verfahren nach Anspruch 10, wobei der Abfrageplan weiterhin umfasst: eine zweite Vielzahl von äquivalenten Unterplänen, die die gleiche zweite Ausgabe liefern sollen; und einen zweiten Teilplan-Auswahloperator, der Komponenten angibt, die an der Ausführung jedes der zweiten Vielzahl von äquivalenten Teilplänen beteiligt sein sollen, wobei das Verfahren umfasst: Auswählen, in Reaktion auf die Ausführung des zweiten Teilplan-Auswahloperators während der Ausführung des Abfrageplans, eines Teilplans aus der zweiten Vielzahl von äquivalenten Teilplänen, basierend auf Laufzeit-Leistungsparametern der Komponenten, die an der Ausführung der zweiten Vielzahl von äquivalenten Teilplänen beteiligt sein sollen.
  15. Verfahren nach Anspruch 10, wobei der Abfrageplan eine zweite Vielzahl von äquivalenten Teilplänen umfasst, die die gleiche zweite Ausgabe bereitstellen sollen, wobei während der Ausführung des Abfrageplans die Ausführung eines der ersten Vielzahl von äquivalenten Teilplänen vor dem Beginn der Ausführung eines der zweiten Vielzahl von äquivalenten Teilplänen beginnen soll, wobei das Verfahren umfasst: Beginn der Ausführung des ersten Teilplans bei Auswahl des ersten Teilplans; und Auswahl eines der zweiten Vielzahl von gleichwertigen Teilplänen bei Beginn der Ausführung des ersten Teilplans zur Ausführung.
  16. Verfahren nach Anspruch 10, umfassend: Bestimmen einer ersten Anzahl von Malen der Auswahl des ersten Teilplans; Bestimmen einer zweiten Anzahl von Malen der Auswahl des zweiten Teilplans; und als Reaktion darauf, dass die erste Anzahl von Malen größer ist als die zweite Anzahl von Malen um mehr als eine Schwellenanzahl von Malen, Bereitstellung einer Benachrichtigung zur Reduzierung der Arbeitslast der an der Ausführung des ersten Teilplans beteiligten Komponenten; oder Bereitstellung einer Rückmeldung, um den ersten Teilplan als Standard-Teilplan anzuzeigen.
  17. Nicht-transitorisches computerlesbares Medium, das Anweisungen enthält, wobei die Anweisungen von einer Verarbeitungsressource ausgeführt werden können, um: eine Datenbankabfrage empfangen, auf die ein Ergebnis geliefert werden soll; Erzeugen eines ersten vorläufigen Abfrageplans, der ausführbar ist, um das Ergebnis bereitzustellen, und eines zweiten vorläufigen Abfrageplans, der ausführbar ist, um das Ergebnis bereitzustellen, wobei der erste vorläufige Abfrageplan einen ersten Teilplan umfasst, wobei der zweite vorläufige Abfrageplan einen zweiten Teilplan umfasst, wobei der erste Teilplan und der zweite Teilplan die gleiche Ausgabe bereitstellen sollen, wobei eine erste Mehrzahl von Komponenten an der Ausführung des ersten Teilplans beteiligt sein soll und wobei eine zweite Mehrzahl von Komponenten an der Ausführung des zweiten Teilplans beteiligt sein soll; und Erzeugen, basierend auf dem ersten vorläufigen Abfrageplan und dem zweiten vorläufigen Abfrageplan, eines Abfrageplans, der ausgeführt werden soll, um das Ergebnis für die Datenbankabfrage auszugeben, wobei der Abfrageplan umfasst: den ersten Teilplan; den zweiten Teilplan; und einen Teilplan-Auswahloperator, der die erste Vielzahl von Komponenten und die zweite Vielzahl von Komponenten angibt, wobei der Teilplan-Auswahloperator während der Ausführung des Abfrageplans ausführbar ist, um einen aus dem ersten Teilplan und dem zweiten Teilplan auf der Grundlage von Laufzeit-Leistungsparametern der ersten Vielzahl von Komponenten und Laufzeit-Leistungsparametern der zweiten Vielzahl von Komponenten auszuwählen.
  18. Nicht-transitorisches computerlesbares Medium nach Anspruch 17, wobei die Anweisungen ausführbar sind, um den Abfrageplan als eine Baumstruktur zu erzeugen, die den Teilplan-Auswahloperator als einen Knoten aufweist, und wobei ein Knoten des ersten Teilplans und ein Knoten des zweiten Teilplans Kindknoten des Teilplan-Auswahloperators in der Baumstruktur sind.
  19. Nicht-transitorisches computerlesbares Medium nach Anspruch 17, wobei die erste Vielzahl von Komponenten einen ersten Prozessor, der mindestens einen Teil des ersten Teilplans ausführen soll, einen ersten mit dem ersten Prozessor gekoppelten Speicher, eine erste Datei, auf die zur Ausführung des ersten Teilplans zugegriffen werden soll, oder eine erste Festplatte, auf der die erste Datei gespeichert ist, umfasst, und wobei die zweite Vielzahl von Komponenten einen zweiten Prozessor, der mindestens einen Teil des zweiten Teilplans ausführen soll, einen zweiten mit dem zweiten Prozessor gekoppelten Speicher, eine zweite Datei, auf die zur Ausführung des zweiten Teilplans zugegriffen werden soll, oder eine zweite Festplatte, auf der die zweite Datei gespeichert ist, umfasst.
  20. Nicht-transitorisches computerlesbares Medium nach Anspruch 17, wobei die Anweisungen ausführbar sind, um: Erzeugen einer Vielzahl von vorläufigen Abfrageplänen, die jeweils ausführbar sind, um das Ergebnis bereitzustellen, wobei die Vielzahl von vorläufigen Abfrageplänen den ersten vorläufigen Abfrageplan und den zweiten vorläufigen Abfrageplan umfasst; und aus der Vielzahl von vorläufigen Abfrageplänen den ersten vorläufigen Abfrageplan und den zweiten vorläufigen Abfrageplan zur Erzeugung des Abfrageplans auf der Grundlage von Statistiken einer Datenbanktabelle, auf die zur Ausführung des ersten vorläufigen Abfrageplans zugegriffen werden soll, und von Statistiken einer Datenbanktabelle, auf die zur Ausführung des zweiten vorläufigen Abfrageplans zugegriffen werden soll, auszuwählen.
DE102021109138.1A 2020-07-31 2021-04-13 Ausführung von abfrageplänen Pending DE102021109138A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN202041032905 2020-07-31
IN202041032905 2020-07-31

Publications (1)

Publication Number Publication Date
DE102021109138A1 true DE102021109138A1 (de) 2022-02-03

Family

ID=79300522

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021109138.1A Pending DE102021109138A1 (de) 2020-07-31 2021-04-13 Ausführung von abfrageplänen

Country Status (3)

Country Link
US (1) US20220035812A1 (de)
CN (1) CN114064704A (de)
DE (1) DE102021109138A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11782918B2 (en) * 2020-12-11 2023-10-10 International Business Machines Corporation Selecting access flow path in complex queries
AU2021434319A1 (en) * 2021-03-19 2023-09-28 Lexmark International, Inc. Security device computation matching

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8402469B2 (en) * 2008-04-08 2013-03-19 Infosys Limited Allocating resources for parallel execution of query plans
US10346398B2 (en) * 2017-03-07 2019-07-09 International Business Machines Corporation Grouping in analytical databases

Also Published As

Publication number Publication date
US20220035812A1 (en) 2022-02-03
CN114064704A (zh) 2022-02-18

Similar Documents

Publication Publication Date Title
DE60130475T2 (de) Durchführung von kalkulationen eines tabellenkalkulationstyps in einem datenbanksystem
DE60121231T2 (de) Datenverarbeitungsverfahren
DE102013207049B4 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE69736748T2 (de) Editierumgebung für objektmodelle und verfahren zu deren anwendung
DE69934102T2 (de) System und verfahren zur model-mining von komplexen informationtechnologiesystemen
DE69910219T2 (de) Transformation der perspektive auf tabellen von relationalen datenbanken
DE69923435T2 (de) System und verfahren zur optimierung der leistungskontrolle von komplexen informationstechnologiesystemen
DE202011110124U1 (de) Hybridabfrageausführungsplan
DE102013221052A1 (de) System und Verfahren für Batch-Auswertungs-Programme
DE202012013432U1 (de) Speichern von Daten auf Speicherknoten
DE102014204827A1 (de) Auflösen ähnlicher Entitäten aus einer Transaktionsdatenbank
DE202015009779U1 (de) Implementierung semistrukturierter Daten als ein Datenbankelement erster Klasse
DE112013003205T5 (de) Verfahren und Vorrichtung zum Verarbeiten von Datenbankdaten in einem verteilten Datenbanksystem
DE202013012496U1 (de) Systeme für asynchrone Schemaänderungen
DE112017006106T5 (de) Erzeugen von, Zugreifen auf und Anzeigen von Abstammungsmetadaten
DE10003015A1 (de) Die Erzeugung von Ereignis-Bedingungs-Aktions-Regeln aus Prozessmodellen
DE102012223167B4 (de) Gemeinsame Nutzung von Artefakten zwischen kollaborativen Systemen
DE102013221057A1 (de) System und Verfahren für Batch-Auswertungs-Programme
DE202017107393U1 (de) Vorhersagen eines Suchmaschinen-Einordnungssignalwerts
DE102021109138A1 (de) Ausführung von abfrageplänen
DE112019001480T5 (de) Automatisches Optimieren der Ressourcennutzung in einemZieldatenbankverwaltungssystem zum Erhöhen der Arbeitslastleistung
DE112021001986T5 (de) Verfahren und System zum Verarbeiten von Datenaufzeichnungen
DE102012224492A1 (de) Auslösen von Fensterbedingungen unter Verwendung einer Ausnahmebehandlung
DE112013005993T5 (de) Verfahren, Vorrichtung und computerlesbares Medium für eine optimale Bestimmung von Daten-Teilmengen
DE202013012490U1 (de) Effiziente hierarchisch geprägte Top-Down Verbindung geclusterter Datenstrom

Legal Events

Date Code Title Description
R081 Change of applicant/patentee

Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, SPR, US

Free format text: FORMER OWNER: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOUSTON, TX, US

R082 Change of representative

Representative=s name: HL KEMPNER PATENTANWALT, RECHTSANWALT, SOLICIT, DE

Representative=s name: HL KEMPNER PATENTANWAELTE, SOLICITORS (ENGLAND, DE