In SQL Server zijn de sys.dm_os_performance_counters
weergave dynamisch systeembeheer retourneert de prestatiemeteritems die door de server worden onderhouden.
Een van de vele dingen die u kunt doen met sys.dm_os_performance_counters
is een lijst met verouderde functies retourneren in het huidige exemplaar van SQL Server. U kunt deze lijst ook gebruiken om te zien hoe vaak een verouderde functie is gebruikt sinds SQL Server is gestart.
Dit is misschien wel de snelste manier om erachter te komen of je een verouderde functie in SQL Server gebruikt.
De weergave retourneert een rij per prestatiemeteritem dat door de server wordt onderhouden. Het object SQLServer:Deprecated Features biedt een teller voor het bewaken van de functies die als verouderd zijn aangemerkt. Het heeft een cntr_value
kolom, die een gebruikstelling geeft met het aantal keren dat de verouderde functie is aangetroffen sinds SQL Server voor het laatst is gestart.
Door een query uit te voeren op deze weergave, kunnen we daarom alle verouderde functies retourneren, samen met een telling van het aantal keren dat ze zijn aangetroffen sinds SQL Server voor het laatst is gestart.
Voorbeeld 1 – Retourneer alle verouderde functies die zijn aangetroffen sinds het opstarten van SQL Server
We kunnen daarom de volgende query gebruiken om alle verouderde functies te vinden die zijn aangetroffen sinds SQL Server voor het laatst is gestart, samen met het aantal keren dat elk item is aangetroffen:
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;
Resultaat:
+-----------------------------------+---------------+ | 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 gebruikte ik de RTRIM()
functie (je zou ook TRIM()
. kunnen gebruiken ) om de witruimte aan de rechterkant van het element in te korten. Ik deed dit omdat de instance_name
kolom gebruikt een nchar(128)
gegevenstype, waardoor de kolom wordt opgevuld tot 128 tekens. Door de witruimte bij te snijden, past het voorbeeld nu op de webpagina zonder horizontaal te hoeven scrollen.
Voorbeeld 2 – Functies retourneren op naam
Als u een specifieke functie heeft waarin u geïnteresseerd bent, kunt u deze altijd op naam zoeken:
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%';
Resultaat:
+------------------------------------+---------------+ | Feature | Usage Count | |------------------------------------+---------------| | INSERT NULL into TIMESTAMP columns | 0 | | TIMESTAMP | 1 | +------------------------------------+---------------+
Meer details over elke verouderde functie
De bovenstaande methode is een leuke snelle manier om te zien of verouderde functies nog steeds in uw toepassing worden gebruikt. Een nadeel is dat het niet veel informatie geeft over wat je eraan kunt doen, of zelfs welke SQL-instructies de verouderde functie bevatten, laat staan welke gebruiker het heeft uitgevoerd.
U kunt uitgebreide gebeurtenissessies gebruiken om meer informatie te retourneren, zoals de beledigende SQL-instructies, de gebruiker die het heeft uitgevoerd, het tijdstip waarop het is uitgevoerd en meer. U kunt zelfs alles vastleggen in een logbestand, zodat u het later kunt raadplegen. Zie Uitgebreide gebeurtenissen gebruiken om verouderde functies die worden gebruikt in een SQL Server-instantie te loggen voor een voorbeeld.
Zie ook het Microsoft-artikel Verouderde Database Engine-functies in SQL Server 2017 voor aanbevelingen over hoe om te gaan met elk verouderd item. Die lijst is precies dezelfde als die voor SQL Server 2016.