Unterschiede zwischen dem Datenbankoptimierungsratgeber und dem Indexoptimierungs-Assistenten

Um die neuen Datenbankfunktionen von SQL Server zu verarbeiten, weist der Datenbankoptimierungsratgeber ein anderes Verhalten als der Indexoptimierungs-Assistent von Microsoft SQL Server 2000 auf. Obwohl beide Tools eine grafische Benutzeroberfläche (GUI, Graphical User Interface) und eine Eingabeaufforderungs-Schnittstelle haben, sollten auch Benutzer, die mit dem Indexoptimierungs-Assistenten vertraut sind, die folgenden Änderungen beachten.

Eine vollständige Liste der neuen Funktionen im Datenbankoptimierungsratgeber finden Sie unter Datenbankoptimierungsratgeber (Features).

Zum Optimieren von Datenbanken erforderliche Berechtigungen

In SQL Server 2000 konnten nur Mitglieder der festen Serverrolle sysadmin Datenbanken mit dem Indexoptimierungs-Assistenten optimieren. In SQL Server können Mitglieder der Rolle sysadmin mithilfe des Datenbankoptimierungsratgebers weiterhin Datenbanken optimieren. Zusätzlich können jetzt auch Benutzer, die Mitglieder der festen Datenbankrolle db_owner sind, die Datenbanken in ihrem Besitz optimieren.

HinweisHinweis

Bei der ersten Verwendung muss der Datenbankoptimierungsratgeber von einem Benutzer gestartet werden, der über Systemadministratorberechtigungen verfügt, um die Anwendung zu initialisieren. Nach der Initialisierung können sowohl Mitglieder der festen Serverrolle sysadmin als auch Mitglieder der festen Datenbankrolle db_owner Datenbanken mit dem Datenbankoptimierungsratgeber optimieren. Beachten Sie dabei jedoch, dass Mitglieder der db_owner-Rolle nur die Datenbanken optimieren können, die sie besitzen. Weitere Informationen finden Sie unter Initialisieren des Datenbankoptimierungsratgebers.

Arbeitsauslastungskontext

Der Indexoptimierungs-Assistent wertete die einzelnen Anweisungen in der Arbeitsauslastung anhand der zur Optimierung ausgewählten Datenbank aus, ungeachtet dessen, ob die Anweisung ursprünglich im Kontext dieser Datenbank ausgeführt wurde. Der Indexoptimierungs-Assistent konnte während einer Optimierungssitzung nur eine Datenbank optimieren. Der Datenbankoptimierungsratgeber in kann während einer Optimierungssitzung mehrere Datenbanken optimieren. Der Datenbankoptimierungsratgeber bestimmt anhand der Informationen aus dem Skript die Datenbank, in der die Anweisung ausgeführt wird, und wertet die Anweisung für diese Datenbank aus. Die zum Optimieren ausgewählten Datenbanken haben keinen Einfluss auf die Art der Auswertung der Anweisungen.

Beispiel:

  • Die AdventureWorks2008R2-Datenbank enthält eine Person.Person-Tabelle mit den Spalten FirstName und LastName.

  • Die Arbeitsauslastung TuneQuery.sql enthält die folgende Abfrage:

    SELECT FirstName, LastName
    FROM Person.Person
    WHERE LastName = 'Abercrombie';
    GO
    
  • Standardmäßig wird für User1 eine Verbindung zur MyDB-Datenbank hergestellt.

In SQL Server 2000 hat User1 Folgendes an der Befehlszeile ausgegeben bzw. ähnliche Schritte mithilfe der GUI des Indexoptimierungs-Assistenten ausgeführt:

Itwiz -D AdventureWorks2008R2 -I TuneQuery.sql –o rec.sql –U <username> –P <password>

Diese Methode hat funktioniert, da jede Anweisung in TuneQuery.sql für die AdventureWorks2008R2-Datenbank analysiert wurde, da sie in der Befehlszeile (-D AventureWorks2008R2) angegeben war. TuneQuery.sql war in der AdventureWorks2008R2-Datenbank gültig, und die Datenbank wurde ohne Probleme optimiert.

Wird der Datenbankoptimierungsratgeber verwendet, lautet die Befehlszeilensyntax folgendermaßen:

dta -s Session1 –D AdventureWorks2008R2 –if TuneQuery.sql –of rec.sql –U username –P password

Da für User1 standardmäßig eine Verbindung zur MyDB-Datenbank hergestellt wird, wird der Datenbankkontext vom System auf MyDB festgelegt. Als Nächstes wird die Transact-SQL-Anweisung für die MyDB-Datenbank statt für AdventureWorks2008R2 analysiert. Die Anweisung ist in MyDB ungültig und wird daher ignoriert.

Begründung für dieses Verhalten: Wenn TuneQuery.sql von User1 mithilfe von sqlcmd oder SQL Server Management Studio ausgeführt wird, ohne eine Zieldatenbank anzugeben, wird TuneQuery.sql für MyDB ausgeführt und erzeugt einen Fehler. Der Datenbankoptimierungsratgeber imitiert dieses Verhalten.

Abhilfemaßnahmen: Fügen Sie dem Skript TuneQuery.sql wie folgt eine USE <database>-Anweisung hinzu:

USE AdventureWorks2008R2;
GO
SELECT FirstName, LastName
FROM Person.Person
WHERE LastName = 'Abercrombie';
GO

Der Datenbankoptimierungsratgeber erkennt zuerst die USE AdventureWorks2008R2-Anweisung und legt AdventureWorks2008R2 anhand dieser Informationen als aktuelle Datenbank fest. Anschließend, wenn er die SELECT FirstName, LastName FROM Person.Person WHERE LastName = 'Abercrombie'-Anweisung liest, wird diese für AdventureWorks2008R2 analysiert, da der aktuelle Datenbankkontext AdventureWorks2008R2 lautet. Dadurch kann der Datenbankoptimierungsratgeber die Datenbank erfolgreich optimieren. Wenn Sie das oben beschriebene Skript mithilfe von sqlcmd oder SQL Server Management Studio ausführen, wird die Anweisung für AdventureWorks2008R2 ausgeführt, da der Datenbankkontext durch die erste USE <database>-Anweisung von MyDB in AdventureWorks2008R2 geändert wird.

Mit den USE <database>-Anweisungen lässt sich die Datenbank angeben, für die die Anweisung ausgeführt werden soll. Im Allgemeinen ist dies nicht erforderlich, wenn jede Anweisung vollqualifizierte Tabellennamen verwenden.

Da der Datenbankoptimierungsratgeber die jeweiligen Datenbanken sucht, für die die einzelnen Anweisungen ausgeführt werden (Imitieren der Ausführungsumgebung), sind die folgenden Informationen äußerst wichtig, um zu verstehen, wie der Datenbankoptimierungsratgeber mit verschiedenen Eingabetypen umgeht.

SQL-Datei- oder Inlinearbeitsauslastung

Wie im vorherigen Abschnitt beschrieben, verwendet der Datenbankoptimierungsratgeber USE <database>-Anweisungen, die einer Transact-SQL-Abfrage vorgestellt sind, um die Datenbank zu identifizieren, für die die Abfrage ausgeführt werden soll. Der Datenbankoptimierungsratgeber überprüft die Eingabe ab der ersten Anweisung in der Transact-SQL-Skriptdatei. Er startet mit der Annahme, dass die aktuelle Datenbank die Standarddatenbank ist. Wenn USE <database>-Anweisungen vorhanden sind, wird der aktuelle Datenbankkontext geändert, für den die Anweisungen analysiert werden.

Ablaufverfolgungsdateien und Ablaufverfolgungstabellen

Der Datenbankoptimierungsratgeber imitiert beim Durchlaufen der Ablaufverfolgungsdatei die Wiedergabe von SQL Server Profiler. Dabei verwendet er die folgenden Informationen aus Ablaufverfolgungsdateien in der aufgeführten Reihenfolge:

  • Wenn es in der Ablaufverfolgungsdatei Ereignisse mit aufgefüllter DatabaseName-Spalte gibt, sucht der Datenbankoptimierungsratgeber damit die Datenbank, für die dieses Ereignis ausgeführt wurde.

  • Wenn die DatabaseID-Spalte in der Ablaufverfolgungsdatei aufgefüllt ist, sucht der Datenbankoptimierungsratgeber damit die Datenbank, für die dieses Ereignis ausgeführt wurde. Der Ratgeber fragt den Systemkatalog ab, um den Datenbanknamen zu suchen, der DatabaseID entspricht.

HinweisHinweis

Wenn eine Datenbank getrennt, angefügt, gelöscht oder erstellt wurde, nachdem eine Ablaufverfolgung gesammelt wurde, weichen die DatabaseID- und DatabaseName-Zuordnungen möglicherweise von denen beim Erstellen der Ablaufverfolgung ab. Der Datenbankoptimierungsratgeber kann diese Informationen nicht bestimmen. Wenn dies auftritt, müssen Sie DatabaseID vollständig aus der Ablaufverfolgung entfernen, um zu verhindern, dass der Datenbankoptimierungsratgeber eine fehlerhafte Datenbank optimiert.

  • Wenn in der Ablaufverfolgung weder DatabaseName noch DatabaseID als Spalte vorhanden ist, entscheidet der Datenbankoptimierungsratgeber wie bei Transact-SQL-Skripts für die einzelnen SPID-Spalten in der Ablaufverfolgungsdatei, welche Datenbank für die einzelnen Anweisungen verwendet werden soll. Wenn keine SPID-Spalte vorhanden ist, wird diese Entscheidung genau wie für Transact-SQL-Skriptdateien getroffen.

Der Datenbankoptimierungsratgeber verwendet beim Analysieren der einzelnen Anweisungen außerdem die Anmeldeinformationen (wie bei der Wiedergabe von SQL Server Profiler). Standarddatenbanken auf dem Server können sich aufgrund der LoginName-Spaltenwerte in der Ablaufverfolgungsdatei ändern.

HinweisHinweis

Wenn eine in der Ablaufverfolgung vorhandene Anmeldung nicht länger im System auftritt, wird sie vom Datenbankoptimierungsratgeber ignoriert. Der Datenbankoptimierungsratgeber verwendet dann die Anmeldung als Standard, die zurzeit den Optimierungsprozess ausführt. Hierbei wird eine Meldung in das Optimierungsprotokoll des Datenbankoptimierungsratgebers geschrieben.

Optimieren von Zeitgrenzen

Sie können mithilfe des Datenbankoptimierungsratgebers eine bestimmte oder unbegrenzte Optimierungszeit angeben. Im Indexoptimierungs-Assistent war diese Funktion nicht verfügbar. Weitere Informationen finden Sie unter Beschränken von Optimierungsdauer und -ereignissen.