Optimierung mithilfe einer XML-Eingabedatei
Alle Optimierungsvorgänge, die in der grafischen Benutzeroberfläche (GUI) des Database Engine (Datenbankmodul)-Optimierungsratgebers und mit dem Befehlszeilen-Dienstprogramm dta zur Verfügung stehen, können in der XML-Eingabedatei des Database Engine (Datenbankmodul)-Optimierungsratgebers definiert werden. Die XML-Eingabedatei unterstützt allerdings nur zusätzliche Optimierungsoptionen zu den Optionen die in der GUI und im Befehlszeilen-Dienstprogramm verfügbar sind.
Die XML-Eingabedatei beruht auf dem veröffentlichten XML-Schema des Database Engine (Datenbankmodul)-Optimierungsratgebers, das sich am folgenden Speicherort im Installationsverzeichnis von SQL Server 2008 befindet:
C:\Programme\Microsoft SQL Server\10\Tools\Binn\schemas\sqlserver\2004\07\dta\dtaschema.xsd
Des Weiteren ist der Download unter der folgenden URL möglich:
https://schemas.microsoft.com/sqlserver/2004/07/dta
Mit der XML-Eingabedatei können Sie die Datenbanken mithilfe Ihrer am häufigsten genutzten XML-Tools optimieren, und erfahrene Datenbankadministratoren erhalten eine größere Flexibilität. Mit der XML-Eingabedatei können Sie beispielsweise eine Konfiguration angeben, in der vorhandene und hypothetische Strukturen für den physischen Entwurf kombiniert enthalten sind (Indizes, indizierte Sichten, Partitionen). Anschließend können Sie die Datenbank mithilfe des Befehlszeilen-Dienstprogramms dta so optimieren, als wäre diese Kombination aus vorhandenen und hypothetischen Strukturen für den physischen Entwurf bereits implementiert. Auf diese Weise wird eine "Was-wäre-wenn"-Analyse möglich, ohne dass der Arbeitsaufwand bei einer Konfiguration tatsächlich anfiele, und das noch vor der eigentlichen Optimierung.
In den nachstehenden Unterabschnitten werden die Optimierungsvorgänge vorgestellt, die Sie ausschließlich mithilfe der XML-Eingabedatei des Database Engine (Datenbankmodul)-Optimierungsratgebers ausführen können. Weitere Informationen zu dieser Datei und zu ihrer Verwendung finden Sie unter XML-Eingabedateireferenz (Datenbankoptimierungsratgeber).
Angeben von Konfigurationen mit dem Konfigurationselement
Das Feature für vom Benutzer angegebene Konfigurationen steht in eingeschränkter Form auch in der GUI des Database Engine (Datenbankmodul)-Optimierungsratgebers zur Verfügung, wird jedoch erst dann vollständig unterstützt, wenn Sie die XML-Eingabedatei gemeinsam mit dem Befehlszeilen-Dienstprogramm dta nutzen. Bei Verwendung der XML-Eingabedatei können Sie eine komplett hypothetische Konfiguration angeben oder auch eine Konfiguration, bei denen vorhandene und hypothetische Strukturen für den physischen Entwurf kombiniert enthalten sind. Sobald Sie die Eingabedatei mithilfe des XML-Schemas des Database Engine (Datenbankmodul)-Optimierungsratgebers überprüft haben, können Sie die Datei als Eingabe für das Befehlszeilen-Dienstprogramm dta heranziehen. Während der Optimierungssitzung führt der Database Engine (Datenbankmodul)-Optimierungsratgeber die angegebene Arbeitsbelastung für die Datenbanken aus. Der Database Engine (Datenbankmodul)-Optimierungsratgeber wertet jedoch nicht die vorhandene Konfiguration der Indizes, indizierten Sichten und Partitionen aus. Stattdessen verwendet der Database Engine (Datenbankmodul)-Optimierungsratgeber Ihre angegebene Konfiguration, also die Kombination aus hypothetischen und vorhandenen Strukturen. Mithilfe der hypothetischen Konfiguration können Sie die Auswirkungen einer bestimmten Konfiguration auf die Leistung Ihrer Datenbank analysieren, ohne dass der Arbeitsaufwand für die tatsächliche Implementierung dieser Konfiguration anfiele.
Soll eine Konfiguration angegeben werden, die sowohl vorhandene als auch aus hypothetischen Strukturen für den physischen Entwurf enthält, fügen Sie das untergeordnete Configuration-Element nach dem TuningOptions-Element in die XML-Eingabedatei des Database Engine (Datenbankmodul)-Optimierungsratgebers ein. Weitere Informationen finden Sie unter Vorgehensweise: Ausführen von explorativen Analysen und Beispiel für eine XML-Eingabedatei mit benutzerdefinierter Konfiguration (DTA).
Optimierung der Inline-Arbeitsauslastung mit dem EventString-Element
Wenn Sie eine XML-Eingabedatei für den Database Engine (Datenbankmodul)-Optimierungsratgeber verwenden, ist es möglich, völlig auf eine Arbeitsauslastungsdatei zu verzichten. Stattdessen können Sie eine Arbeitsauslastung und die zugehörige Gewichtung inline in der XML-Eingabedatei angeben. Der Verzicht auf eine separate Arbeitsauslastungsdatei oder -tabelle bietet die folgenden Vorteile:
Sie können Remoteserver einfacher optimieren, weil Sie nicht berücksichtigen müssen, ob die separate Datei oder Tabelle zur Optimierung für den Database Engine (Datenbankmodul)-Optimierungsratgeber verfügbar ist.
Sie können die Funktionalität des Database Engine (Datenbankmodul)-Optimierungsratgebers leichter in Skripts einbinden, die in der gesamten Unternehmensumgebung portabel sind.
Soll eine Inline-Arbeitsauslastung angegeben werden, fügen Sie das untergeordnete EventString-Element ein, für das Sie optional eine zugehörige Gewichtung angeben können. Dieses untergeordnete Element wird für das übergeordnete Workload-Element angegeben; Sie geben also keine separate Arbeitsauslastungsdatei oder -tabelle an. Die folgenden Codebeispiele zeigen die Verwendung des EventString-Elements für die XML-Eingabedatei im Vergleich zum Verwenden einer normalen Arbeitsauslastungsdatei für die XML-Eingabedatei:
Beispiele
A. Angeben einer separaten Arbeitsauslastungsdatei für das Arbeitsauslastungselement
<DTAInput>
...code removed
<Workload>
<File>MyWorkload.sql</File>
</Workload>
...code removed
</DTAInput>
B. Angeben einer Inline-Arbeitsauslastung mit dem EventString-Element
<DTAInput>
...code removed
<Workload>
<EventString Weight="100">
SELECT * FROM MyTable1
WHERE MyColumn1 > 200
ORDER BY MyColumn1
</EventString>
<EventString Weight="1">
SELECT * FROM MyTable2
WHERE MyColumn2 > 200
ORDER BY MyColumn2
</EventString>
</Workload>
...code removed
</DTAInput>
Im vorherigen Beispiel werden im EventString-Element für die einzelnen Abfragen unterschiedliche Gewichtungen festgelegt: eine Gewichtung von 100 und eine Gewichtung von 1. Wenn diese Abfragen im Database Engine (Datenbankmodul)-Optimierungsratgeber optimiert werden, bedeutet dies, dass die Anwendung mit einer Gewichtung von 100 so behandelt wird, als wären 100 Instanzen dieser Abfrage vorhanden, im Vergleich zu nur einer Instanz der Abfrage mit einer Gewichtung von 1. Im obigen Beispiel ist die erste Abfrage einhundertmal bedeutsamer für die Auswertung durch den Database Engine (Datenbankmodul)-Optimierungsratgeber als die zweite Abfrage. Beachten Sie außerdem, dass das Größer-als-Zeichen (>) in > umgewandelt wurde, weil > ein reserviertes Zeichen mit einer besonderen Bedeutung in XML ist.
Ein Beispiel für das Angeben einer Inline-Arbeitsauslastung mit dem EventString-Element finden Sie unter Beispiel für eine XML-Eingabedatei mit Inlinearbeitsauslastung (DTA).
Ignorieren von Konstanten in einer Arbeitsauslastung mit dem IgnoreConstantsInWorkload-Element
Arbeitsauslastungen können Anweisungen enthalten, die auf Konstanten verweisen. Im Database Engine (Datenbankmodul)-Optimierungsratgeber können in einer Arbeitsauslastung Konstanten zum Erstellen von Empfehlungen verwendet werden, die indizierte Sichten mit Auswahlbedingungen bzw. für partitionierte Indizes einen Bereich für Partitionsfunktionen enthalten.
In einigen Fällen ist jedoch das Berücksichtigen von Konstanten in einer Arbeitsauslastung im Database Engine (Datenbankmodul)-Optimierungsratgeber nicht von Vorteil. Betrachten Sie hierzu eine Arbeitsauslastung mit der folgenden Anweisung:
UPDATE BankAccountTable
SET AccountBalance = AccountBalance - 1000.00
WHERE CustomerID =
(SELECT CustomerID FROM Customer WHERE CustomerName = 'Alice')
Diese Arbeitsauslastung kann die Konstante 'Alice' beinhalten, da die Arbeitsauslastung erfasst wurde, als Alice eine Transaktion ausgeführt hat. Wenn der Database Engine (Datenbankmodul)-Optimierungsratgeber diese Konstante verwendet, kann es sein, dass keine effektive Optimierungsempfehlung erzeugt wird. In diesem Fall kann es sinnvoll sein, für den Database Engine (Datenbankmodul)-Optimierungsratgeber das Ignorieren von Konstanten anzugeben, wenn Sie diese Arbeitsauslastung zum Optimieren einer Datenbank verwenden.
Das IgnoreConstantsInWorkload-Element, welches sich unter dem TuningOptions-Element befindet, kann in der XML-Eingabedatei angegeben werden, um das Ignorieren aller Konstanten in einer Arbeitsauslastung im Database Engine (Datenbankmodul)-Optimierungsratgeber zu erzwingen. Wenn dieses Element angegeben ist, sind in den indizierten Sichten, die der Database Engine (Datenbankmodul)-Optimierungsratgeber möglicherweise empfiehlt, keine Auswahlbedingungen enthalten. Des Weiteren werden nur die in Partitionsfunktionen verwendeten Konstanten von Daten abgeleitet, und nicht die in der Arbeitsauslastung enthaltenen Konstanten.
Optimieren einer Arbeitsauslastung für einen Produktionsserver mithilfe eines Testservers
Die Optimierung einer umfangreichen Arbeitsauslastung kann zu einem deutlichen Mehraufwand auf dem zu optimierenden Server führen, weil der Database Engine (Datenbankmodul)-Optimierungsratgeber während der Optimierung unzählige Aufrufe an den Abfrageoptimierer sendet. Zur Vermeidung dieses Problems verwenden Sie einen Testserver zusätzlich zu Ihrem eigentlichen Produktionsserver. Der Database Engine (Datenbankmodul)-Optimierungsratgeber unterstützt dieses Szenario auf einzigartige Weise:
Stellen Sie sicher, dass der Benutzer, der die Optimierung vornimmt, sowohl auf dem Produktionsserver als auch auf dem Testserver vorhanden ist. Wenn Sie ein Mitglied der festen Serverrolle sysadmin sind, entfällt dieser Schritt.
Geben Sie einen Testserver für die Optimierung in der XML-Eingabedatei an, außerdem die verbleibenden Parameter, mit denen die Optimierungssitzung definiert wird.
Starten Sie die Optimierungssitzung mit dem Befehlszeilen-Dienstprogramm dta, und beginnen Sie damit auch die Analyse der Arbeitsauslastung.
Während dieser Optimierungssitzung auf dem Testserver führt der Database Engine (Datenbankmodul)-Optimierungsratgeber nur äußerst wenige Aufrufe an den Produktionsserver durch, um Informationen zum Hardwareprofil, zu den Datenbankmetadaten und zu den Statistiken abzurufen, die die präzise Optimierung der Abfragen auf dem Testserver im Abfrageoptimierer erleichtern.
In diesem Szenario optimieren Sie im Endeffekt den Testserver, sodass Ihre Produktionsserverumgebung dupliziert wird. Sobald Sie eine Empfehlung für die Konfiguration des Datenbankentwurfs als Ergebnis der Optimierung des Testservers erhalten, können Sie diese empfohlene Konfiguration im Rahmen der normalen Wartungsarbeiten implementieren. Bei dieser Vorgehensweise sind die Auswirkungen auf die Leistung, die durch den Database Engine (Datenbankmodul)-Optimierungsratgeber entstehen, auf ein Minimum reduziert. Des Weiteren sparen Sie hierbei nicht nur den Zeitaufwand für das Kopieren der Daten vom Produktionsserver auf den Testserver, sondern auch die Ausgaben für die Duplizierung der leistungsfähigen Produktionsserverhardware in die Testumgebung.
Zum Angeben eines Testservers verwenden Sie das untergeordnete TestServer-Element unter dem übergeordneten TuningOptions-Element, wie im folgenden Beispiel dargestellt:
Beispiel
<DTAInput>
...code removed
<TuningOptions>
<TestServer>MyTestServer</TestServer>
<FeatureSet>IDX_IV</FeatureSet>
<Partitioning>NONE</Partitioning>
<KeepExisting>NONE</KeepExisting>
</TuningOptions>
...code removed
</DTAInput>
Weitere Informationen zum Verwenden dieses Features sowie ein weiteres Codebeispiel finden Sie unter Reduzieren der Optimierungsauslastung des Produktionsservers.