SQL Server : Interdire lexécution de requêtes de plus de X secondes
Cette fonctionnalité existe depuis très longtemps dans SQL Server, elle permet de prévenir (la requête ne sera pas exécutée) les requêtes dont le temps dexécution estimé dépasse le seuil spécifié.
Cela se paramètre avec loption Query Gouvernor Limit :
-- Soit au niveau serveur, pas de redémarrage nécessaire
exec sp_configure 'show advanced options', 1
reconfigure
exec sp_configure 'query governor cost limit', 10
reconfigure
exec sp_configure 'show advanced options', 0
reconfigure
-- Soit au niveau de la connexion
SET QUERY_GOVERNOR_COST_LIMIT 10
Le chiffre spécifié dans cette option est le seuil limite en seconde au-delà duquel la requête se trouvera refusé son exécution sur le serveur de base de données. Le temps estimé dexécution de la requête est basé sur une machine qui a très vraisemblablement une configuration différente de la votre (cest une machine de test Microsoft dont jignore la configuration), je ne saurais que trop vous conseiller de tester cette valeur avec quelques requêtes pour calibrer cette valeur en fonction de votre configuration.
Msg 8649, Level 17, State 1, Line 4
The query has been canceled because the estimated cost of this query (1090057) exceeds the configured threshold of 10. Contact the system administrator.
Autre point positif avec SQL Server 2008, il est possible de définir cette valeur par Pool dutilisateur grâce au Resource Gouvernor. Il devient possible choisir le seuil en fonction du type dapplication. Par exemple 0 pour les batchs (désactivé si 0), 10 pour les développeurs en production, 60 pour lapplication, etc.
Leffet au final cest que vous avez moins de risque de dégrader les performances sur du long terme à cause de requêtes mal optimisées ou trop gourmande.
Bonne limite
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :