Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

2 façons de voir si des fonctionnalités obsolètes sont toujours utilisées dans une instance SQL Server

Il est étonnant de voir à quelle vitesse certaines fonctionnalités peuvent devenir obsolètes dans le monde des logiciels.

Cet article présente deux méthodes pour voir si des fonctionnalités obsolètes sont utilisées dans une instance SQL Server.

Méthode 1 - sys.dm_os_performance_counters

Le moyen le plus rapide de le faire est peut-être d'utiliser le sys.dm_os_performance_counters vue de gestion dynamique du système. Parmi les nombreuses choses que vous pouvez faire avec cette vue, vous pouvez obtenir une liste des fonctionnalités obsolètes, ainsi que le nombre de fois qu'elles ont été utilisées depuis le démarrage de SQL Server.

Voici un exemple tiré de mon article Le moyen le plus rapide de trouver des fonctionnalités obsolètes encore utilisées dans une instance SQL Server :

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;

Résultat :

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

Dans cet exemple, je renvoie uniquement les lignes où le object_name la colonne a une valeur de SQLServer:Deprecated Features , et la cntr_value la valeur de la colonne est supérieure à zéro.

Vous pouvez supprimer le cntr_value colonne de cette requête pour renvoyer toutes les fonctionnalités obsolètes, y compris celles qui n'ont pas été utilisées.

Méthode 2 – Utiliser des événements étendus

Une autre façon de procéder consiste à utiliser des événements étendus. Il s'agit d'une méthode plus complète, et vous pouvez l'utiliser pour créer un fichier journal qui contient toutes les instances d'utilisation des fonctionnalités obsolètes, ainsi que l'instruction SQL utilisée qui contient la fonctionnalité obsolète, qui l'a exécutée, la base de données sur laquelle elle a été exécutée, etc. . Ci-dessous un exemple.

Créez l'événement :

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
    );

Démarrer l'événement :

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

Exécutez du code obsolète :

SELECT * FROM sys.sql_dependencies;

Lire le journal :

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);

Résultat (en utilisant la sortie verticale) :

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.

Pour une discussion plus détaillée sur cette méthode, consultez Utilisation d'événements étendus pour consigner les fonctionnalités obsolètes utilisées dans une instance SQL Server. Cet article inclut le même exemple, mais avec un peu plus de détails.