Gründe, aus denen Ereignisse nicht optimiert sind

In diesem Thema werden die häufig auftretenden Gründe aufgeführt, aus denen Ereignisse nicht optimiert sind, und Sie erfahren, wie der Datenbankoptimierungsratgeber die richtige Datenbank auswählt, für die die Optimierungsereignisse ausgeführt werden sollen.

Häufige Gründe, aus denen Ereignisse nicht optimiert sind

Wenn die Datenbank, für die das Ereignis ursprünglich ausgeführt wurde, richtig angegeben wurde (siehe nachfolgenden Abschnitt), werden die Ereignisse in den folgenden Fällen nicht optimiert:

  • Die Ereignisse verweisen auf Tabellen, die nicht für die Optimierung ausgewählt wurden.

  • Die Ereignisse verweisen auf sehr kleine Tabellen mit weniger als zehn Seiten.

HinweisHinweis

Die Anzahl der Seiten in einer Tabelle für MicrosoftSQL Server 2000 befindet sich in der dpages-Spalte der sysindexes-Systemtabelle. Die Anzahl der Seiten in einer Tabelle für MicrosoftSQL Server 2005 und höher befindet sich in der used_page_count-Spalte der sys.dm_db_partition_stats-Katalogsicht.

  • Die Zeit des Datenbankoptimierungsratgebers reicht nicht aus, um die Anfrage innerhalb der vom Benutzer vorgegebenen Zeit zu optimieren.

  • Die Ereignisse verweisen auf Tabellen, die bereits nahezu die Höchstzahl an Indizes erreicht haben, und die Option zum Beibehalten der vorhandenen Indizes ist aktiviert. In diesem Fall können keine weiteren Indizes für diese Tabellen angelegt werden.

  • Zahlreiche Anweisungen (INSERT, UPDATE und DELETE) der Datenbearbeitungssprache (DML, Data Manipulation Language) werden für die zugrunde liegende Tabelle für das Ereignis ausgeführt. Das Hinzufügen weiterer Indizes oder indizierter Sichten kann sich negativ auf die Leistung dieser zugrunde liegenden Tabellen auswirken.

  • Die folgenden Optimierungsoptionen wurden angegeben:

    • Die maximale Anzahl der Spalten ist beschränkt.

    • Der angegebene Speicherplatz reicht nicht für die Speicherung aus, oder es sind bereits zahlreiche Indizes und indizierte Sichten in der Datenbank vorhanden, und der angegebene Speicherplatz reicht nicht für die Optimierung aus.

      HinweisHinweis

      Sie können einen Höchstwert für den Speicherplatz für Optimierungsempfehlungen angeben, und zwar im Dialogfeld Erweiterte Optimierungsoptionen in der grafischen Benutzeroberfläche (GUI) des Datenbankoptimierungsratgebers oder durch Angabe eines Werts für das Argument -B im Befehlszeilen-Dienstprogramm dta.

Vorgehensweise, mit der der Datenbankoptimierungsratgeber die richtige Datenbank für Optimierungsereignisse festlegt

Je nach der verwendeten Optimierungs-Arbeitsauslastungsdatei und den Optionen, die Sie beim Optimieren der Arbeitsauslastung angeben, wählt der Datenbankoptimierungsratgeber wie folgt die richtige Datenbank aus, für die die Optimierungsereignisse ausgeführt werden sollen:

Für SQL-Skript-(.sql)-Optimierungs-Arbeitsauslastungsdateien

  • Wenn Sie den Namen einer Datenbank mit einem der folgenden Verfahren angeben:

    • Argument -d für das Befehlszeilen-Dienstprogramm dta

    • Element DatabaseToConnect in der XML-Eingabedatei

    Diese Optionen bestimmen die Standard-Datenbank, mit der der Datenbankoptimierungsratgeber eine Verbindung herstellt, sobald eine Optimierungssitzung gestartet wird. Nach dem Herstellen dieser ersten Datenbankverbindung ändert der Datenbankoptimierungsratgeber den Datenbankkontext für nachfolgende Anweisungen mithilfe der USE database_name-Anweisung im Skript.

  • Falls Sie die anfängliche Datenbankverbindung für eine Optimierungssitzung nicht explizit angeben, verwendet der Datenbankoptimierungsratgeber die Standard-Datenbank, die für den Anmeldenamen angegeben ist, mit dem Sie sich auf dem Server anmelden, auf dem die Optimierung erfolgen soll. Nach dem Herstellen dieser ersten Datenbankverbindung ändert der Datenbankoptimierungsratgeber den Datenbankkontext für nachfolgende Anweisungen auf dieselbe Weise wie in dem Fall, wenn Sie die anfängliche Verbindung explizit angegeben hatten. Der Datenbankoptimierungsratgeber ermittelt den Datenbankkontext mithilfe der USE database_name-Anweisungen.

Für Ablaufverfolgungs-(.trc)-Optimierungs-Arbeitsauslastungsdateien

Wenn Sie Ablaufverfolgungsdateien verwenden, wählt der Datenbankoptimierungsratgeber die Datenbank, für die die Ereignisse ausgeführt werden sollen, für jede in der Ablaufverfolgung angegebene Serverprozess-ID (SPID) aus. Ist keine SPID in der Ablaufverfolgung angegeben, verwendet der Datenbankoptimierungsratgeber dieselbe SPID für alle Ereignisse, die in dieser Ablaufverfolgung enthalten sind. Der Datenbankoptimierungsratgeber wählt die Datenbank für jede SPID wie folgt aus:

  1. DatabaseName ist in der Ablaufverfolgung vorhanden.

    Ist das Feld DatabaseName in der Ablaufverfolgungsdatei vorhanden, ermittelt der Datenbankoptimierungsratgeber mithilfe dieses Felds die Datenbank, für die das Ereignis analysiert werden soll. Alle anderen Informationen werden ignoriert. Fehlt das Feld DatabaseName, geht der Datenbankoptimierungsratgeber zu Schritt 2 über.

  2. DatabaseID ist in der Ablaufverfolgung vorhanden, aber DatabaseName nicht..

Ist das Feld DatabaseID in der Ablaufverfolgungsdatei vorhanden, ermittelt der Datenbankoptimierungsratgeber mithilfe dieses Felds die Datenbank, für die das Ereignis analysiert werden soll. Das Feld DatabaseID wird dem Datenbanknamen zugeordnet. Der Datenbankoptimierungsratgeber überprüft allerdings nicht, ob sich die DatabaseID-Felder seit dem Zusammenstellen der Ablaufverfolgung geändert haben. Falls Sie nicht sicher sind, ob die Zuordnung der Felder DatabaseID und DatabaseName auf dem neuesten Stand ist, entfernen Sie das Feld DatabaseID aus der Ablaufverfolgungs-Arbeitsauslastungsdatei. Alle anderen Informationen werden ignoriert. Ist weder das Feld DatabaseName noch das Feld DatabaseID vorhanden, geht der Datenbankoptimierungsratgeber zu Schritt 3 über.

  1. Weder DatabaseName noch DatabaseIDist in der Ablaufverfolgung vorhanden.

    Wenn sowohl das Feld DatabaseName als auch das Feld DatabaseID in der Ablaufverfolgung fehlt, ermittelt der Datenbankoptimierungsratgeber die Datenbank, für die das Ereignis ausgeführt werden soll, auf dieselbe Weise wie bei SQL-Skript-Optimierungs-Arbeitsauslastungsdateien. Dieser Vorgang ist im vorangegangenen Abschnitt zu den SQL-Skript-(.sql)-Optimierungs-Arbeitsauslastungsdateien beschrieben.