comment puis-je tester les performances dans Sql Server Mgmt studio sans sortie de données?

StackOverflow https://stackoverflow.com/questions/1240051

  •  11-09-2019
  •  | 
  •  

Question

Utilisation de SQL Server Management Studio.

Comment puis-je tester les performances d'un grand select (disons 600k lignes) sans la fenêtre de résultats un impact sur mon test? Toutes choses étant égales par ailleurs, il ne compte pas vraiment, puisque les deux requêtes seront tous les deux délivrer en sortie au même endroit. Mais je voudrais accélérer mes cycles de test et je pense que les paramètres de sortie de SQL Server Management Studio obtiennent dans mon chemin. Sortie au texte est ce que je suis actuellement en utilisant, mais je suis l'espoir d'une meilleure alternative.

Je pense que cela se répercute sur mes chiffres, car la base de données est sur ma boîte locale.

Edit: a posé une question au sujet de faire 1 = 0 ici (en pensant que la jointure se passerait-il, mais pas de sortie), mais je l'ai testé et il ne fonctionne pas - pas un indicateur valable de la performance de la requête.

Était-ce utile?

La solution

Vous pouvez faire SET ROWCOUNT 1 avant votre requête. Je ne suis pas sûr que c'est exactement ce que vous voulez, mais il évitera d'avoir à attendre beaucoup de données à retourner et donc vous donner les coûts de calcul précis.

Cependant, si vous ajouter Statistiques client à votre requête , l'un des numéros est temps d'attente sur les réponses du serveur qui vous donnera le temps de calcul du serveur sans compter le temps nécessaire pour transférer les données sur le réseau.

Autres conseils

Vous pouvez SET STATISTIQUES SUR LE TEMPS pour obtenir une mesure de le temps sur le serveur. Et vous pouvez utiliser la requête / Inclure Statistiques client (Maj + Alt + S) sur SSMS pour obtenir des informations détaillées sur l'utilisation du temps du client. Notez que les requêtes SQL ne fonctionnent pas et puis retourner le résultat au client lorsque vous avez terminé, mais ils courent ils renvoient des résultats et suspendent même exécution si le canal de communication est pleine.

Le seul contexte dans lequel une requête ignore complètement envoyer au client les paquets de résultat est l'activation. Mais le temps de retourner la sortie au client doit également être considéré lorsque vous mesurez vos performances. Etes-vous sûr que votre propre client être plus vite que SSMS?

SET ROWCOUNT 1 va arrêter le traitement après la première ligne est retournée ce qui signifie que si le régime arrive à avoir un opérateur bloquant les résultats seront inutiles.

Pour prendre un exemple trivial

SELECT * FROM TableX

Le coût de cette requête dans la pratique dépendent fortement du nombre de lignes dans TableX.

Utilisation SET ROWCOUNT 1 ne montrera pas de tout cela. Indépendamment du fait que TableX a une rangée ou des rangées 1 milliard il cessera d'exécution après que la première ligne est renvoyée.

Je cède souvent les résultats de SELECT aux variables pour être en mesure de regarder les choses comme lectures logiques sans être ralenti par SSMS l'affichage des résultats.

  SET STATISTICS IO ON
  DECLARE @name nvarchar(35),
          @type nchar(3)

  SELECT @name = name, 
         @type = type
  FROM master..spt_values

Il y a une demande de connexion de l'article lié Fournir "Jeter les résultats au serveur" dans SSMS et / ou TSQL

Comment pouvez-vous tester les performances de votre requête si vous ne générerez les résultats? Accélérer le test est inutile si le test ne vous dit pas comment la requête va effectuer. Voulez-vous vraiment savoir ce chien d'une requête prend dix minutes pour renvoyer des données après que vous pousser à pousser?

Et bien sûr, sa va prendre un certain temps pour revenir 600.000 dossiers. Il sera dans votre interface utilisateur ainsi, il faudra probablement plus que dans la fenêtre de votre requête parce que l'information doit passer à travers le réseau.

La meilleure chose que vous pouvez faire est de vérifier le plan d'exécution de la requête (appuyez sur Ctrl + L ) pour la requête réelle. Cela vous donnera le meilleur devinette pour des performances disponibles.

Je pense que la clause where de WHERE 1=0 est sans aucun doute se passe sur le côté SQL Server, et non Management Studio. Aucun résultat ne sera retourné.

est le moteur DB sur la même machine que vous utilisez la Gestion Studio sur?

Vous pouvez:

  • Sortie de texte ou
  • Sortie de fichier.
  • Fermez le volet Résultats de la requête.

Ce serait tout simplement déplacer les cycles consacrés à l'élaboration de la grille en Mgmt Studio. Peut-être les Resuls au texte seraient plus performants dans l'ensemble. Masquer le volet sauverait les cycles sur Mgmt studio d'avoir à tirer les données. Il est encore retourné à la Direction studio, il est donc vraiment pas économiser beaucoup de cycles.

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