-
ALLGEMEINER STAND DER TECHNIK
-
In
typischen Datenbanksystemen speichern, aktualisieren und rufen Benutzer
Informationen ab, indem sie einer Datenbankanwendung, wie Oracle,
Befehle übermitteln.
Beim Ausführen
von Transaktionen speichert die Datenbankanwendung Informationen
im Speicher und auf der Festplatte. Für eine beste Leistung müssen so
viele Informationen wie möglich
eher im Speicher als auf der Festplatte gespeichert werden. Da die Speicherplatzressourcen
jedoch begrenzt sind, muss die Datenbankanwendung die Speicherplatzzuordnung abstimmen,
was das Verteilen des verfügbaren
Speicherplatzes auf Strukturen umfasst, die von der Datenbankanwendung
genutzt werden.
-
Wie
in dem Buch mit dem Titel „Oracle8i
Conepts" beschrieben,
das von der Oracle Corporation und im Internet unter http://oradoc.photo.net/ora81/DOC/server.815/a67781/toc.htm
(auf das in diesem Dokument vollständig verwiesen wird) erhältlich ist,
sind zwei der Strukturen, die von der Datenbankanwendung Oracle verwendet
werden, Speicherbereiche, die System Global Area (SGA) und Program
Global Area (PGA) genannt werden. Der SGA enthält allgemeine Informationen über den
Zustand der Datenbank und die Instanz, auf die die Oracle-Prozesse
zugreifen müssen.
Im SGA sind keine Benutzerdaten gespeichert. Die Größe des SGA
wird beim Hochfahren von Oracle bestimmt. Für eine optimale Leistung in
den meisten Systemen sollte der gesamte SGA in den Realspeicher
passen. Ein Datenbankadministrator (DBA) kann sehen, wie viel Speicherplatz
dem SGA und jeder seiner internen Strukturen zugeordnet ist, indem
das SQL-Statement „SHOW SGA" ausgestellt wird.
-
Ein
PGA wird zum Halten von Daten und Steuerinformationen von jedem
Prozess erzeugt, wenn der Prozess gestartet wird. Der PGA ist für jeden
Prozess in Oracle privat, obgleich ein solcher PGA im gemeinsam genutzten
Speicher sein kann. Die anfängliche
Größe eines
PGA wird beim Hochfahren des entsprechenden Prozesses festgelegt
und ist Betriebssystemspezifisch. Derzeit kann der DBA in Oracle8i
die PGA-Speicherplatznutzung unter Verwendung verschiedener Parameter
wie SORT_AREA_SIZE_HASH AREA_SIZE, BITMAP_MERGE_AREA_SIZE und CREATE_BITMAP_AREA_SIZE
steuern. Weitere Informationen über solche
Parameter können
dem Buch mit dem Titel „Oracle8i
Tuning" entnommen
werden, das unter http://oradoc.photo.net/ora81/DOC/server.815/a67775/toc.htm
(auf das in diesem Dokument vollständig verwiesen wird) erhältlich ist.
-
Siehe
auch
US-Patentschrift 5,799,210 ,
erteilt an Cohen, et al., mit dem Titel „Method for allocating either
private or shared buffer memory for storing data from sort operations
in accordance with an assigned value or threshold value",
US-Patentschrift 5,987,580 Jasuja,
et al., mit dem Titel "Serially
reusable execution memory",
US-Patentschrift 5,860,144 Frank,
et al., mit dem Titel "Addressing
method and system for providing access of a very large size physical
memory buffer to a number of processes" und
US-Patentschrift
5,784,699 McMahon, et al. "Dynamic memory allocation in a computer
using a bit map index",
die sich alle auf die Nutzung von Speicherplatz durch Datenbankprozesse
beziehen.
-
Zusätzliche
Informationen sind der Schrift mit dem Titel „Dynamic Memory Allocation
for Large Query Execution" von
Luc Bouganim, Olga Kapitskaia und Patrick Valduriez zu entnehmen,
veröffentlicht
in Networking and Information Systems 1(6): 629–652 (1998). Siehe auch die
Schrift mit dem Titel „Memory-Adaptive Scheduling
for Large Query Execution" von
den gleichen Autoren, Seiten 105–115 von Proceedings of Conference
an Information and Knowledge Management, 1998, veröffentlicht
von der Association for Computing Machinery, Inc. Noch eine weitere
Schrift auf diesem Gebiet wurde von Diane L. Davison und Goetz Graefe
geschrieben, mit dem Titel „Dynamic
Resource Brokering for Multi-User Query Execution", veröffentlicht
auf der SIGMOD Conference 1995: 281–292.
-
„Dynamic
Memory Allocation for Multiple Concurrent Sorts", IBM Technical Disclosure Bulletin,
IBM Corp., Band 36 Nr. 12, Dezember 1993, veröffentlicht ein Verfahren der
dynamischen Speicherplatzzuordnung für mehrere gleichzeitige Sortiervorgänge. Jedes
Mal, wenn ein neuer Sortiervorgang beginnt, berechnet das System
den gesamten verwendeten Speicherplatz neu, vergleicht ihn mit einem
Schwellenwert und ordnet dann dem Sortiervorgang eine Speicherplatzmenge
in einem vorbestimmten Bereich zu. Die Maximal- oder Mindestgrenzen dieses Bereichs
können
gemäß dem Ergebnis
des Vergleichs angepasst werden. Wesentliche Verarbeitungskapazität und daher
Speicherplatz, wird durch die Notwendigkeit verschwendet, dass jedes Mal,
wenn ein neuer Sortiervorgang beginnt, neue Berechnungen ausgeführt werden
müssen.
-
Microsoft
Corporation: "Microsoft
SQL Server 7.0 Storage Engine Capacity Planning Tips", XP-00 2273948,
März 1999
und Kabra N; Dewitt D J: "Efficient
mid-query re-optimization of sub-optimal query execution Plans", XP-002274138, Juni
1998, offenbaren jeweils Systeme, die Speicherplatz gemäß den Anforderungen
einer besonderen Abfrage zuordnen. Insbesondere offenbart XP'948 die Nutzung eines „Mindestspeicherplatz
pro Abfrage"-Werts,
der von dem Benutzer eingestellt werden kann, oder wenn solche Anweisungen nicht
vorhanden sind, auf einen Standardwert. Das System bewertet dann
jede Abfrage und ordnet sie mindestens dieser Speicherplatzmenge
zu. Wenn ein solcher Speicherplatz nicht vorhanden ist, wird die
Abfrage in die Warteschlange gestellt. Das System ist nicht in der
Lage, diesen Mindestwert ohne Benutzereingabe zu überarbeiten.
XP' 138 basiert
auf einem Abfrage-Optimierer, der die Speicherplatzanforderungen
jedes Operators in einer Abfrage basierend auf Laufzeitstatistiken
analysiert und dabei einen geeigneten Ausführungsplan vorschlägt. Wie
XP'948 weist dieses
System den Nachteil auf, dass die Speicherplatzzuordnung auf Abfrageanforderungen
basiert und nicht die Anforderungen an das System als Ganzes berücksichtigen
kann.
-
KURZDARSTELLUNG DER ERFINDUNG
-
Die
Erfindung stellt ein Verfahren zum Verwalten der Zuordnung von Speicherplatz
an eine Mehrzahl Prozesse zum Ausführen von Abfragen an einer
Datenbank in einem Computer bereit, wobei die Abfragen von Operatoren
implementiert werden und das Verfahren das Berechnen eines globalen
internen Werts des gesamten von den Operatoren zu nutzenden Speicherplatzes,
von einem extern gesetzten globalen Wert und, basierend auf Statistikwerten
der Speicherplatznutzung, das Berechnen eines Werts auf Operatorebene,
der einen allgemeinen Speicherplatzwert bestimmt, der für jeden
der Mehrzahl Operatoren zuzuordnen ist, basierend auf dem globalen
internen Wert und den Prozessen, die den Wert auf Operatorebene
nutzen, um die Zuordnung von Speicherplatz zur Verwendung durch
jeden Operator zu verwalten, umfasst.
-
In
einer Ausführungsform überarbeitet
der programmierte Computer dynamisch die Speicherplatzgrenze, basierend
auf gerade ausgeführten
Speicherzuordnungen, wodurch eine Rückkopplungsschleife gebildet
wird. Durch Bestimmen der Speicherplatzgrenze kann der programmierte
Computer wahlweise auf Informationen außerhalb der Anwendung ansprechen
(beispielsweise auf die Speicherplatzmenge, die durch Nicht-Datenbankprozesse
zugeordnet wird), so dass der begrenzte Speicherplatz in dem Computer
effektiv genutzt wird.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1A veranschaulicht
in einem Datenflussdiagramm Daten und Logik in einem Computer, der
erfindungsgemäß programmiert
worden ist.
-
1B veranschaulicht
Schritte, die von einer Anwendung in einem Computer des Typs ausgeführt werden,
der in 1A gezeigt ist.
-
2 veranschaulicht
in einem Blockdiagramm höherer
Ebene die Verwendung von gemeinsam genutztem Speicherplatz von mehreren
Serverprozessen des Typs, der in 1B gezeigt
ist.
-
3 veranschaulicht
in einem Flussdiagramm Schritte, die in einer Ausführung des
Vergleichsschritts ausgeführt
werden, der von den Serverprozessen von 1B ausgeführt wird.
-
4 veranschaulicht
in einem Venn-Diagramm verschiedene Komponenten, die zusammen den Speicherplatz
bilden, der einem oder mehreren Serverprozessen von 1B zugeordnet
ist.
-
5 veranschaulicht
in einem Flussdiagramm Schritte, die von dem Memory-Broker von 1B ausgeführt werden,
in einer Ausführungsform
des Schritts des Bestimmens eines internen Ziels.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Wenn
er mit einer erfindungsgemäßen Software
programmiert wird, spricht ein Computer auf einen Wert 11 (1A)
an, der die Gesamtmenge des zu nutzenden Speicherplatzes bestimmt,
der von der Anwendung, wie einer Datenbank, zu verwenden ist. Es
ist zu beachten, dass obgleich in der folgenden Beschreibung auf
eine Datenbankanwendung Bezug genommen wird, abhängig von der Ausführungsform,
auch andere Anwendungen auf die in diesem Dokument beschriebene
Weise programmiert werden können.
Der Wert 11 (auch „extern
gesetzter globaler Wert” genannt)
kann beispielsweise von einem Datenbankadministrator (DBA) bereitgestellt
werden oder kann automatisch beispielsweise basierend auf dem derzeit
im Computer zur Verfügung
stehenden Speicherplatz bestimmt werden. Abhängig von der Ausführungsform
kann der extern gesetzte globale Wert 11 von der Anwendung
als Grenze (die nicht überschritten
werden kann) oder als Ziel (das von Zeit zu Zeit erreicht werden
kann oder nicht erreicht werden kann, z. B. das meistens untertroffen
oder übertroffen
wird) verwendet werden.
-
In
einer Ausführungsform
berechnet (siehe Logik 13) das Datenbanksystem 10 (1A)
einen Wert 14 (nachfolgend „globaler interner Wert"), der intern für die Datenbank-Software
ist, wobei die Menge 12 (1A) des
Speicherplatzes berücksichtigt
wird, der den Prozessen der Anwendung nicht zur Verfügung steht,
beispielsweise zum Ausführen
von Abfragen. Insbesondere berücksichtigt
die Logik 13 (1A) den Speicherplatz („freier
Speicherplatz” genannt),
der zugeordnet ist aber nicht genutzt wird, und den Speicherplatz
(„anderer
Speicherplatz” genannt),
der sich nicht auf Operatoren (wie Sort, Hash-Join und Bitmap Merge) bezieht,
die eine Abfrage implementieren.
-
Abhängig von
der Ausführungsform
verwendet das Datenbanksystem 10 (1A) den
globalen internen Wert 14, um einen anderen internen Wert 17 (auch „Speicherplatzgrenze" genannt), der bei
der Zuordnung von Speicherplatz für jeden Operator verwendet
wird, zu berechnen (siehe Logik 15). Die Speicherplatzgrenze 17 ist
ein Wert auf Operatorebene, der die Speicherplatzmenge bestimmt,
die von jedem Prozess 18 für jeden Arbeitsbereich eines
Operators zugeordnet werden kann. Jeder Prozess 18 vergleicht
die Speicherplatzgrenze 17 mit einer Menge 20 Speicherplatz,
die von einem Operator benötigt
wird, um die Menge 21 des zuzuordnenden Speicherplatzes
zu bestimmen und ordnet danach eine passende Speicherplatzmenge
zu. Abhängig von
dem Datenbanktyp (zum Beispiel hierarchisch) und/oder den Strukturen
und Prozessen, die die Datenbank implementieren, kann jedoch eine
Speicherplatzgrenze direkt von dem extern gesetzten globalen Wert abgeleitet
werden, das heißt,
ohne einen globalen internen Wert 14 zu berechnen, wie
zuvor beschrieben. In einer alternativen Ausführungsform wird darüber hinaus
ein Wert auf Operatorebene 17 nicht verwendet und stattdessen
bestimmt jeder Prozess die Menge des Speicherplatzes, der einem
Operator zuzuordnen ist, basierend auf dem globalen internen Wert 14 oder
selbst auf dem extern gesetzten globalen Wert 11 (abhängig von
der Implementierung), während Statistikwerte über die
Speicherplatznutzung zum Implementieren einer Rückkopplungsschleife berücksichtigt
werden.
-
In
einer solchen Ausführungsform
implementiert das Datenbanksystem 10 (1A)
eine Rückkopplungsschleife
wie folgt: Wenn der extern gesetzte globale Wert von dem gesamten
Speicherplatz, der derzeit von dem Datenbanksystem 10 zugeordnet
ist, übertroffen
wird, setzt das Datenbanksystem 10 die Speicherplatzgrenze
herunter (und umgekehrt), so dass der gesamte Speicherplatz, der
von dem Datenbanksystem 10 zugeordnet ist, sich dem extern
gesetzten globalen Wert 11 nähert, entweder als Ziel oder
als eine Grenze, wie zuvor besprochen. Wenn die Speicherplatzgrenze
nicht verwendet wird, kann eine solche Ausführungsform den globalen internen
Wert 14 ändern,
selbst wenn der Wert 11 unverändert bleibt.
-
Die
zuvor beschriebenen Operationen können auf eine beliebige Weise
ausgeführt
werden, die einem Fachmann angesichts der Offenbarung offensichtlich
ist. Beispielsweise kann die Rückkopplungsschleife
auf der Überarbeitung
der Speicherplatzgrenze 17 (und/oder des globalen internen
Werts 14), entweder periodisch oder asynchron oder beides,
basieren. In einer Ausführungsform überarbeitet
das Datenbanksystem 10 periodisch (das heißt alle
3 Sekunden) die Speicherplatzgrenze 17 basierend auf Statistikwerten,
die sich auf die Speicherplatznutzung beziehen. Das Datenbanksystem 10 kann
auch die Speicherplatzgrenze 17 asynchron überarbeiten,
wenn Speicherplatz zugeordnet wird, beispielsweise, wenn der gesamte
von dem Datenbanksystem 10 zugeordnete Speicherplatz den
extern gesetzten globalen Wert 11 um eine vorbestimmte
Menge (die beispielsweise null oder 10% des Werts 11 sein
kann) übersteigt.
Außerdem
kann die Menge 21 des Speicherplatzes, der zugeordnet wird,
die erforderliche Menge 20 sein oder die Speicherplatzgrenze 17 oder eine
Menge, die von einer oder von beiden abgeleitet ist, das heißt, ein
Mehrfaches der Speicherplatzgrenze oder ein Mehrfaches der geschätzten Menge,
wenn angenommen wird, dass der Operator eine höhere Priorität hat als
andere Operatoren. Im soeben beschriebenen Beispiel kann jedem Operator
anstelle einer Priorität eine
gewisse Menge „Zahlungsmittel" zugeordnet sein,
und die Speicherplatzgrenze 17 kann ein Preis sein, der
unter Verwendung des Zahlungsmittels bezahlt wird, um den Speicherplatz
zu „kaufen". In solch einem
Fall bestimmt die Menge „Zahlungsmittel", die jedem Operator
zugeordnet ist, die Speicherplatzmenge, die der Operator empfängt.
-
In
einer Ausführungsform
umfasst das Datenbanksystem 10 eine Anweisungssequenz (nachfolgend „Memory-Broker") 22, die
die zuvor beschriebene Speicherplatzgrenze 17 berechnen.
Der Memory-Broker 22 kann als Prozess implementiert sein,
der von den Prozessen, die Datenbankabfragen implementieren, separat ist
und sich von ihnen unterscheidet. In diesem Fall vergleicht ein
Datenbankabfrageprozess 18 die Speicherplatzgrenze 17 mit
einem oder mehreren Schätzwerten
und ordnet die richtige Speicherplatzmenge zu. Der Informationstransfer
zwischen dem Memory-Broker 22 und dem Datenbank-Abfrageprozess 18 kann
durch Nachrichten oder durch gemeinsam genutzten Speicher implementiert
werden.
-
In
einer alternativen Ausführungsform
ist die Memory-Broker-Anweisungssequenz nicht als separater Prozess
eingerichtet und stattdessen ruft jeder der Datenbankabfrageprozesse
diese Anweisungen mit einem Funktionsaufruf auf. Daher kann eine
allgemeine Funktion verwendet werden, um Speicherplatz für alle Operatoren
zuzuordnen (anstelle einer unterschiedlichen Funktion für „Sort"- und „Hash"-Operatoren, wie
nachfolgend beschrieben). Wenn eine solche allgemeine Funktion verwendet
wird, nutzt jeder Prozess direkt den extern gesetzten globalen Wert
(ebenfalls zuvor beschrieben), um die Menge des zuzuordnenden Speicherplatzes
abzuleiten.
-
Merkmale
gewisser Ausführungsformen
werden in einer anderen Ausführungsform
kombiniert, wobei ein Memory-Broker lediglich den globalen internen
Wert 14 (zuvor beschrieben) berechnet und jeder Abfrageprozess
den globalen internen Wert 14 verwendet, um die Speicherplatzmenge
abzuleiten, die für
einen Operator zuzuordnen ist. Abhängig von der Ausführungsform
kann auch eine Speicherplatzgrenze 17 unterschiedlich verwendet
werden, wenn Speicherplatz für
jeden Operator zugeordnet wird, beispielsweise kann eine Abfrage
höherer
Priorität
bis zum Zweifachen oder Dreifachen der Speicherplatzgrenze als Speicherplatz
zuordnen, wobei eine Abfrage normaler Priorität Speicherplatz bis zur Speicherplatzgrenze
zuordnet. Daher hängt die
einem Operator auferlegte Grenze von der Priorität der spezifischen Abfrage
ab, die der Operator in diesem Beispiel gerade ausführen will.
In einem anderen Beispiel verhält
sich die Speicherplatzgrenze als „Preis" anstatt als „Grenze". Anstatt, dass eine gemeinsame Speicherplatzgrenze 17 für alle Operatoren
vorhanden ist (beispielsweise für
Abfragen normaler Priorität),
können
auch verschiedene Speicherplatzgrenzen verwendet werden, eine für jeden
Operatortyp.
-
In
einer Ausführungsform
wird der Arbeitsbereichspeicher, der von einem Operator benötigt wird,
von jedem Prozess beim Zuordnen von Speicherplatz geschätzt, und
verschiedene Schätzungen
werden in einer Implementierung vorgenommen, abhängig von dem Modus, in dem
der Operator arbeitet, z. B. (1) ein optimaler Modus, bei dem es
keinen Festplattenzugriff gibt, (2) ein Einfach-Durchlaufmodus,
bei dem es keinen Festplattenzugriff gibt, sondern nur ein Durchlauf
für alle
Daten auf der Festplatte erforderlich ist, und (3) ein minimaler
Modus, bei dem mehrere Durchläufe über die
Daten auf der Festplatte erforderlich sind. Die Zeit, die von einem
Operator benötigt
wird, um eine Abfrage auszuführen,
hängt von
dem Ausführungsmodus
ab, z. B. wird die wenigste Zeit im optimalen Modus benötigt, die
meiste Zeit wird im minimalen Modus benötigt, wobei die Zeit, die für einen
Einfach-Durchlauf erforderlich ist, zwischen dem Maximum und dem
Minimum liegt, wie in 6 veranschaulicht.
Es ist zu beachten, dass für
den gleichen Operator solche Schätzwerte
unterschiedlich für
unterschiedliche Abfragen sind, abhängig von der Größe der Eingangsdaten.
Danach ordnet in dieser Implementierung jeder Prozess eine Speicherplatzmenge
für den
Operator zu, abhängig
von diesen Schätzwerten
und von der Speicherplatzgrenze.
-
Beispielsweise
bestimmt ein Prozess, der den „Sort"-Operator aufruft,
dass die Arbeitsbereichspeichermenge (auch „Sort-Bereich" genannt) wie folgt
zuzuordnen ist: Schätzwert
für den
optimalen Speicherplatz, wenn der Schätzwert für den optimalen Speicherplatz
kleiner ist als die Speicherplatzgrenze, Schätzwert für den Einfach-Durchlaufspeicherplatz,
wenn die Speicherplatzgrenze zwischen dem Schätzwert für den optimalen Speicherplatz
und dem Schätzwert
für den
Einfach-Durchlauf-Speicherplatz liegt, und Schätzwert für den minimalen Speicherplatz,
wenn die Speicherplatzgrenze kleiner ist als der Schätzwert für den Einfach-Durchlauf-Speicherplatz.
-
In
diesem besonderen Beispiel bestimmt ein Prozess, der den „Hash join"-Operator aufruft,
dass die Arbeitsbereichspeichermenge (auch „Hash-Bereich") genannt, wie folgt
zuzuordnen ist: Schätzwert
für den
optimalen Speicherplatz, wenn der Schätzwert für den optimalen Speicherplatz
kleiner ist als die Speicherplatzgrenze, Speicherplatzgrenze, wenn
die Speicherplatzgrenze zwischen dem Schätzwert für den optimalen Speicherplatz
und dem Schätzwert
für den
minimalen Speicherplatz liegt, und Schätzwert für den minimalen Speicherplatz,
wenn die Speicherplatzgrenze kleiner ist als der Schätzwert für den minimalen
Speicherplatz. Dies beruht darauf, dass der Hash-Join-Operator von
dem zusätzlichen Speicherplatz
profitiert, zwischen dem Schätzwert
für den
Einfach-Durchlauf-Speicherplatz und dem Schätzwert für den optimalen Speicherplatz,
wobei der Sort-Operator nicht davon profitiert. Wenn die Speicherplatzgrenze
niedriger ist als der Schätzwert
für den
minimalen Speicherplatz, empfangen in diesem Beispiel alle Operatoren
ihren jeweiligen Schätzwert
für den
minimalen Speicherplatz in einer Ausführungsform, wobei in einer
anderen Ausführungsform
solche Operatoren in die Warteschlange gestellt werden (bis die
Speicherplatzgrenze über
den Schätzwert
für den
minimalen Speicherplatz hinaus ansteigt).
-
Daher
ermöglicht,
das Datenbanksystem 10 DBAs, die Speicherparameter abzustimmen,
die schwierig manuell abzustimmen sind, wenn Datenbanken des Stands
Technik verwendet werden. Insbesondere sollte die Regulierung der
Menge des Speicherplatzes, der zugeordnet wird, von der relativen
Häufigkeit
der Verwendung eines Operators, den Speicherplatzanforderungen für jeden
Operator und der Einstellung von Operatoren, die gleichzeitig im
System aktiv sind, abhängen.
Diese Bedingungen könnten
im Laufe eines Tages stark variieren, insbesondere für ad-hoc-Umgebungen.
Die Parameter des Stands der Technik, die den Anmeldern bekannt
sind, werden nicht automatisch angepasst, und somit kompensieren
sie nicht eine niedrige oder hohe Speicherplatznutzung im System.
Außerdem
steuern die Parameter des Stands der Technik, die den Anmeldern
bekannt sind, nicht die maximale Speicherplatzmenge, die eine Abfrage
nutzt, was zu einer Verschärfung der übermäßigen Zuordnung
von Speicherplatz führen
kann und häufig
Trashing aufgrund von Speicherplatzverarmung verursacht. Schließlich verschwenden
solche Parameter des Stands der Technik häufig PGA-Speicher, weil mehr
Speicherplatz zugeordnet wird, als notwendig ist, um eine akzeptable
Leistung zu erhalten. Ein solcher Speicherplatz, der beim Stand
der Technik nicht genutzt wird, sollte besser von anderen Abfragen
verwendet werden oder sogar von anderen Anwendungen, wenn ein extern
gesetzter globaler Wert 11 verwendet wird, wie zuvor beschrieben.
-
Ein
Computer 100 (1B) einer Ausführungsform,
die die zuvor beschriebenen Operationen implementiert, führt eine
Anzahl von Softwareprogrammen aus, wie ein Betriebssystem 101,
eine Prozesslogik 102, eine Netzwerkanwendung 103 und
eine Datenbankanwendung 110. Der Computer 100 kann
ein beliebiger Computer sein, wie ein IBM Personal Computer (PC)
oder eine Sun Workstation, wie ein Ultra Sparc II. Der Computer 100 umfasst
eine oder mehrere Zentraleinheiten (CPUs), um Anweisungen auszuführen, einen
nicht flüchtigen
Speicher (wie eine Festplatte), um Daten und Anweisungen zu halten,
und einen flüchtigen
Speicher (wie ein DRAM) um Daten und Anweisungen während der
Ausführung
vorübergehend
zu halten. Der Computer 100 umfasst auch einen Bus, der
die CPUs und die Speicher miteinander verbindet. Der Computer 100 kann
eine Anzeigevorrichtung (wie eine Kathodenstrahlröhre) zum
Anzeigen von Informationen an einen Benutzer, und eine oder mehrere
Eingabevorrichtungen (wie eine Tastatur und/oder eine Maus) umfassen,
um Befehle vom Benutzer zu empfangen.
-
Die
Verwendung eines solchen Computers 100 ist in der nachfolgenden
Beschreibung an sich erforderlich, selbst wenn eine solche Verwendung
nicht ausdrücklich
identifiziert wird. Die Datenbankanwendung 110 führt Abfragen
verschiedener Arten aus, um Informationen in einer Datenbank (die
beispielsweise eine relationale Datenbank sein kann) zu speichern
und Informationen von ihr abzurufen. Jede Abfrage kann auf normale
Weise über
eine oder mehrere Operatoren ausgeführt werden, wie Sort, Hash-Join
und Bitmap Merge. Während
der Ausführung
jeder Abfrage ordnet der Computer 100 Speicherplatz wie
nachfolgend beschrieben zu. Die Zuordnung basiert entweder direkt
oder indirekt auf dem extern gesetzten globalen Wert 11 (dargestellt durch
den Wert des Datenbankparameters PGA AGGREGATE TARGET). In dieser
besonderen Ausführungsform
wird der Wert 11 als ein Ziel für den gesamten Speicherplatz
verwendet, der für
die interne Nutzung durch Prozesse (manchmal „Serverprozesse" genannt) zuzuordnen
ist, die die Datenbankabfragen ausführen. In einer Ausführungsform
empfängt
(siehe Schritt 112) eine Benutzerschnittstelle 111 (1B)
den globalen Wert 11 von einem Datenbankadministrator und
speichert (siehe Schritt 113) den Wert in dem gemeinsam
genutzten Speicher. Jeder Prozess ordnet Speicherplatz zu seiner
internen Nutzung basierend (zumindest teilweise) auf dem Wert 11 zu,
der von dem gemeinsam genutzten Speicher gelesen wird.
-
Eine
Ausführungsform
der Datenbank 110 umfasst eine Anweisungssequenz (nachfolgend „Memory-Broker") 115, die
einen internen Wert von dem globalen Wert 11 und optional
von Statistikwerten zur derzeitigen Speicherplatznutzung ableitet
(siehe Schritt 116 in 1B) und
den internen Wert zur Verwendung durch die Serverprozesse speichert
(siehe Schritt 117), wenn der Speicherplatz zugeordnet
wird. Abhängig
von der Implementierung kann der interne Wert entweder ein globaler
interner Wert 14 sein, der für den Speicherplatz gilt, der
von allen Prozessen 120A–120Z zugeordnet wird,
oder eine Speicherplatzgrenze 17 auf Operatorebene, die
nur für
den Speicherplatz gilt, der für
einen Operator zugeordnet wird. Basierend auf den Statistikwerten
zur Speicherplatznutzung überarbeitet
der Memory-Broker 115 dynamisch den internen Wert in Reaktion
auf die Speicherplatzzuordnungen durch die Serverprozesse 120A–120Z (wobei
A ≤ I ≤ Z, wobei
Z die derzeitige Anzahl von Prozessen ist, wodurch eine Rückkopplungsschleife
gebildet wird (veranschaulicht durch Verzweigung 118 in 1B).
-
Abhängig von
der Ausführungsform
nutzt ein Serverprozess 120A (siehe Schritt 121)
entweder den extern gesetzten globalen Wert 11 oder einen
der internen Werte 14 und 17, um den zuzuordnenden
Speicherplatz zu bestimmen und weist danach den Speicherplatz zu.
Als Nächstes
aktualisiert (siehe Schritt 122) der Prozess 120A die
Statistikwerte über
die Nutzung von Speicherplatz (z. B. um die Speicherplatzmenge anzugeben,
die zugeordnet worden ist) und geht dazu über, die Abfrage auf normale
Weise auszuführen.
Nach Beendigung der Abfrageverarbeitung hebt der Prozess 120A den
zuvor zugeordneten Speicherplatz auf (siehe Schritt 123)
und aktualisiert (siehe Schritt 124) auch die Statistikwerte über die
Speicherplatznutzung.
-
Wie
zuvor angemerkt, nutzt der Memory-Broker 115 die Statistikwerte
zur Speicherplatznutzung in Schritt 116, um entweder einen
oder beide internen Werte 14 und 17 zu überarbeiten,
abhängig
von der Ausführungsform.
Beispielsweise kann der Memory-Broker 115 befinden,
dass es zu viele Prozesse gibt und der gesamte zugeordnete Speicherplatz
kann den extern gesetzten globalen Wert 11 wesentlich überschreiten,
in welchem Fall der Memory-Broker 115 entweder einen oder
beide internen Werte 14 und 17 herabsetzt, so
dass zukünftig
eine geringere Speicherplatzmenge (als die derzeitige Menge) von
den Prozessen zugeordnet wird. Wenn andererseits der Memory-Broker 115 befindet,
dass es zu wenige Prozesse gibt und der gesamte zugeordnete Speicherplatz
den extern gesetzten globalen Wert 11 nicht erreicht, kann
der Memory-Broker 115 entweder einen oder beide internen
Werte 14 und 17 erhöhen, so dass zukünftig eine
größere Speicherplatzmenge
von den Prozessen zugeordnet wird. In dieser Ausführungsform
werden der extern gesetzte globale Wert 11 und die internen
Werte 14 und 17 von der Datenbankanwendung 110 als
Ziele behandelt, die versucht, das Ziel/die Ziele innerhalb eines
gewissen Bereichs zu erfüllen.
-
Der
Memory-Broker 115 dieser Ausführungsform arbeitet periodisch
(beispielsweise alle 3 Sekunden einmal), um das interne Ziel, das
von den Prozessen 120A–120Z verwendet
wird, zu überarbeiten,
um Speicherplatz zuzuordnen. Ein Serverprozess 120I kann
jedoch ebenfalls den Memory-Broker 115 aufrufen, z. B. wenn
der gesamte zugeordnete Speicherplatz den extern gesetzten globalen
Wert 11 um eine vorbestimmte Menge überschreitet. Insbesondere
berechnet (siehe Schritt 125 in 1A) der
Prozess 120A in einer Ausführungsform einen Unterschied
(nachfolgend „Abweichung") zwischen dem gesamten
Speicherplatz, der von allen Prozessen 120A–120Z zugeordnet
wird und dem extern gesetzten globalen Wert 11. In einer
spezifischen Implementierung ist die „Abweichung" eine Nummer mit
Vorzeichen, die die inkrementale Zuordnung oder die Aufhebung der
Zuordnung von Speicherplatz von der letzten Berechnung der Speicherplatzgrenze 17 angibt.
Diese spezifische Implementierung stellt die Abweichung auf Null,
warm immer die Speicherplatzgrenze 17 neu berechnet wird.
Danach erhöht
jeder Prozess 120I, der Speicherplatz für einen Operator zuordnet, die
Abweichung um die Menge des zugeordneten Speicherplatzes (auf ähnliche
Weise wird, wenn der Speicherplatz freigegeben wird, die Abweichung
um die Menge des freigegebenen Speicherplatzes herabgesetzt).
-
Nach
der Zuordnung prüft
der Prozess 120A, ob die Abweichung z. B. 10% des extern
gesetzten globalen Werts 11 überschreitet und wenn ja, ruft
er den Memory-Broker 115 auf. Wenn er aufgerufen wird, überarbeitet
der Memory-Broker 115 entweder einen oder beide der internen
Werte 14 und 17 auf die zuvor besprochene Weise.
Der Prozess 120A kann auch die Abweichung berechnen (siehe
Schritt 126 in 1B) und
den Memory-Broker 115 alarmieren, wenn eine Zuordnung von
Speicherplatz aufgehoben wird.
-
Abhängig von
der Ausführungsform
kann der Memory-Broker 115 einen internen Wert 14 verwenden, der
global ist, um eine andere interne Grenze 17 zu berechnen,
die auf der Operatorebene angewandt wird. Insbesondere wird eine
solche Grenze auf Operatorebene („Speicherplatzgrenze” genannt) 141 (2)
in einem gemeinsam genutzten Speicher 140 gehalten und
identifiziert eine Grenze auf dem (oder ein Ziel für den) Speicherplatz,
der von einem Serverprozess 12A zuzuordnen ist, für jeden
Operator in jeder Abfrage. Daher vergleichen die Serverprozesse 120A–120Z die
Speicherplatzgrenze 141 mit einem Schätzwert 142I des benötigten Speicherplatzes
(z. B. für
den Operator, um in einem Einfach-Durchlaufmodus zu arbeiten), um den zuzuordnenden
Speicherplatz zu bestimmen und danach eine passende Speicherplatzmenge
zuzuordnen (oder in die Warteschlange zu stellen, abhängig von
der Implementierung). Es ist zu beachten, dass in dieser Implementierung
die gleiche Speicherplatzgrenze 141 verwendet wird, um
Speicherplatz allen Operatoren zuzuordnen, obgleich in einer anderen
Implementierung eine andere Speicherplatzgrenze für jeden
Operatortyp verwendet werden kann (z. B. kann Hash-Join eine Grenze
haben, die sich von einer entsprechenden Grenze für Sort unterscheidet).
-
Jeder
der Schätzwerte 142A–142P wird
in einem Profil 143J eines Operators gehalten, für den Speicherplatz
zuzuordnen ist. In einer Implementierung wird jedes einer Anzahl
Profile 143A–143V in
dem gemeinsam genutzten Speicher 140 gehalten. In dieser
Implementierung registrieren die Prozesse 120A–120Z jeden Operator
(siehe Schritt 127 in 1B), indem
sie in dem gemeinsam genutzten Speicher 140 ein entsprechendes
Profil 143 erzeugen, das drei Schätzwerte für Speicherplatz enthält, der
von dem Operator benötigt
wird, um in jedem der folgenden Modi arbeiten zu können: optimaler
Modus, Einfach-Durchlaufmodus und minimaler Modus. Der „optimale" Modus wird in diesem
Dokument auch als „Cache"-Modus bezeichnet,
weil während der
Ausführung
kein Festplattenzugriff seitens eines Operators erforderlich ist.
-
Danach
bestimmt ein Prozess 120I die Menge des Speicherplatzes,
der für
einen Sort-Operator
in einer Datenbankanwendung zuzuordnen ist, wie folgt: Schätzwert für den optimalen
Speicherplatz 142P, wenn der Schätzwert für den optimalen Speicherplatz 142P kleiner
als die Speicherplatzgrenze 141 ist (siehe Schritte 151–152 in 3),
Schätzwert
für den
Einfach-Durchlaufspeicherplatz 142I (2),
wenn die Speicherplatzgrenze 141 zwischen dem Schätzwert für den optimalen
Speicherplatz 142P und dem Schätzwert für den Einfach-Durchlaufspeicherplatz 142I (siehe
Schritte 153 bis 154 in 3) liegt,
und Schätzwert
für den
minimalen Speicherplatz 142A (2) wenn
die Speicherplatzgrenze 141 kleiner als der Schätzwert für den minimalen
Speicherplatz 142I (siehe Schritt 155 in 3)
ist. Die gerade beschriebene Zuordnung wird verwendet, weil der
Sort-Operator vom Einfach-Durchlauf-Schätzwert zum Cache-Schätzwert nicht
so sehr von einer Speicherplatzerhöhung profitiert (im Vergleich
zur Speicherplatzerhöhung
von minimal zu Einfach-Durchlauf).
-
Wie
anderswo zu bemerken ist, kann das spezifische Verfahren zum Bestimmen
der Menge des zuzuordnenden Speicherplatzes von verschiedenen Faktoren
abhängen:
den Prozessattributen (zum Beispiel der Priorität) oder dem Operator. Schritt 127 von 1B ist
optional, und es ist nicht notwendig, die Operatorprofile in dem
gemeinsam genutzten Speicher 140 zu registrieren, und stattdessen
werden solche Profile individuell von jedem Prozess 120A in
seinem eigenen internen Speicher in anderen Implementierungen gehalten.
-
Es
ist zu beachten, dass der Schätzwert
für den
minimalen Speicherplatz 142A größer sein kann als die Speicherplatzgrenze 141 für einige
Operatoren, und in einer Ausführungsform
werden solche Prozesse nicht in die Warteschlange gestellt, dürfen aber
den Schätzwert
für den
minimalen Speicherplatz 142A zuordnen, so dass die Abfrage
ausgeführt
wird. In solch einem Fall kann, wenn andere Prozesse zu wenig zuordnen, das
heißt
weniger zuordnen, als die Speicherplatzgrenze 141 ist,
der gesamte Speicherplatz, der von der Anwendung zugeordnet wird,
unter dem extern gesetzten globalen Wert 11 bleiben. Die
Prozesse 120A–120Z, die
mehr Speicherplatz zuordnen als die Speicherplatzgrenze 141 ist,
können
die Prozesse übersteigen,
die zu wenig zuordnen, so dass der gesamte zugeordnete Speicherplatz
den extern gesetzten globalen Wert 11 übersteigt und veranlassen kann,
dass der globale interne Wert 14 herabgesetzt wird (durch
den Memory-Broker 115), was wiederum veranlasst, dass die
Speicherplatzgrenze 141 herabgesetzt wird (auch durch den
Memory-Broker 115).
Danach werden die Prozesse 120A–120Z gezwungen, weniger
Speicherplatz zuzuordnen, als sie ansonsten zuordnen würden, wenn
der Wert 11 unverändert
geblieben wäre.
Auf diese Weise gibt es ein Geben und Nehmen zwischen den Prozessen 120A–120Z,
so dass der extern gesetzte globale Wert 11 erreicht wird.
Wenn die gesamte Anzahl von Prozessen 120A–120Z übermäßig ist,
wenn beispielsweise die Summe des Schätzwerts für den minimalen Speicherplatz 142A–1422 für alle Prozesse
den Wert 11 übersteigt,
dann wird kein zusätzlicher
Speicherplatz für
einen beliebigen Prozess zugeordnet und stattdessen werden Speicherplatzanforderungen
in die Warteschlange gestellt.
-
In
einer Ausführungsform
aktualisieren die Prozesse 120A–120Z auch die Statistikwerte 160 (2) über die
Speicherplatznutzung, wann immer Speicherplatz zugeordnet wird oder
die Zuordnung aufgehoben wird, wie zuvor mit Bezug auf 1A angemerkt.
Insbesondere umfassen die Statistikwerte 160 die Speicherplatzmenge
(„freier
Speicherplatz” genannt) 161 (2 und 4),
die zugeordnet aber nicht genutzt wird. Beispielsweise muss ein
Prozess 120I möglicherweise
1 MB zuordnen, aber wenn das Betriebssystem 101 Speicherplatz
nur in 4 MB-Inkrementen bereitstellt (z. B. weil dies die Seitengröße ist),
so sind 3 MB freier Speicherplatz, 4 MB ist zugeordneter Speicherplatz
und 1 MB ist genutzter Speicherplatz. Der freie Speicherplatz 161 (4)
ist normalerweise für
keinen anderen Prozess 120J verfügbar.
-
Die
Prozesse 120A–120Z aktualisieren
auch in den Statistikwerten 160 die Speicherplatzmenge
(„anderer
Speicherplatz” genannt) 162 (2 und 4),
die nicht mit Operatoren (wie Sort, Hash-Join und Bitmap Merge)
in Verbindung steht, die eine Abfrage implementieren. Beispielsweise
kann der Prozess 120I PL/SQL oder Java-Anweisungsfrequenzen umfassen, die nicht
mit den Abfrage-Implementierungsoperatoren in Beziehung stehen,
und für
die Speicherplatz 162 genutzt wird. Normalerweise kann
anderer Speicherplatz 162 nicht geändert werden, indem die Weise
geändert
wird, auf die die Operatoren funktionieren (z. B. Einfach-Durchlauf
v/s Mehrfach-Durchlauf).
-
Die
Prozesse 120A–120Z pflegen
auch in den Statistikwerten 160 die Speicherplatzmenge
(„Arbeitsbereichspeicherplatz” genannt) 163,
der tatsächlich
von den Operatoren genutzt wird. Die Pflege von Statistikwerten 160 durch
die Prozesse 120A–120Z wird
in einer Ausführungsform
in Wrapper-Funktionen implementiert, die wiederum „malloc" oder „free" aufrufen. Außerdem können die
Statistikwerte 160 separat für jeden der einzelnen Prozesse 120A–120Z behalten
werden oder alternativ kann die Gesamtsumme jeder Statistik (über alle
Prozesse 120A–120Z)
erhalten werden.
-
In
einer Ausführungsform
nutzt der Memory-Broker 115 die zuvor beschriebenen Statistikwerte 160, um
den globalen internen Wert 14 (in 5 als Ti
bezeichnet, das als Ziel für
die Menge des Arbeitsbereichspeicherplatzes 163 genutzt
wird) auf die nachfolgende Weise. Insbesondere berechnet der Memory-Broker 115 zuerst
den anderen Speicherplatz 162 (in 5 als Om
bezeichnet) als die Differenz zwischen dem genutzten Speicherplatz 164 (in 5 als
Um bezeichnet) und dem Arbeitsbereichspeicherplatz 163 (in 5 als
Wm bezeichnet). Als nächstes
prüft der
Memory-Broker 115 (siehe Schritt 172 in 5),
ob der extern gesetzte globale Wert 11 (auch „PGA AGGREGATE
TARGET" genannt
und in 5 als Tpga bezeichnet) geringer ist als der andere
Speicherplatz 162, und wenn ja, stellt er Ti so ein, dass
er 6% von Tpga beträgt.
-
Daher
wird im ungünstigsten
Fall, wenn der andere Speicherplatz 162-Speicher zu groß ist, ein
gewisses Minimum (z. B. 6%) von Tpga als der globale interne Wert 14 verwendet.
Dies beruht darauf, dass die Größe des anderen
Speichers 162 außerhalb
der Steuerung des Memory-Brokers 115 liegt. Wenn der andere Speicherplatz 162 geringer
ist als Tpga, dann stellt der Memory-Broker 115 in Schritt 174 den
globalen internen Wert 14 auf 90% der Differenz zwischen
Tpga und Om und geht weiter zu Schritt 175. Dies erfolgt
als eine „Sicherheits"-Maßnahme,
um eine Veränderung
des zugeordneten Speicherplatzes während des Zeitraums zwischen
zwei aufeinander folgenden Operationen des Memory-Brokers 115 zu
berücksichtigen
(somit wird in einem Beispiel nicht erwartet, dass der zugeordnete
Speicherplatz schneller als 10% in drei Sekunden wächst).
-
Als
nächstes
prüft der
Memory-Broker 115 in Schritt 175, ob der zugeordnete
Speicherplatz (in 5 als Am bezeichnet) größer ist
als Tpga und wenn ja, geht er über
zu Schritt 176 (um die Überzuordnung
zu handhaben) und geht alternativ weiter zu Schritt 177 (um
die Unterzuordnung zu handhaben). In Schritt 176 berechnet
der Memory-Broker 115 einen Faktor Fwa (auch „Arbeitsbereichs-Zuordnungsfaktor" genannt) als das
Verhältnis
Wm/(Om + Wm) und berechnet überdies
einen anderen Faktor Foa (auch „Überzuordnungs-Faktor” genannt)
als das Verhältnis
(Am – Tpga)/Am
und bestimmt, dass die neue Grenze Ti die derzeitige Grenze Ti multipliziert
mit (1 – Fwa·Foa) ist.
-
In
Schritt 177 prüft
der Memory-Broker 115, ob 90% von Am geringer ist als Tpga
und auch, ob die Summe aller Zuordnungen für den optimalen Speicherplatz
größer ist
als Tpga und wenn ja, gibt es keine Veränderung in Ti. Alternativ geht
der Memory-Broker 115 zu Schritt 179 über, um
den zuvor beschriebenen Arbeitsbereich-Zuordnungsfaktor Fwa zu berechnen.
Als Nächstes
berechnet der Memory-Broker 115 in Schritt 180 einen
Unterzuordnungs-Faktor Fua (auch „Boosting-Faktor" genannt) als das
Verhältnis
(Tpga – Am)/Tpga.
Danach berechnet der Memory-Broker 115, dass die neue Grenze
Ti die derzeitige Grenze Ti multipliziert mit (1 + Fwa·Fua) ist.
Als nächste
stellt der Memory-Broker 115 (in Schritt 182)
entweder die neue berechnete Grenze Ti oder 6% von Tpga, je nachdem
was größer ist,
als den globalen internen Wert 14 ein, der wie nachfolgend
in diesem Dokument beschrieben verwendet wird.
-
Insbesondere
wird der neue berechnete globale interne Wert 14 zukünftig verwendet,
um Speicherplatz zuzuordnen, der von verschiedenen Operatoren benötigt wird.
Wie anderswo in diesem Dokument beschrieben, kann solch ein globaler
interner Wert 14 direkt von den Prozessen (die Speicherplatz
für jeden
einzelnen Operator zuordnen) verwendet werden oder kann verwendet
werden, um eine Speicherplatzgrenze 17 zu berechnen, die
wiederum von solchen Prozessen verwendet wird. In einer spezifischen
Ausführungsform wird
die Speicherplatzgrenze 17 von dem globalen internen Wert 14 wie
nachfolgend in Pseudo-Code in dem anhängigen Appendix beschrieben.
-
Die
automatische und dynamische Zuordnung von Speicherplatz, wie in
diesem Dokument beschrieben, kann in Kombination mit einem manuellen
Mechanismus des Stands der Technik genutzt werden, z. B. mittels
eines Datenbankparameters, der „WORKAREA_SIZE_POLICY" genannt werden kann,
der auf einen der zwei Werte AUTO und MANUAL gesetzt werden kann.
Das Setzen dieses Parameters auf AUTO ruft automatische und dynamische
Zuordnung auf. Außerdem
kann ein anderer Datenbankparameter PGA_AGGREGATE_TARGET (zuvor
beschrieben) implementiert werden, und wenn er von dem Datenbankadministrator
gesetzt worden ist, wird der Standardwert des Parameters WORKAREA_SIZE_POLICY
automatisch auf AUTO gesetzt.
-
Alternativ
wird der Wert des Parameters WORKAREA_SIZE_POLICY automatisch auf
MANUAL gesetzt, wenn PGA_ AGGREGATE_TARGET nicht gesetzt ist. Wenn
der Parameter WORKAREA_SIZE_POLICY auf MANUAL gesetzt ist, dann
wird PGA AGGREGATE TARGET in dieser Ausführungsform nicht verwendet
und stattdessen nutzt die Datenbank einen Mechanismus des Stands
der Technik (z. B. mittels Verwendung der einzelnen Ziele, die von
dem Datenbankadministrator bezüglich
des Speicherplatzes für
jeden Operator eingestellt wurden).
-
Die
automatischen und manuellen Mechanismen können kombiniert werden, beispielsweise
um eine Rückwärtskompatibilität zu erhalten:
einige Operatoren können
den manuellen Mechanismus nutzen, während andere den automatischen
Mechanismus nutzen können.
Bei solch einem kombinierten Betrieb wird der globale interne Wert 14 automatisch
herabgesetzt, um den Speicherplatz unterzubringen, der von dem manuellen Mechanismus
genutzt wird.
-
Abhängig von
der Speicherplatznutzung kann der Memory-Broker 115 die
Speicherplatzgrenze 17 gleich herabsetzen, nachdem ein
Operator Speicherplatz zugeordnet hat, beispielsweise wenn ein plötzlicher Anstieg
der Anzahl abflaufender Abfragen auftritt. Umgekehrt kann der Memory-Broker 115 die
Speicherplatzgrenze 17 erhöhen, wenn die Nachfrage an
Speicherplatz abfällt.
Nachdem ein neuer interner Wert für die Speicherplatzgrenze 17 berechnet
worden ist, wird der Wert 17 in einer besonderen Ausführungsform
nur auf neue Operatoren angewandt, die kurz davor sind, Speicherplatz
zuzuordnen, nach der Berechnung. In einer alternativen Ausführungsform
wird ein solcher neuer Wert der Speicherplatzgrenze 17 auch
von Operatoren verwendet, die zuvor Speicherplatz zugeordnet haben
und die derzeit ausführen,
wodurch ihr zuvor zugeordneter Speicherplatz während der Ausführung herabgesetzt
(oder erhöht)
wird.
-
Das
Ansprechvermögen
der Operatoren auf eine Veränderung
der Speicherplatzgrenze 17 kann die Anzahl Male, die der
Memory-Broker 115 die Speicherplatzgrenze 17 innerhalb
eines gegebenen Intervals neu berechnet und/oder die Menge der Veränderung
der Speicherplatzgrenze 17 beeinträchtigen. Wenn beispielsweise
die Operatoren, die derzeit ausführen,
nicht ansprechen oder langsam ansprechen (im Vergleich zum Ansprechvermögen des
Memory-Brokers 115) dann setzt der Memory-Broker 115 wiederholt
den globalen internen Wert 14 und die Speicherplatzgrenze 17 herab,
so dass gewährleistet
ist, dass sich der gesamte zugeordnete Speicherplatz dem Ziel des
extern gesetzten globalen Werts 11 annähert.
-
Um
auf Veränderungen
der Speicherplatzgrenze 17 nach der Zuordnung von Speicherplatz
ansprechen zu können,
können
Operatoren (wie Sort und Hash-Join) an günstigen Stellen während ihrer
Ausführung prüfen, ob
eine Veränderung
der Speicherplatzgrenze 17 (oder des globalen internen
Werts 14) vorliegt. Die Stellen, an denen eine Veränderung
der Speicherplatzgrenze 17 (oder des globalen internen
Werts 14) geprüft wird,
können
entweder synchron (beispielsweise einmal pro Sekunde) oder asynchron
(beispielsweise nachdem ein oder mehrere Schritte während der
Ausführung
eines Operator ausgeführt
worden sind) eingestellt werden. In beiden Ausführungsformen wechseln die Operatoren
ihre Modi, beispielsweise von optimal zu Einfach-Durchlauf oder
von Einfach-Durchlauf zu minimal und daher ihren zugeordneten Speicherplatz,
abhängig von
Entscheidungen, die vom Memory-Broker 115 getroffen wurden.
Darüberhinaus
können
die Operatoren solcher Ausführungsformen
ihre Schätzwerte
für Speicherplatzanforderungen
dynamisch während
ihrer Operation überarbeiten.
-
Nachfolgend
werden kurz Modifikationen an einem Hash-Join-Operator und an einem
Sort-Operator, um
einen Moduswechsel und eine Änderung
des zugeordneten Speicherplatzes während der Ausführung zu implementieren,
beschrieben.
-
In
einer Ausführungsform
registriert ein Hash-Join-Operator der AUTO-Version (zuvor beschrieben) Informationen über seinen
Arbeitsbereich (speichert beispielsweise einen Schätzwert des
Speicherplatzes, der in jedem der drei Modi erforderlich ist: optimaler
Modus, Einfach-Durchlaufmodus und minimaler Modus). In dieser Ausführungsform
gibt eine Variable mit der Bezeichnung „mode" (die in SGA steht) für jeden
Operator den derzeitigen Operationsmodus eines Operators und daher
seine Speicherplatznutzung an. In dieser Ausführungsform wird die variable „mode" für jeden
Operator nur von dem Operator in dieser Ausführungsform geändert (obgleich
der Memory-Broker 115 in einer alternativen Ausführungsform
eine solche Änderung
vornehmen kann.
-
Solange
die Speicherplatzgrenze 17 ausreichend hoch ist, arbeitet
der Hash-Join-Operator im optimalen Modus und der Hash-Join-Operator
ordnet eine anfängliche
Speicherplatzmenge zu und erhöht
seinen Speicherplatz dynamisch (bis zum Schätzwert für den optimalen Speicherplatz),
um angegebene Tupel zu speichern. Selbst beim Arbeiten im optimalen
Modus untergliedert der Hash-Join-Operator die Eingabedaten basierend
auf der Einfach-Durchlaufanforderung,
um das Umschalten auf den Einfach-Durchlaufmodus zu ermöglichen,
wenn die Speicherplatzgrenze 17 herabgesetzt wird. Beim
Aufbauen von Speicherplatz nimmt der Hash-Join-Operator in dieser
Ausführungsform,
wenn die Speicherplatzgrenze 17 ausreichend herabgesetzt worden
ist, um einen Moduswechsel von optimal auf Einfach-Durchlauf zu veranlassen,
eine Größenänderung seines
Arbeitsbereichs auf die Einfach-Durchlaufanforderung
vor, indem er eine passende Menge Daten auf die Festplatte räumt.
-
Während des
Einfach-Durchlaufmodus' (in
der Build-Phase) arbeitet der Hash-Join-Operator auf normale Weise.
Der Arbeitsbereich ist jedoch so bemessen, dass er eine Build-Partition
plus einen oder mehreren IO-Slots pro zusätzlicher Partition umfasst
(um die asynchrone Eingabe und Ausgabe zu unterstützen). Während dieser
Phase wird die Größe des Arbeitsbereichs
nicht geändert,
selbst wenn die Eingabe wesentlich größer ist als erwartet. Der Hash-Join-Operator
nutzt nur die Speicherplatzmenge, die für den Einfach-Durchlaufmodus zu
der Zeit geschätzt
wurde, als der Aufbau gestartet wurde.
-
Nachdem
der erste Einfach-Durchlauf-Aufbau (welcher das erste Build ist)
beendet worden ist, ist die Größe jeder
Build-Partition bekannt. Wenn die tatsächliche Größe der größten Partition zweimal (oder
mehr) größer ist
als eine vorhergesagte gemeinsame Größe für jede Partition (z. B. die
Einfach-Durchlaufgröße) baut der
Hash-Join-Operator unter Verwendung von Tupeln von dem ersten Aufbau
neu auf. Der Rebuild-Schritt verwendet die genaue Größe, um die
ideale Anzahl von Build-Partitionen und somit einen genaueren Schätzwert des
Arbeitsbereichspeicherplatzes zu bestimmen.
-
Das
zweite Aufbauen ist schneller als das erste Build (in den meisten
Fällen),
weil die Eingabedatengröße während des
Neuaufbaus kleiner ist als die ursprüngliche Datengröße, die
Aufbauzeit ist im Allgemeinen sehr klein im Vergleich zur Suchzeit.
Außerdem
ist die zusätzliche
neue Aufbauzeit im Vergleich zur gesamten Ausführungszeit des Hash-Join-Operators zu vernachlässigen,
weil die Suchzeit wesentlich größer ist.
Die Speicherplatzerspamis aufgrund eines solchen Neuaufbaus könnte jedoch
enorm sein (wenn der Schätzfehler der
Eingabegröße groß ist).
-
Solange
die Speicherplatzgrenze 17 hoch ist, um die Ausführung im „Cache"- (auch „optimaler) " Modus zu erlauben,
sucht der Hash-Join im Speicher. Wenn die Grenze 17 ausreichend
herabgesetzt wird, um eine Modusänderung
nach „Einfach-Durchlauf" zu veranlassen,
wird der Hash-Join auf eine Einfach-Durchlaufsuche schalten, indem
die Größe seines
Hash-Bereichs geändert
wird. Zu dieser Zeit wird eine Teilmenge von Partitionen auf die
Festplatte gebracht und die Suche führt im Einfach-Durchlaufmodus
mit den Partitionen fort, die im Speicher geblieben sind. Später werden,
falls die Speicherplatzgrenze 17 bei der Überarbeitung niedriger
gesetzt wird als der Schätzwert
für den
Einfach-Durchlauf, alle Build-Partitionen, die derzeit im Speicher
verbleiben, auf die Festplatte gebracht. Dann wird die Suche [Probe]
basierend auf der Mindestanforderung unterteilt (z. B. zwei Slots
pro Partition).
-
Für jedes
Paar Build/Probe-Partition ordnet der Hash-Join-Operator genug Speicherplatz
zu, um die kleinste der zwei Partitionen im Cache-Speicher zu speichern.
Wegen der potentiellen zusätzlichen
Rebuild-Phase sollte der verbrauchte Speicher nahe der idealen Einfach-Durchlauf-Speicherplatzanforderung sein,
selbst wenn der Schätzwert
für die
Eingabegröße nicht
korrekt war.
-
Die
Modifikationen, die an dem Sort-Operator vorgenommen werden, wenn
er in der „AUTO"-Version (zuvor beschrieben)
läuft,
sind ähnlich
denen, die am Hash-Join-Operator vorgenommen werden. Der Sort-Operator
ist in der Lage, zu einem beliebigen Zeitpunkt vom optimalen Modus
zum Einfach-Durchlaufmodus umzuschalten. Der Sort-Operator erhöht auch
progressiv die Größe jedes
Sortierdurchlaufs, um schlechte Schätzwerte bei der Eingabegröße zu berücksichtigen.
Auf diese Weise führt
der Sort-Operator stets eine Einfach-Durchlauf-Zusammenführung bei einer geringen Erhöhung des
Speicherplatzes aus.
-
In
einer Ausführungsform
registriert der Sort-Operator, wenn der von dem Sort-Operator geschätzte Arbeitsbereich
einen vorbestimmten Wert (wie 128 KB) überschreitet, sein Arbeitsbereichsprofil
(umfassend den Schätzwert).
Schätzwerte,
die gleich und geringer als der vorbestimmte Wert sind, werden nicht
registriert, so dass der Einfluss der Verwendung des Memory-Brokers 115 bei
der Online-Transaktionsverarbeitungs(OLTP)-Umgebung begrenzt wird,
wobei Eingaben in den Sort-Operator im Vergleich zu anderen Umgebungen
meistens sehr klein sind. Daher kann die Einbindung des Memory-Brokers 115 für kleine
Arbeitsbereiche vermieden werden.
-
Der
optimale Modus des Sort-Operators ist nämlich dem Sort-Operator der
MANUELLEN (zuvor beschriebenen) Version ähnlich. Tupel, die von der
darunterliegenden Tupelquelle abgerufen werden, werden dem Arbeitsbereich
des Sort-Operators hinzugefügt.
Die Größe des Arbeitsbereichs
wird auf langsame Weise erhöht.
Wenn an einem Punkt der Speicherplatzbedarf größer ist als der Schätzwert für den optimalen
Speicherplatz (z. B. die Eingabe größer als vorhergesagt) werden
einer oder mehr der drei Schätzwerte
aktualisiert. Solange die Speicherplatzgrenze 17 ausreichend
hoch ist, um eine Zuordnung des Schätzwerts für den optimalen Speicherplatz
für die
derzeitige Ausführung
zu ermöglichen,
fahrt der Sort-Operator
fort, seinen Arbeitsbereich auszuweiten, selbst wenn die Anforderung
größer ist
als ein ursprünglicher
Schätzwert
für den
optimalen Speicherplatz, der erstellt wurde, als das Sortieren gestartet
wurde.
-
Wenn
an einem Punkt die Speicherplatzgrenze 17 ausreichend herabgesetzt
worden ist, um einen Moduswechsel vom optimalen zum Einfach-Durchlaufmodus
zu veranlassen, bringt der Sort-Operator den derzeitigen und ersten
Sortierdurchgang auf die Festplatte. Dann schrumpft der Sort-Operator
den Arbeitsbereich auf den derzeitigen Schätzwert für den Einfach-Durchlaufspeicher.
An dem Punkt schaltet der Sort-Operator auf den Einfach-Durchlaufmodus um.
-
Im
Einfach-Durchlaufmodus vergrößert der
Sort-Operator dynamisch den Arbeitsbereich, um einen schlechten
Schätzwert
bei der Eingabegröße zu berücksichtigen.
Beispielsweise sei angenommen, dass die reale Eingabegröße 800 MB
anstatt einer erwarteten Größe von 100
MB (das Achtfache) ist. Wenn der Sort-Operator beginnt, seinen ersten
Satz an Sortierdurchläufen
zu erzeugen, bemisst er den Arbeitsbereich basierend auf der geschätzten Eingabegröße von 100
MB. Dies ergibt eine anfängliche
Arbeitsbereichsgröße von 2,5
MB bei einer IO-Größe von 64
KB. Nachdem 100 MB der Eingabe verbraucht worden sind, was 40 Durchläufen entspricht,
bemerkt der Sort-Operator, dass mehr Tupel sortiert werden müssen. An
dem Punkt setzt der Sort-Operator voraus, dass die geschätzte Eingabegröße das Zweifache
ist und nimmt einen neuen Schätzwert
von 200 MB anstatt von 100 MB an. Basierend auf diesem neuen Schätzwert wird
die Größe des Arbeitsbereichs
neu eingestellt, indem seine tatsächliche Größe mit dem Faktor sqrt(2) multipliziert
wird, weil der Speicherplatz, der für den Einfach-Durchlauf erforderlich
ist, wie die Quadratwurzel der Eingabegröße variiert. Die gleiche Technik
wird wieder und wieder angewandt, bis alle Tupel von der Eingabe
verbraucht sind.
-
In
dem Beispiel können
40 Durchläufe
2,5 MB jeweils für
die ersten 100 MB stattfinden, dann 29 Durchläufe à 3,5 MB jeweils für die nächsten 100
MB, dann 40 Durchläufe à 5 MB
jeweils für
die nächsten
200 MB, und schließlich
56 Durchläufe à 7 MB
jeweils für
die letzten 400 MB. Am Ende der ersten Phase des Sort-Operators
gibt es insgesamt 165 Durchläufe,
anstatt einer „idealen" Anzahl von 114 Durchläufen, die
erhalten worden wäre,
wenn von Anfang an bekannt gewesen wäre, dass die Eingabegröße 800 MB
betragen hat. Diese Durchläufe
werden im Einfach-Durchlaufbetrieb unter Verwendung eines Merge-Bereichs
von 10,3 MB (165 × 64
KB) zusammengeführt.
Dies ist etwas mehr Speicherplatz als die 8 MB (128 × 64 KB),
die für ein
Einfach-Durchlauf-Zusammenführen
der idealen Anzahl von Durchläufen,
die 128 ist, erforderlich ist.
-
Angenommen,
dass die geschätzte
Größe S
estim der Eingabe in den Sort-Operator um
höchstens
einen Faktor von 2
n im Vergleich zur realen
Eingabegröße S erhöht ist,
(das heißt
2
n-1 S < S
estim <=
2
nS) kann demonstriert werden, dass die
endgültige
Anzahl von Sortierdurchläufen
N
final sein wird:
wobei N die ideale Anzahl
von Durchläufen
für die
reale Größe S ist
(das heißt
N = sqrt(S/C)). Im zuvor genannten Beispiel ergab sich das Achtfache,
somit ist n gleich 3. Unter Verwendung der zuvor genannten Formel
kann ein Fachmann berechnen, dass der Sort-Operator das 1,45-fache der Anzahl Durchläufe eines
idealen Einfach-Durchlaufs erzeugen wird. Das heißt, dass
die Einfach-Durchlauf-Merge-Phase das 1,45-fache des idealen Einfach- Durchlaufspeichers
verbraucht. Wenn n gleich 1 ist (das Zweifache) ist dieser Faktor
1,2, und wenn n unendlich ist, geht dieser Faktor gegen 1/(2-sqrt(2)),
was 1,7 ist. Im schlechtesten Fall wird somit der zusätzliche
Speicherplatzverbrauch während
der Merge-Phase auf das 1,7-fache
der idealen Anforderung begrenzt (bei angenommener bekannter Eingabegröße). Wenn
der Speicherplatzverbrauch während
dem gesamten Sort-Operator berücksichtigt
wird, ist er außerdem
nur wenig kleiner, weil Durchläufe
unter Verwendung von weniger Speicherplatz als dem idealen Speicherplatz
erzeugt werden.
-
Ohne
diese Technik würde
das Ausführen
einer Einfach-Durchlauf-Zusammenführung 2n mehr
Speicherplatz erfordern als der Speicherplatz für eine Einfach-Durchlauf-Zusammenführung. In
Bezug auf den Speicherplatzverbrauch verhält es sich sogar schlechter
als dies, weil die Dauer des Merge-Durchlaufs proportional zu der
Anzahl Durchläufe
ist. Ohne die Größe des Arbeitsbereichs
dynamisch anzupassen, erzeugt der Sort-Operator viele Durchläufe (die
klein sind) und erhöht
somit die Dauer der Merge-Phase.
-
Zahlreiche
Modifikationen und Anpassungen der in diesem Dokument beschriebenen
Ausführungsformen
und Implementierungen sind einem Fachmann in Hinblick auf die Offenbarung
offensichtlich. Beispielsweise können
nach Beendigung der Ausführung
einer Abfrage Statistikwerte, die spezifisch für die Abfrage sind, zur Verwendung
bei der Erstellung eines Schätzwerts
gespeichert werden, wenn genau die gleiche Abfrage erneut ausgeführt werden
muss (beispielsweise durch einen anderen Prozess).
-
Wenn
alle aktiven Operatoren mit ihrem minimalen Speicherplatz laufen
könnten
und angenommen, mehr Speicherplatz wäre verfügbar, könnte der Memory-Broker außerdem diesen
Speicher zuerst Operatoren zuordnen, die am meisten von einer Speicherplatzerhöhung profitieren
würden.
Beispielsweise kann der Memory-Broker so programmiert sein, dass
er einem Hash-Join-Operator mehr Speicherplatz gibt, so dass seine Reaktionszeit
von 5 Minuten auf 1 Minute herabgesetzt wird (fünffache Geschwindigkeitserhöhung) anstatt
die gleiche Speicherplatzmenge einem anderen Hash-Join-Operator
zu geben, so dass seine Reaktionszeit von einer Stunde auf 30 Minuten
(nur zweifache Geschwindigkeitserhöhung) herabgesetzt wird. Daher
berücksichtigt
eine Ausführungsform
die Reaktionszeit-Geschwindigkeitserhöhung und
nicht wirklich die absolut verbesserte Zeit. Darüber hinaus kann, wie in diesem
Dokument beschrieben, eine Speicherplatzgrenze auch in Datenbanken verwendet
werden, die den gesamten Speicherplatz, der von Operatoren benötigt wird,
im gemeinsam genutzten Speicher (anstatt privaten Speicher) zuordnen.
-
Daher
sind solche zahlreichen Modifikationen und Anpassungen der Ausführungsformen
und Implementierungen, die in diesem Dokument beschrieben sind,
von den anhängigen
Ansprüchen
umfasst.
-
APPENDIX
-
Initialisierung
-
- workarea_left:= Arbeitsbereiche aller Operationen, die im
System aktiv sind number of workarea_left:= Anzahl Arbeitsbereiche,
die im System aktiv sind memory_target:= globales internes Ziel
oder Grenze, um zwischen den aktiven Arbeitsbereichen zu verteilen
Berechnung der Speicherplatzgrenze