Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Schnellste Möglichkeit, veraltete Funktionen zu finden, die noch in einer SQL Server-Instanz verwendet werden (T-SQL-Beispiel)

In SQL Server die sys.dm_os_performance_counters System Dynamic Management View gibt die vom Server verwalteten Leistungsindikatoren zurück.

Eines der vielen Dinge, die Sie mit sys.dm_os_performance_counters tun können gibt eine Liste veralteter Funktionen in der aktuellen Instanz von SQL Server zurück. Sie können diese Liste auch verwenden, um zu sehen, wie oft eine veraltete Funktion seit dem Start von SQL Server verwendet wurde.

Dies ist wahrscheinlich der schnellste Weg, um herauszufinden, ob Sie eine veraltete Funktion in SQL Server verwenden.

Die Ansicht gibt eine Zeile pro Leistungsindikator zurück, der vom Server verwaltet wird. Das SQLServer:Deprecated Features-Objekt stellt einen Zähler bereit, um die als veraltet markierten Features zu überwachen. Es hat einen cntr_value Spalte, die einen Verwendungszähler bereitstellt, der auflistet, wie oft das veraltete Feature seit dem letzten Start von SQL Server aufgetreten ist.

Daher können wir durch Ausführen einer Abfrage für diese Ansicht alle veralteten Funktionen zurückgeben, zusammen mit einer Zählung, wie oft jede seit dem letzten Start von SQL Server aufgetreten ist.

Beispiel 1 – Alle veralteten Funktionen zurückgeben, die seit dem Start von SQL Server aufgetreten sind

Wir können daher die folgende Abfrage verwenden, um alle veralteten Funktionen zu finden, die seit dem letzten Start von SQL Server aufgetreten sind, zusammen mit der Häufigkeit, mit der jedes Element aufgetreten ist:

SELECT
  RTRIM(instance_name) 'Feature', 
  cntr_value 'Usage Count'
FROM sys.dm_os_performance_counters   
WHERE object_name = 'SQLServer:Deprecated Features'
AND cntr_value > 0;

Ergebnis:

+-----------------------------------+---------------+
| Feature                           | Usage Count   |
|-----------------------------------+---------------|
| String literals as column aliases | 1             |
| TIMESTAMP                         | 1             |
| numbered_procedures               | 1             |
| sysdatabases                      | 3             |
| sp_db_vardecimal_storage_format   | 1             |
| XP_API                            | 2             |
+-----------------------------------+---------------+

Hier habe ich den RTRIM() verwendet Funktion (Sie könnten auch TRIM() verwenden ), um den weißen Bereich auf der rechten Seite des Features zu kürzen. Ich habe dies getan, weil der instance_name Spalte verwendet einen nchar(128) Datentyp, wodurch die Spalte auf 128 Zeichen aufgefüllt wird. Durch das Trimmen der Leerzeichen passt das Beispiel jetzt auf die Webseite, ohne dass horizontal gescrollt werden muss.

Beispiel 2 – Funktionen nach Namen zurückgeben

Wenn Sie an einer bestimmten Funktion interessiert sind, können Sie jederzeit anhand des Namens danach suchen:

SELECT 
  TRIM(instance_name) 'Feature', 
  cntr_value 'Usage Count'
FROM sys.dm_os_performance_counters   
WHERE object_name = 'SQLServer:Deprecated Features'
AND instance_name LIKE '%timestamp%';

Ergebnis:

+------------------------------------+---------------+
| Feature                            | Usage Count   |
|------------------------------------+---------------|
| INSERT NULL into TIMESTAMP columns | 0             |
| TIMESTAMP                          | 1             |
+------------------------------------+---------------+

Weitere Details zu jeder veralteten Funktion

Die obige Methode ist eine nette schnelle Möglichkeit, um zu sehen, ob veraltete Funktionen noch in Ihrer Anwendung verwendet werden. Ein Nachteil ist, dass es nicht viele Informationen darüber liefert, was dagegen zu tun ist oder welche SQL-Anweisungen die veraltete Funktion enthalten, geschweige denn, welcher Benutzer sie ausgeführt hat.

Sie können Sitzungen mit erweiterten Ereignissen verwenden, um weitere Informationen zurückzugeben, z. B. die anstößigen SQL-Anweisungen, den Benutzer, der sie ausgeführt hat, die Uhrzeit der Ausführung und mehr. Sie können sogar alles in einer Protokolldatei erfassen, damit Sie später darauf zurückgreifen können. Ein Beispiel finden Sie unter Verwenden erweiterter Ereignisse zum Protokollieren veralteter Funktionen, die in einer SQL Server-Instanz verwendet werden.

Siehe auch Microsofts Artikel Deprecated Database Engine Features in SQL Server 2017 für Empfehlungen zum Umgang mit den einzelnen veralteten Elementen. Diese Liste ist genau die gleiche wie die für SQL Server 2016.