sql >> Database teknologi >  >> RDS >> Sqlserver

Hurtigste måde at finde forældede funktioner, der stadig bruges i en SQL Server-instans (T-SQL-eksempel)

I SQL Server er sys.dm_os_performance_counters system dynamisk administrationsvisning returnerer ydeevnetællerne, der vedligeholdes af serveren.

En af de mange ting, du kan gøre med sys.dm_os_performance_counters returnerer en liste over forældede funktioner i den aktuelle forekomst af SQL Server. Du kan også bruge denne liste til at se, hvor mange gange en forældet funktion er blevet brugt siden SQL Server blev startet.

Dette er muligvis den hurtigste måde at finde ud af, om du bruger en forældet funktion i SQL Server.

Visningen returnerer en række pr. ydeevnetæller, der vedligeholdes af serveren. SQLServer:Deprecated Features-objektet giver en tæller til at overvåge de funktioner, der er udpeget som forældede. Den har en cntr_value kolonne, som giver en forbrugstælling, der viser antallet af gange, den forældede funktion er stødt på, siden SQL Server sidst startede.

Derfor kan vi, ved at køre en forespørgsel mod denne visning, returnere alle forældede funktioner sammen med en optælling af, hvor mange gange hver enkelt er stødt på, siden SQL Server sidst startede.

Eksempel 1 – Returner alle forældede funktioner, der er fundet siden SQL Server-start

Vi kan derfor bruge følgende forespørgsel til at finde alle forældede funktioner, der er stødt på siden SQL Server sidst startede, sammen med antallet af gange, hvert element er blevet stødt på:

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             |
+-----------------------------------+---------------+

Her brugte jeg RTRIM() funktion (du kan også bruge TRIM() ) for at trimme det hvide mellemrum til højre for funktionen. Jeg gjorde dette fordi instance_name kolonne bruger en nchar(128) datatype, hvilket bevirker, at kolonnen udfyldes til 128 tegn. Ved at trimme mellemrummet kan eksemplet nu passe på websiden uden at kræve vandret rulning.

Eksempel 2 – Returner funktioner efter navn

Hvis du har en bestemt funktion, som du er interesseret i, kan du altid søge efter den ved navn:

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             |
+------------------------------------+---------------+

Flere detaljer om hver forældet funktion

Ovenstående metode er en god hurtig måde at se, om forældede funktioner stadig bruges i din applikation. En ulempe er, at det ikke giver en masse information om, hvad man skal gøre ved det, eller endda hvilke SQL-sætninger der inkluderede den forældede funktion, endsige hvilken bruger der kørte den.

Du kan bruge udvidede hændelsessessioner til at returnere flere oplysninger, såsom de stødende SQL-sætninger, brugeren, der kørte den, tidspunktet, den blev kørt og mere. Du kan endda fange det hele i en logfil, så du kan henvise til det senere. Se Brug af udvidede hændelser til at logge forældede funktioner, der bruges i en SQL Server-instans for et eksempel.

Se også Microsofts artikel Deprecated Database Engine Features in SQL Server 2017 for anbefalinger til, hvordan man håndterer hvert forældet element. Den liste er nøjagtig den samme som den for SQL Server 2016.


  1. Ret "Mindst et af argumenterne til COALESCE skal være et udtryk, der ikke er NULL-konstanten" i SQL Server

  2. MySQL Fjern Duplicate Records

  3. Optimer GROUP BY-forespørgsel for at hente seneste række pr. bruger

  4. Tuning af SQL Server Reporting Services