sql >> Database >  >> RDS >> Sqlserver

2 manieren om te zien of verouderde functies nog steeds worden gebruikt in een SQL Server-instantie

Het is verbazingwekkend hoe snel sommige functies verouderd kunnen raken in de wereld van software.

Dit artikel presenteert twee methoden om te zien of verouderde functies worden gebruikt in een SQL Server-instantie.

Methode 1 – sys.dm_os_performance_counters

Misschien is de snelste manier om dit te doen de sys.dm_os_performance_counters systeem dynamisch beheer bekijken. Een van de vele dingen die u met deze weergave kunt doen, is een lijst met verouderde functies krijgen, samen met hoe vaak ze zijn gebruikt sinds SQL Server is gestart.

Hier is een voorbeeld uit mijn artikel Snelste manier om verouderde functies te vinden die nog steeds worden gebruikt in een SQL Server-instantie:

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

In dit voorbeeld retourneer ik alleen die rijen waar de object_name kolom heeft een waarde van SQLServer:Deprecated Features , en de cntr_value de waarde van de kolom is groter dan nul.

Je zou de cntr_value . kunnen verwijderen kolom van deze zoekopdracht om alle verouderde functies te retourneren, inclusief de functies die niet zijn gebruikt.

Methode 2 – Gebruik uitgebreide evenementen

Een andere manier om dit te doen, is door uitgebreide evenementen te gebruiken. Dit is een meer uitgebreide methode en u kunt het gebruiken om een ​​logbestand te maken dat alle exemplaren van het gebruik van verouderde functies bevat, samen met de gebruikte SQL-instructie die de verouderde functie bevat, wie deze heeft uitgevoerd, de database waarop deze is uitgevoerd, enz. . Hieronder is een voorbeeld.

Maak het evenement:

CREATE EVENT SESSION [Deprecation Events] ON SERVER 
ADD EVENT sqlserver.deprecation_announcement(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
        )
),
ADD EVENT sqlserver.deprecation_final_support(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'/var/opt/mssql/tmp/DeprecationEvents.xel'
    )
WITH (
    TRACK_CAUSALITY = ON
    );

Start het evenement:

ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;

Voer een verouderde code uit:

SELECT * FROM sys.sql_dependencies;

Lees het logboek:

SELECT
    EventXml.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
    EventXml.value('(action[@name="username"]/value)[1]', 'nvarchar(256)') AS username,
    EventXml.value('(action[@name="database_name"]/value)[1]', 'nvarchar(128)') AS database_name,
    EventXml.value('(action[@name="sql_text"]/value)[1]', 'varchar(4000)') AS sql_text,
    EventXml.value('(@name)[1]', 'varchar(50)') AS event_name,
    EventXml.value('(data[@name="feature"]/value)[1]', 'varchar(255)') AS feature,
    EventXml.value('(data[@name="message"]/value)[1]', 'varchar(max)') AS message
FROM (SELECT CAST(event_data AS XML) AS XmlEventData
    FROM sys.fn_xe_file_target_read_file (
        '/var/opt/mssql/tmp/DeprecationEvents*.xel', 
        null, 
        null, 
        null
    )) AS EventTable
CROSS APPLY EventTable.XmlEventData.nodes('event') AS q(EventXml);

Resultaat (met verticale uitvoer):

timestamp     | 2019-10-31 04:03:06.5280000
username      | sa
database_name | Test
sql_text      | SELECT * FROM sys.sql_dependencies;
event_name    | deprecation_announcement
feature       | sql_dependencies
message       | sql_dependencies will be removed in a future version of SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use it.

Zie Uitgebreide gebeurtenissen gebruiken om verouderde functies te registreren die worden gebruikt in een SQL Server-instantie voor een meer gedetailleerde bespreking van deze methode. Dat artikel bevat hetzelfde voorbeeld, maar met wat meer details.


  1. Introductie van algemene tabelexpressies in SQL Server

  2. GROUP_CONCAT BESTEL DOOR

  3. 7 gratis hulpprogramma's voor het maken van databasediagrammen voor drukke gegevensmensen

  4. ScyllaDB-trends – hoe gebruikers de realtime big data-database implementeren