Freigeben über


Reduzieren der Optimierungslast des Produktionsservers

Der Database Engine Tuning Advisor verwendet den Abfrageoptimierer, um eine Arbeitslast zu analysieren und Optimierungsempfehlungen zu geben. Durch das Ausführen dieser Analyse auf dem Produktionsserver wird zur Serverlast hinzugefügt und kann die Serverleistung während der Optimierungssitzung beeinträchtigen. Sie können die Auswirkungen auf die Serverlast während einer Optimierungssitzung reduzieren, indem Sie zusätzlich zum Produktionsserver einen Testserver verwenden.

Wie der Datenbank-Engine-Tuning-Advisor einen Testserver verwendet

Die herkömmliche Möglichkeit zum Verwenden eines Testservers besteht darin, alle Daten von Ihrem Produktionsserver auf Ihren Testserver zu kopieren, den Testserver zu optimieren und dann die Empfehlung auf Ihrem Produktionsserver zu implementieren. Dieser Prozess beseitigt die Leistungseinbußen auf Ihren Produktionsserver, ist jedoch nicht die optimale Lösung. Beispielsweise kann das Kopieren großer Datenmengen aus der Produktion auf den Testserver erhebliche Zeit- und Ressourcenmengen beanspruchen. Darüber hinaus ist Testserverhardware selten so leistungsfähig wie die Hardware, die für Produktionsserver bereitgestellt wird. Der Optimierungsprozess basiert auf dem Abfrageoptimierer, und die generierten Empfehlungen basieren teilweise auf der zugrunde liegenden Hardware. Wenn die Hardware des Test- und Produktionsservers nicht identisch ist, wird die Empfehlungsqualität des Datenbankmoduloptimierungsratgebers verringert.

Um diese Probleme zu vermeiden, optimiert der Datenbank-Engine-Tuning-Advisor eine Datenbank auf einem Produktionsserver, indem er den Großteil der Optimierungslast auf einen Testserver übertragen wird. Dazu werden die Hardwarekonfigurationsinformationen des Produktionsservers verwendet, ohne die Daten tatsächlich vom Produktionsserver auf den Testserver zu kopieren. Der Datenbankmoduloptimierungsratgeber kopiert keine tatsächlichen Daten vom Produktionsserver auf den Testserver. Es kopiert nur die Metadaten und die erforderlichen Statistiken.

Die folgenden Schritte beschreiben den Prozess zum Optimieren einer Produktionsdatenbank auf einem Testserver:

  1. Stellen Sie sicher, dass der Benutzer, der den Testserver verwenden möchte, auf beiden Servern vorhanden ist.

    Bevor Sie beginnen, stellen Sie sicher, dass der Benutzer, der den Testserver zum Optimieren einer Datenbank auf dem Produktionsserver verwenden möchte, auf beiden Servern vorhanden ist. Dazu müssen Sie den Benutzer und seine Anmeldung auf dem Testserver erstellen. Wenn Sie Mitglied der Sysadmin-Serverrolle mit fester Serverfunktion auf beiden Computern sind, ist dieser Schritt nicht erforderlich.

  2. Optimieren Sie die Aufgabenlast auf dem Testserver.

    Um eine Workload auf einem Testserver zu optimieren, müssen Sie eine XML-Eingabedatei mit dem Befehlszeilenprogramm dta verwenden. Geben Sie in der XML-Eingabedatei zusätzlich zu den Werten für die anderen Unterelemente unter dem übergeordneten Element TuningOptions den Namen des TestServer-Unterelements mit dem TestServer-Unterelement an.

    Während des Optimierungsprozesses erstellt der Datenbankmoduloptimierungsratgeber eine Shelldatenbank auf dem Testserver. Um diese Shelldatenbank zu erstellen und zu optimieren, führt der Datenbankmoduloptimierungsratgeber Aufrufe an den Produktionsserver für Folgendes aus:

    1. Der Datenbankmoduloptimierungsratgeber importiert Metadaten aus der Produktionsdatenbank in die Shelldatenbank des Testservers. Diese Metadaten umfassen leere Tabellen, Indizes, Ansichten, gespeicherte Prozeduren, Trigger usw. Dies ermöglicht es, die Workload-Abfragen gegen die Testserver-Shell-Datenbank auszuführen.

    2. Der Datenbank-Engine-Tuning-Assistent importiert Statistiken vom Produktionsserver, damit der Abfrageoptimierer Abfragen auf dem Testserver effizient optimieren kann.

    3. Der Datenbankmoduloptimierungsratgeber importiert Hardwareparameter, die die Anzahl der Prozessoren und den verfügbaren Arbeitsspeicher vom Produktionsserver angeben, um den Abfrageoptimierer mit den Informationen bereitzustellen, die zum Generieren eines Abfrageplans erforderlich sind.

  3. Nachdem der Datenbankmoduloptimierungsratgeber die Optimierung der Servershelldatenbank abgeschlossen hat, wird eine Optimierungsempfehlung generiert.

  4. Wenden Sie die Empfehlung, die aus der Optimierung des Testservers stammt, auf den Produktionsserver an.

Die folgende Abbildung zeigt das Testserver- und Produktionsserverszenario:

Testservernutzung des Datenbankmodul-Tuning-Advisors

Hinweis

Das Feature zum Optimieren des Testservers wird in der grafischen Benutzeroberfläche des Datenbankmoduls Tuning Advisor (GUI) nicht unterstützt.

Beispiel

Stellen Sie zunächst sicher, dass der Benutzer, der die Optimierung durchführen möchte, sowohl auf den Test- als auch auf den Produktionsservern vorhanden ist.

Nachdem die Benutzerinformationen auf Ihren Testserver kopiert wurden, können Sie ihre Testserveroptimierungssitzung in der XML-Eingabedatei des Datenbankmoduls Tuning Advisor definieren. Im folgenden Beispiel einer XML-Eingabedatei wird veranschaulicht, wie Sie einen Testserver angeben, um eine Datenbank mit dem Datenbankmoduloptimierungsratgeber zu optimieren.

In diesem Beispiel wird die MyDatabaseName Datenbank aktiviert MyServerName. Das skript Transact-SQL MyWorkloadScript.sqlwird als Workload verwendet. Diese Workload enthält Ereignisse, die ausgeführt MyDatabaseNamewerden. Die meisten Abfrageoptimiereraufrufe an diese Datenbank, die im Rahmen des Optimierungsprozesses auftreten, werden von der Shelldatenbank behandelt, die sich auf MyTestServerName befindet. Die Shelldatenbank besteht aus Metadaten und Statistiken. Dieser Prozess führt dazu, dass der Optimierungsaufwand auf den Testserver entladen wird. Wenn der Datenbankmodul-Optimierungsratgeber seine Optimierungsempfehlung mithilfe dieser XML-Eingabedatei generiert, sollte er nur Indizes (<FeatureSet>IDX</FeatureSet>), keine Partitionierung in Betracht ziehen und muss keine der vorhandenen physischen Entwurfsstrukturen beibehalten MyDatabaseName.

<?xml version="1.0" encoding="utf-16" ?>
<DTAXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/sqlserver/2004/07/dta">
  <DTAInput>
    <Server>
      <Name>MyServerName</Name>
      <Database>
        <Name>MyDatabaseName</Name>
      </Database>
    </Server>
    <Workload>
      <File>MyWorkloadScript.sql</File>
    </Workload>
    <TuningOptions>
      <TestServer>MyTestServerName</TestServer>
      <FeatureSet>IDX</FeatureSet>
      <Partitioning>NONE</Partitioning>
      <KeepExisting>NONE</KeepExisting>
    </TuningOptions>
  </DTAInput>
</DTAXML>

Siehe auch

Überlegungen zur Verwendung derXML-Eingabedateireferenz für Testserver (Datenbankmoduloptimierungsratgeber)