Das Best Practices Analyzer Tool für Microsoft SQL Server 2000 ist ein vom Microsoft SQL Server-Entwicklungsteam entwickeltes Datenbankverwaltungstool, mit dem Sie erkennen können, ob die entworfene Datenbank den Best Practice-Richtlinien für den Betrieb und die Verwaltung von SQL Server entspricht. Es ist anerkannt, dass diese Richtlinien dazu beitragen, die Leistung und Effizienz von Datenbanken zu verbessern und die Wartung von Anwendungen zu vereinfachen.
2. Beginnen Sie mit der Verwendung von SQL BPA Best Practices Analyzer.
Nach Abschluss der Installation wird ein Word-Dokument des SQL Server Best Practices Analyzer-Benutzerhandbuchs angezeigt. Die grundlegenden Schritte sind wie folgt:
(1) Protokoll in SQL BPA
(2) Analyse hinzufügen/Erkannte SQL Server-Instanz
Sie müssen hier den SQL Server-Instanznamen eingeben, der zur Verknüpfung mit der später erstellten Best Practice-Gruppe verwendet wird (behalten Sie einfach den gleichen Namen wie der SQL Server-Instanzname bei). ). Der Standardwert der Datenbankliste ist *, was bedeutet, dass sie alle Datenbanken der aktuellen SQL Server-Instanz enthält. Allerdings überspringt BPA die Erkennung von Datenbanken wie „master“, „tempdb“, „msdb“, „pubs“ und „northwind“.
(3) Um Best Practice-Gruppen zu verwalten,
müssen Sie zunächst eine Best Practice-Gruppe erstellen, die tatsächlich einige Regeln kombiniert und sie der zuvor eingegebenen SQL Server-Instanz zuordnet.
(4) Analysieren Sie die SQL Server-Instanz
und verschieben Sie die zuvor erstellte Best Practice-Gruppe in die Liste der auszuführenden Best Practice-Gruppen, damit sie gemäß den zuvor definierten Regeln ausgeführt werden kann, und erstellen Sie einen Bericht, der Vorschläge und Richtlinien für Verbesserungen enthält.
3. Ich denke, die in SQL BPA v1.0 enthaltenen Regeln
sind der entscheidende Punkt, denn nur wenn wir diese Best-Practice-Richtlinien für den Betrieb und die Verwaltung von SQL Server verstehen, können wir versuchen, diese Regeln beim Entwerfen von Datenbanken und beim Schreiben von T-SQL-Skripten zu befolgen. Verbessern Sie die Leistung und Effizienz von SQL Server und Anwendungen.
Tatsächlich sind alle Regeln hier (englische Version) file:///C:/Program%20Files/Microsoft%20SQL%20Server%20Best%20Practices%20Analyzer/html/RuleInformation.html#_Rule:_Explicit_Index_Creation use SQL BPA wird im Standardpfad installiert. Wenn Sie den Installationspfad ändern, wird es nicht hier sein.
Hier sind einige Regeln, die mich interessieren:
(1) Datenbank-Designregeln
: Tabellen ohne Primärschlüssel oder eindeutige Einschränkungen.
Überprüfen Sie die Datenbank, um sicherzustellen, dass für alle Tabellen ein Primärschlüssel definiert ist oder für eine Spalte eine eindeutige Einschränkung definiert ist.
Regel: Die Benennung von Benutzerobjekten (Benennung von Benutzerobjekten)
erkennt Benutzerobjekte, die mit dem Präfix sp_, xp_ oder fn_ benannt sind, um Namenskonflikte mit den integrierten Objekten von SQL Server zu vermeiden. Wenn SQL Server feststellt, dass der gespeicherten Prozedur das Präfix sp_ vorangestellt ist, fragt er zunächst die gespeicherte Prozedur in der Masterdatenbank ab, was sich auf die Leistung auswirkt.
Daher müssen die folgenden Richtlinien befolgt werden:
Verwenden Sie nicht das Präfix „sp_“, um benutzerdefinierte gespeicherte Prozeduren zu benennen.
Verwenden Sie nicht
das Präfix „xp_“, um benutzerdefinierte erweiterte gespeicherte Prozeduren zu benennen
.
Tatsächlich können Sie es mit Präfixen wie usp_, uxp_ oder ufn_ benennen, und u bedeutet benutzerdefiniert.
(2) T-SQL-
Regel: Cursor FOR UPDATE-Spaltenliste
erkennt die FOR UPDATE-Klausel in gespeicherten Prozeduren, Funktionen, Ansichten und Triggern. Wenn ein Cursor eine FOR UPDATE-Klausel definiert, wird empfohlen, explizite Spaltenspalten bereitzustellen. FOR UPDATE wird verwendet, um aktualisierbare Spalten im Cursor zu definieren. Wenn OF-Spaltenname angegeben wird, dürfen nur die aufgelisteten Spalten geändert werden. Wenn keine Spaltenliste angegeben ist, können alle Spalten aktualisiert werden, sofern nicht die Parallelitätsoption READ_ONLY angegeben ist. SQL Server kann Vorgänge basierend auf angegebenen Spalten optimieren.
Regel: Die Verwendung von Cursorn
prüft, ob die Aktualisierbarkeit des Cursors in gespeicherten Prozeduren, Funktionen, Ansichten und Triggern korrekt definiert ist. In den folgenden Situationen wird ein Fehler gemeldet:
wenn ein Cursor die FOR UPDATE-Klausel nicht definiert, aber durch den Cursor aktualisiert wird;
wenn ein Cursor die FOR UPDATE-Klausel definiert, aber nicht durch den Cursor aktualisiert wird;
Im Allgemeinen versuchen wir jedoch, die Verwendung des serverseitigen Cursors zu vermeiden, da dieser Serverspeicherressourcen beansprucht und die Leistung von SQL Server beeinträchtigt. Anstelle des Cursors können auch verschachtelte Abfragen oder WHILE-Anweisungen verwendet werden. Auch wenn Sie den Cursor verwenden, sollten Sie darauf achten, einige Cursoroptionen zu definieren, z. B. FAST_FORWARD.
Regel: Explizite Indexerstellung
Es wird empfohlen, CLUSTERED oder NONCLUSTERED zu verwenden, um den Index explizit zu erstellen.
Regel: INSERT Column List
erfordert, dass bei Verwendung von INSERT die Spaltenliste explizit bereitgestellt werden muss, um die Wartbarkeit des Codes zu verbessern.
Regel: Die Konfiguration verschachtelter Trigger
erkennt Trigger, die aufgrund von Konfigurationsproblemen mit verschachtelten Triggern nicht ausgelöst werden. Da dieser relativ selten ist, habe ich ihn direkt gepostet.
Wenn die Konfigurationsoption „verschachtelte Trigger“ auf 0 gesetzt ist, wird jeder AFTER-Trigger, der für Tabellen/Ansichten definiert ist, die in einem INSTEAD OF-Trigger aktualisiert werden, nicht ausgelöst. Diese Regel:
1) Überprüft den Wert der Konfigurationsoption und wird beendet, wenn er nicht 0 ist.
2) Scannt alle INSTEAD OF-Trigger und generiert eine Liste der Tabellen/Ansichten, die innerhalb eines Triggers Ziel von DML sind.
3) Prüft, ob für eines der identifizierten DML-Ziele AFTER-Trigger definiert sind.
4) Meldet die Nichteinhaltung solcher Fall.
Regel: Die Option NOCOUNT in Triggers
erkennt Trigger und stellt sicher, dass SET NOCOUNT ON vor Trigger geschrieben wird.
SQL Server sendet nach der Ausführung jeder Anweisung eine „Fertig“-Nachricht. Diese Informationen können dazu führen, dass die Anwendung, die den Auslöser auslöst, unbeabsichtigte Folgen hat. Daher ist es eine gute Designgewohnheit, SET NOCOUNT ON vor dem Auslöser hinzuzufügen.
Natürlich wird empfohlen, SET NOCOUNT ON vor gespeicherten Prozeduren und Funktionen hinzuzufügen. Auf diese Weise wird die Anzahl der Zeilen, die von der Ausführung einer Reihe von SQL-Befehlen betroffen sind, nicht an den Client zurückübertragen, wodurch der Netzwerkverkehr reduziert und die Leistung verbessert wird.
Regel: NULL-Vergleiche
erkennen Gleichheits- oder Ungleichheitsvergleiche mit NULL-Konstanten in gespeicherten Prozeduren, Funktionen, Ansichten und Triggern. Es wird empfohlen, ANSI_NULLS auf ON zu setzen und das Schlüsselwort IS zum Vergleichen von NULL-Konstanten zu verwenden.
Regel: Ergebnisse in Triggern
prüfen Trigger, um sicherzustellen, dass von Triggern keine Daten an den Aufrufer zurückgegeben werden. Daher wird die Verwendung der folgenden Anweisungen in Triggern nicht empfohlen:
PRINT-Anweisung
SELECT (ohne Zuweisung oder INTO-Klausel)
FETCH (ohne Zuweisung)
Regel: Der Transaktionsbereich
erkennt den Transaktionsbereich in gespeicherten Prozeduren und Triggern. Es wird empfohlen, dass der Start und das Ende der Transaktion innerhalb derselben T-SQL-Struktur liegen.
Versuchen Sie im Allgemeinen, den Umfang der Transaktion so weit wie möglich einzuschränken, um zu vermeiden, dass viele Ressourcen beansprucht werden und die Leistung von SQL Server beeinträchtigt wird.
Regel: SELECT *
erkennt die Verwendung von SELECT * in gespeicherten Prozeduren, Funktionen, Ansichten und Triggern. Obwohl SELECT * praktischer ist, verringert es die Wartbarkeit des Programms. Änderungen an der Tabelle oder Ansicht können zu Fehlern oder Leistungsänderungen führen.
Daher empfiehlt es sich, die Feldliste nach der SELECT-Anweisung explizit anzugeben.
Regel: SET Options
erkennt die Verwendung der folgenden SET-Anweisungen in gespeicherten Prozeduren und Triggern.
Es wird empfohlen, die folgenden Optionen auf ON zu setzen:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
empfiehlt, die folgenden Optionen auf OFF zu setzen:
NUMERIC_ROUNDABOUT
Regel: Temp Table Usage
erkennt die Verwendung temporärer Tabellen in gespeicherten Prozeduren und Triggern. Beim Erstellen einer temporären Tabelle muss CREATE INDEX erstellt werden, und nach Abschluss der Verwendung muss die temporäre Tabelle freigegeben werden.
Da temporäre Tabellen eine große Anzahl von Festplatten-E/A-Vorgängen generieren, wird empfohlen, TABLE-Variablen zu verwenden, um die Verwendung temporärer Tabellen zu ersetzen.
Aufgrund der Einschränkungen bei der gleichzeitigen Ausführung und Pflege statistischer Informationen werden jedoch weiterhin temporäre Tabellen empfohlen, wenn große Datenmengen in temporäre Tabellen eingefügt werden.
Regel: TOP ohne ORDER BY
erkennt das Fehlen von ORDER BY TOP-Anweisungen in gespeicherten Prozeduren, Funktionen, Ansichten und Triggern. Bei Verwendung der TOP-Anweisung empfiehlt es sich, Sortierbedingungen anzugeben. Andernfalls hängen die erzeugten Ergebnisse vom SQL-Ausführungsplan ab und führen zu unerwartetem Verhalten.
Regel: Die Verwendung schemaqualifizierter Tabellen/Ansichten
erkennt, ob der Eigentümer angegeben ist, wenn Tabellen und Ansichten in gespeicherten Prozeduren, Funktionen, Ansichten und Triggern referenziert werden. Wenn Sie in SQL Server auf ein bestimmtes Objekt verweisen, müssen Sie zwar keinen Server, keine Datenbank und keinen Eigentümer (Schema) angeben, was bedeutet, dass Sie nicht die Mühe von server_name.database_name.owner_name.*** benötigen, SQL Server empfiehlt dies jedoch Es kann in gespeicherten Prozeduren oder Funktionen verwendet werden. Beim Verweisen auf eine Tabelle oder Ansicht in einer Ansicht oder einem Trigger ist es am besten, den Eigentümer der Tabelle oder Ansicht anzugeben.
Wenn SQL Server ein Tabellen-/Ansichtsobjekt ohne angegebenen Besitzer abfragt, fragt es zuerst den Standardbesitzer und dann dbo ab. Dadurch entstehen zusätzliche Betriebskosten für das SQL Server-Produkt. Durch die Angabe des Eigentümers können Sie die Leistung von SQL Server verbessern. (Das erste Mal, dass ich diese Aussage gehört habe)
4. Download-URL für Referenzdokumente und zugehörige Ressourcentools
:
fürVideos: