sql >> Database >  >> RDS >> Sqlserver

Snelste manier om verouderde functies te vinden die nog steeds worden gebruikt in een SQL Server-instantie (T-SQL-voorbeeld)

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.


  1. Hoe toegang te krijgen tot de structuur en de kolomlijst, datatypes van refcursor te krijgen?

  2. Een POST-verzoek verzenden met formuliergegevens en parameters in PL/SQL

  3. Oracle:SQL-query die rijen retourneert met alleen numerieke waarden

  4. FOUT:kon stat-bestand niet XX.csv:onbekende fout