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

Le moyen le plus rapide de trouver des fonctionnalités obsolètes encore utilisées dans une instance SQL Server (exemple T-SQL)

Dans SQL Server, les sys.dm_os_performance_counters la vue de gestion dynamique du système renvoie les compteurs de performance gérés par le serveur.

Une des nombreuses choses que vous pouvez faire avec sys.dm_os_performance_counters renvoie une liste des fonctionnalités obsolètes dans l'instance actuelle de SQL Server. Vous pouvez également utiliser cette liste pour voir combien de fois une fonctionnalité obsolète a été utilisée depuis le démarrage de SQL Server.

C'est probablement le moyen le plus rapide de savoir si vous utilisez une fonctionnalité obsolète dans SQL Server.

La vue renvoie une ligne par compteur de performance géré par le serveur. L'objet SQLServer:Deprecated Features fournit un compteur pour surveiller les fonctionnalités désignées comme obsolètes. Il a une cntr_value , qui fournit un nombre d'utilisations qui répertorie le nombre de fois où la fonctionnalité obsolète a été rencontrée depuis le dernier démarrage de SQL Server.

Par conséquent, en exécutant une requête sur cette vue, nous pouvons renvoyer toutes les fonctionnalités obsolètes ainsi qu'un décompte du nombre de fois où chacune a été rencontrée depuis le dernier démarrage de SQL Server.

Exemple 1 – Renvoie toutes les fonctionnalités obsolètes rencontrées depuis le démarrage de SQL Server

Nous pouvons donc utiliser la requête suivante pour trouver toutes les fonctionnalités obsolètes rencontrées depuis le dernier démarrage de SQL Server, ainsi que le nombre de fois où chaque élément a été rencontré :

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

Ici, j'ai utilisé le RTRIM() fonction (vous pouvez également utiliser TRIM() ) pour couper l'espace blanc à droite de l'entité. J'ai fait cela parce que le instance_name la colonne utilise un nchar(128) type de données, ce qui entraîne le remplissage de la colonne à 128 caractères. En coupant l'espace blanc, l'exemple peut désormais tenir sur la page Web sans nécessiter de défilement horizontal.

Exemple 2 – Renvoyer les fonctionnalités par nom

Si une fonctionnalité spécifique vous intéresse, vous pouvez toujours la rechercher par son nom :

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%';

Résultat :

+------------------------------------+---------------+
| Feature                            | Usage Count   |
|------------------------------------+---------------|
| INSERT NULL into TIMESTAMP columns | 0             |
| TIMESTAMP                          | 1             |
+------------------------------------+---------------+

Plus de détails sur chaque fonctionnalité obsolète

La méthode ci-dessus est un bon moyen rapide de voir si des fonctionnalités obsolètes sont toujours utilisées dans votre application. L'inconvénient est qu'il ne fournit pas beaucoup d'informations sur ce qu'il faut faire à ce sujet, ni même sur les instructions SQL qui incluent la fonctionnalité obsolète, sans parler de l'utilisateur qui l'a exécutée.

Vous pouvez utiliser des sessions d'événements étendues pour renvoyer plus d'informations, telles que les instructions SQL incriminées, l'utilisateur qui l'a exécutée, l'heure à laquelle elle a été exécutée, etc. Vous pouvez même tout capturer dans un fichier journal afin de pouvoir vous y référer ultérieurement. Voir Utilisation d'événements étendus pour consigner les fonctionnalités obsolètes utilisées dans une instance SQL Server pour un exemple.

Consultez également l'article de Microsoft sur les fonctionnalités obsolètes du moteur de base de données dans SQL Server 2017 pour obtenir des recommandations sur la manière de traiter chaque élément obsolète. Cette liste est exactement la même que celle de SQL Server 2016.