J'ai fait une plongée profonde dans le magasin de requêtes SQL Server et je vois souvent des références à des requêtes «ad hoc». Cependant, je n'ai pas vu ce que le magasin de requêtes détermine comme une requête ad hoc. J'ai vu des endroits où il pouvait être déduit qu'il s'agissait d'une requête sans paramètres ou d'une requête exécutée une seule fois. Existe-t-il une définition formelle de cela? Je ne veux pas dire en général. Je veux dire en ce qui concerne le magasin de requêtes.
À titre d'exemple, cette page montre un exemple de suppression de requêtes ad hoc du magasin de requêtes, mais il semble que le critère utilisé est un nombre d'exécutions d'un seul. Cela semble être une définition étrange d'une requête ad hoc. BTW, si vous allez sur la page, recherchez «Supprimer les requêtes ad hoc».
la source
Réponses:
Après un peu de recherche, je n'ai pas pu trouver une source concrète et satisfaisante dans la documentation de Microsoft pour répondre à cette question. Il existe de nombreuses bonnes descriptions et définitions par des tiers d'adhoc / ad-hoc / ad hoc, mais pour la spécificité de cette question, je pense qu'une approche proche de la source est idéale.
En dépassant les définitions génériques (mais toujours exactes) comme ce message SO (merci SqlWorldWide), si nous regardons ce que la documentation dit sur le sujet, cela correspond à ce que vous avez mentionné à propos de la définition basée sur le nombre d'exécutions , Je pense que nous pouvons le considérer comme un fait.
L'article sur l' optimisation des flux de travail ad hoc dit,
Il semblerait donc que l'option de configuration du serveur de requêtes ad hoc utilise également la définition d'une exécution unique comme définition d'ad hoc. Si la requête continue d'être exécutée et génère le même plan, elle ne sera plus traitée comme telle.
L'article sur les meilleures pratiques pour Query Store est également conforme à cela,
Bien sûr, cela concerne les requêtes qui ne sont pas déjà utilisées comme procédures stockées, paramétrées, etc. car elles peuvent être reconnues et traitées de manière appropriée dès le départ.
Donc, sur la base de tout cela, nous pouvons dire qu'une requête est traitée comme ad hoc si:
la source
Pour les requêtes ad hoc, la colonne object_id dans le
sys.query_store_query
DMV sera 0, comme indiqué dans la documentation sys.query_store_query :Vous pouvez identifier les requêtes ad hoc sur la base de cette valeur, même si elle n'est pas explicitement indiquée car "c'est la définition des requêtes ad hoc ". :)
la source
Le terme ad-hoc est utilisé pour faire référence aux requêtes qui n'ont été exécutées qu'une seule fois. Ceci est cohérent avec la définition utilisée pour le paramètre de base de données "Optimiser pour les charges de travail ad-hoc".
Le lien que vous référencez concernant la suppression des requêtes ad hoc inclut cette définition spécifique "Supprimer les requêtes ad hoc: cela supprime les requêtes qui n'ont été exécutées qu'une seule fois et qui ont plus de 24 heures".
la source
Ad-hoc de sys.dm_exec_cached_plans de dmv
objtype
la colonne docs.microsoft.com.Une utilisation de cette colonne est de voir en cas de requêtes avec plusieurs plans pour voir si les plans multiples sont causés par
Adhoc
.la source