Question

J'ai vu dans Oracle 10g une fonctionnalité qui estime le temps restant pour une requête longue et je me demandais si cela était possible aussi avec SQL Server (au moins en 2008?)?

Supposons que j'ai un très grand tableau avec des dizaines de millions de lignes (bien indexé, etc.) et que je dois rechercher des lignes particulières. Je sais que cela prendra beaucoup de temps et je suis cool avec cela, mais je voudrais présenter à l'utilisateur une sorte de barre de progression.

Comment puis-je afficher les progrès?

Était-ce utile?

La solution

Je l'oublierais et je mettrais un cercle en rotation!

Sérieusement, pour aller plus loin dans l’idée de MrTelly, il existe des vues de gestion dynamiques qui peuvent vous donner des temps d’exécution moyens pour certaines requêtes - peut-être que cela vous mènera quelque part.

http://msdn.microsoft.com/en-us/library /ms188754.aspx

modifier: J'ai vu le pourcentage terminé dans la procédure sp_whoisactive d'Adam Machanic. Peut-être que c'est un autre endroit à examiner. SQL 2016 a le magasin de requêtes qui conserve les informations de cache de plan, un substitut du cache de plan dmv, qui est effacé au redémarrage.

Autres conseils

Connexes:

  

Les systèmes de base de données d’aujourd’hui fournissent peu d’informations à l’utilisateur / au DBA sur   le niveau d'exécution d'une requête SQL est terminé. Pour longtemps   requêtes, de tels commentaires peuvent être très utiles, par exemple, pour   aide à décider si la requête doit être terminée ou autorisée à s'exécuter   À l'achèvement. Bien que l’exigence ci-dessus soit facile à exprimer,   développer un indicateur robuste de progression pour l'exécution des requêtes est   difficile. Dans cet article, nous étudions le problème ci-dessus et présentons   techniques qui peuvent constituer la base d’une estimation efficace des progrès.   Les résultats de la validation expérimentale de nos techniques sous Microsoft   SQL Server est prometteur.

Je ne connais pas d'outil qui le fasse automatiquement, mais il existe plusieurs solutions. Divisez votre requête en blocs ...

select blah from table where IdRange between (1 and 100000)

select blah from table where IdRange between (100001 and 200000)

à la fin de chaque sql, mettez à jour la barre de progression.

Vous pouvez également enregistrer la durée nécessaire à chacune de vos sélections et stocker ces valeurs, utilisateur par utilisateur. Utilisez ensuite ces informations pour renvoyer une longueur de barre de progression.

Ces deux approches sont plutôt calmes, espérons que quelqu'un connaisse une meilleure approche.

Vous pouvez bien sûr essayer de déchiffrer le plan de requête et émettre un jugement en fonction de cela, mais dans le code, ce serait difficile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top