Unterschiede zwischen dem Datenbankoptimierungsratgeber und dem Indexoptimierungs-Assistenten

Um die neuen Datenbankfeatures von MicrosoftSQL Server zu verarbeiten, weist der Datenbankoptimierungsratgeber ein anderes Verhalten als der Indexoptimierungs-Assistent von MicrosoftSQL 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 Features im Datenbankoptimierungsratgeber finden Sie unter Datenbankoptimierungsratgeber (Features).

Zum Optimieren von Datenbanken erforderliche Berechtigungen

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

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:

  • In der AdventureWorks-Datenbank gibt es eine Person.Contact-Tabelle mit den Spalten FirstName und LastName.

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

    SELECT FirstName, LastName
    FROM Person.Contact
    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 AdventureWorks -I TuneQuery.sql –o rec.sql –U <username> –P <password>

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

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

dta -s Session1 –D AdventureWorks –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 analysiert statt für AdventureWorks. Die Anweisung ist in MyDB ungültig und wird daher ignoriert.

Begründung für dieses Verhalten: Wenn User1TuneQuery.sql mithilfe von sqlcmd oder SQL Server Management Studio ausführt, 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 TuneQuery.sql-Skript folgendermaßen eine USE <database>-Anweisung hinzu:

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

Der Datenbankoptimierungsratgeber erkennt zuerst die USE AdventureWorks-Anweisung und legt AdventureWorks anhand dieser Informationen als aktuelle Datenbank fest. Anschließend, wenn er die SELECT FirstName, LastName FROM Person.Contact WHERE LastName = 'Abercrombie'-Anweisung liest, wird diese für AdventureWorks analysiert, da der aktuelle Datenbankkontext AdventureWorks 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 AdventureWorks ausgeführt, da der Datenbankkontext durch die erste USE <database>-Anweisung von MyDB in AdventureWorks 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 dieses Feature nicht verfügbar. Weitere Informationen finden Sie unter Beschränken von Optimierungsdauer und -ereignissen.