I SQL Server, sys.dm_os_performance_counters
Systemets dynamiska hanteringsvy returnerar de prestandaräknare som underhålls av servern.
En av många saker du kan göra med sys.dm_os_performance_counters
returnerar en lista över föråldrade funktioner i den aktuella instansen av SQL Server. Du kan också använda den här listan för att se hur många gånger en utfasad funktion har använts sedan SQL Server startades.
Detta är förmodligen det snabbaste sättet att ta reda på om du använder en föråldrad funktion i SQL Server.
Vyn returnerar en rad per prestandaräknare som underhålls av servern. SQLServer:Deprecated Features-objektet tillhandahåller en räknare för att övervaka de funktioner som anges som utfasade. Den har ett cntr_value
kolumn, som ger en användningsräkning som visar antalet gånger den föråldrade funktionen påträffades sedan SQL Server senast startade.
Därför kan vi, genom att köra en fråga mot den här vyn, returnera alla föråldrade funktioner tillsammans med en räkning av hur många gånger var och en påträffades sedan SQL Server senast startade.
Exempel 1 – Returnera alla föråldrade funktioner som har påträffats sedan SQL Server startades
Vi kan därför använda följande fråga för att hitta alla föråldrade funktioner som har påträffats sedan SQL Server startade senast, tillsammans med antalet gånger varje objekt har påträffats:
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;
Resultat:
+-----------------------------------+---------------+ | 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 | +-----------------------------------+---------------+
Här använde jag RTRIM()
funktion (du kan också använda TRIM()
) för att trimma det vita utrymmet till höger om funktionen. Jag gjorde detta eftersom instance_name
kolumnen använder en nchar(128)
datatyp, vilket gör att kolumnen fylls ut till 128 tecken. Genom att trimma blanktecken kan exemplet nu passa på webbsidan utan att behöva rulla horisontellt.
Exempel 2 – Returnera funktioner efter namn
Om du har en specifik funktion som du är intresserad av kan du alltid söka efter den med namn:
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%';
Resultat:
+------------------------------------+---------------+ | Feature | Usage Count | |------------------------------------+---------------| | INSERT NULL into TIMESTAMP columns | 0 | | TIMESTAMP | 1 | +------------------------------------+---------------+
Mer information om varje utfasad funktion
Ovanstående metod är ett bra snabbt sätt att se om föråldrade funktioner fortfarande används i din applikation. En nackdel är att det inte ger en hel del information om vad man ska göra åt det, eller ens vilka SQL-satser som inkluderade den föråldrade funktionen, än mindre vilken användare som körde den.
Du kan använda utökade händelsesessioner för att returnera mer information, till exempel de felande SQL-satserna, användaren som körde det, när det kördes och mer. Du kan till och med fånga allt i en loggfil så att du kan hänvisa till det senare. Se Använda utökade händelser för att logga föråldrade funktioner som används i en SQL Server-instans för ett exempel.
Se även Microsofts artikel Utfasade databasmotorfunktioner i SQL Server 2017 för rekommendationer om hur man hanterar varje utfasad artikel. Den listan är exakt densamma som den för SQL Server 2016.