Conseil de performance Évitez d’utiliser le préfixe SP_ dans les procédures stockées

Les développeurs de bases de données nomment souvent les procédures stockées avec SP_ préfixe dans SQL Server. Le préfixe SP_ aide les autres développeurs à identifier rapidement un objet en tant que procédure stockée. Bien que de nombreux débats aient eu lieu sur l'opportunité de nommer les objets créés par l'utilisateur avec le préfixe sp_ conformément aux normes de convention d'appellation, nous ne devrions pas nommer nos procédures stockées dans SQL Server avec le préfixe SP_. Ce tutoriel Tech-Recipes explique pourquoi nous devrions éviter d'utiliser le préfixe SP_ dans les procédures stockées dans SQL Server.

1. Si nous créons une procédure stockée avec le préfixe SP_, SQL Server la considère comme une procédure stockée système et effectue d'abord une recherche dans la base de données «maître» pour vérifier si cette procédure stockée existe. Plus tard dans la base de données des utilisateurs, cela ajoute un léger surcoût en performances.

2. Les procédures stockées avec le préfixe SP_ sont considérées comme des procédures stockées spéciales du système, qui sont stockées dans la base de données master.

3. L'ajout du préfixe SP_ lors de la création d'une procédure stockée dans des bases de données utilisateur peut entrer en conflit avec les procédures stockées système disponibles dans la base de données master.

4.Voici une autre raison d'éviter d'utiliser le préfixe sp_ dans les procédures stockées de Microsoft Books Online:

Évitez d'utiliser le préfixe sp_ lors de l'attribution de noms aux procédures. SQL Server utilise ce préfixe pour désigner les procédures système. L'utilisation du préfixe peut provoquer la rupture du code d'application s'il existe une procédure système portant le même nom.

La procédure sp_help est une procédure intégrée stockée dans la base de données master. Si vous créez de manière inattendue une procédure dans une base de données utilisateur portant le même nom, la procédure de la base de données master sera toujours exécutée, remplaçant ainsi votre procédure stockée. Voici un exemple.

Créer une procédure stockée avec sp_help nom dans tempdb.

Utilisez tempdb. GO CREATE PROCEDURE sp_help AS BEGIN PRINT "J'ai besoin d’une aide immédiate, je suis dans tempdb"; FIN 

Lançons la procédure stockée à partir de tempdb.

Utiliser tempdb GO EXEC sp_help - Le résultat attendu est "J'ai besoin d'aide immédiate, je suis dans tempdb" 

Ensuite, nous obtenons une sortie inattendue, car sp_help est une procédure stockée système qui existe dans la base de données master. Par conséquent, SQL Server a exécuté la procédure stockée à partir du maître au lieu d'exécuter le SP "sp_help" créé par l'utilisateur à partir de tempdb, car il a la première préférence.

Voyons à l'aide de SQL Server Profiler comment se produit un événement CacheMiss lorsque nous essayons d'exécuter une procédure stockée existant dans la base de données master et dans la base de données tempdb.

CacheMiss: Dans l'image suivante, vous pouvez voir qu'un événement CacheMiss s'est produit lors de l'exécution du EXEC sp_help procédure de tempdb. Cela indique que SQL Server a tenté de trouver le plan d'exécution pour SP_help SP dans tempdb, mais qu'il ne l'a pas trouvé dans le cache de plan. Par conséquent, un événement CacheMiss s'est produit et pourrait également affecter les performances.

Résumé: En utilisant SP_ en tant que préfixe pour les procédures stockées dans SQL Server a un impact sur les performances étant donné que SQL Server doit effectuer la première recherche dans la base de données master à vérifier. En outre, un événement CacheMiss indique que le serveur SQL recherche le plan d'exécution dans la base de données utilisateur, mais ne le trouve pas.