Leistungstipp Vermeiden Sie die Verwendung des SP_-Präfixes in gespeicherten Prozeduren

Datenbankentwickler benennen gespeicherte Prozeduren häufig mit dem SP_ Präfix in SQL Server. Das Präfix SP_ hilft anderen Entwicklern, ein Objekt schnell als gespeicherte Prozedur zu identifizieren. Obwohl es viele Debatten darüber gab, ob vom Benutzer erstellte Objekte mit dem Präfix sp_ benannt werden sollten oder nicht Wir sollten unsere gespeicherten Prozeduren in SQL Server nicht mit dem Präfix SP_ benennen. In diesem Tech-Recipes-Lernprogramm wird erläutert, warum das SP_-Präfix in gespeicherten Prozeduren in SQL Server nicht verwendet werden sollte.

1. Wenn wir eine gespeicherte Prozedur mit dem Präfix SP_ erstellen, betrachtet SQL Server sie als gespeicherte Systemprozedur und führt zuerst eine Suche in der "Master" -Datenbank durch, um zu prüfen, ob diese gespeicherte Prozedur dort vorhanden ist. Später in der Benutzerdatenbank führt dies zu einem geringfügigen Mehraufwand in der Leistung.

2. Gespeicherte Prozeduren mit Präfix SP_ werden als spezielle gespeicherte Prozeduren eines Systems betrachtet, die in der Master-Datenbank gespeichert sind.

3. Das Hinzufügen des SP_-Präfixes beim Erstellen einer gespeicherten Prozedur in Benutzerdatenbanken kann zu Konflikten mit gespeicherten Systemprozeduren in der Master-Datenbank führen.

4.Hier ist ein zusätzlicher Grund, um die Verwendung des Präfix sp_ in gespeicherten Prozeduren aus der Microsoft Books Online zu vermeiden:

Vermeiden Sie die Verwendung des sp_-Präfixes bei der Benennung von Prozeduren. Dieses Präfix wird von SQL Server verwendet, um Systemprozeduren festzulegen. Die Verwendung des Präfixes kann dazu führen, dass Anwendungscode beschädigt wird, wenn eine Systemprozedur mit demselben Namen vorhanden ist.

Die Prozedur sp_help ist eine integrierte Prozedur, die in der master-Datenbank gespeichert ist. Wenn Sie unerwartet eine Prozedur in einer Benutzerdatenbank mit demselben Namen erstellen, wird die Prozedur aus der Master-Datenbank immer noch ausgeführt, wodurch Ihre gespeicherte Prozedur überschrieben wird. Unten ist ein Beispiel.

Erstellen Sie eine gespeicherte Prozedur mit sp_help name in tempdb.

Tempdb verwenden GO CREATE PROCEDURE sp_help WIE BEGINNT DRUCKEN 'Ich brauche sofort Hilfe, ich bin in Tempdb'; ENDE 

Lassen Sie uns die gespeicherte Prozedur von tempdb ausführen.

Tempdb verwenden GO EXEC sp_help - Erwartete Ausgabe ist "Ich brauche sofort Hilfe, ich bin in Tempdb" 

Danach erhalten wir eine unerwartete Ausgabe, da sp_help eine gespeicherte Systemprozedur ist, die in der master-Datenbank vorhanden ist. Daher hat SQL Server die gespeicherte Prozedur vom Master aus ausgeführt, anstatt den vom Benutzer erstellten SP "Sp_Help" von Tempdb auszuführen, da er die erste Einstellung hat.

Mit SQL Server Profiler können Sie sehen, wie ein CacheMiss-Ereignis eintritt, wenn wir versuchen, eine gespeicherte Prozedur auszuführen, die in der master-Datenbank und auch in der Tempdb-Datenbank vorhanden ist.

CacheMiss: In der folgenden Abbildung sehen Sie, dass ein CacheMiss-Ereignis während der Ausführung von aufgetreten ist EXEC sp_help Verfahren von Tempdb. Dies weist darauf hin, dass SQL Server versucht hat, den Ausführungsplan für sp_help SP in tempdb zu finden, im Plan-Cache jedoch nicht gefunden wurde. Daher ist ein CacheMiss-Ereignis aufgetreten, das ebenfalls einen Performance-Treffer darstellen könnte.

Zusammenfassung: Verwenden von SP_ Ein Präfix für gespeicherte Prozeduren in SQL Server hat Auswirkungen auf die Leistung, da SQL Server die erste Suche in der Master-Datenbank durchführen muss. Ein CacheMiss-Ereignis gibt außerdem an, dass der SQL Server nach dem Ausführungsplan in der Benutzerdatenbank sucht, diesen jedoch nicht findet.