7
votes

Comment passer des performances dans SQL Server MGMT Studio sans émettre des données de sortie?

Utilisation de SQL Server Management Studio.

Comment puis-je tester les performances d'un grand choix (dire 600k lignes) sans que la fenêtre de résultats ait un impact sur mon test? Toutes les choses étant égales, cela n'a pas d'importance, puisque les deux requêtes se produiront tous les deux au même endroit. Mais j'aimerais accélérer mes cycles de test et je pense que les paramètres de sortie de SQL Server Management Studio se mettent en route. La sortie au texte est ce que j'utilise actuellement, mais j'espère une meilleure alternative.

Je pense que cela a un impact sur mes numéros car la base de données est sur ma boîte locale.

EDIT: J'ai eu une question sur le point de faire où 1 = 0 ici (pensant que la jointure se produirait mais pas de sortie), mais je l'ai testé et cela n'a pas fonctionné - pas un indicateur valide de la performance de la requête.


0 commentaires

7 Réponses :


0
votes

La meilleure chose à 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 la meilleure estimation de la performance disponible.


1 commentaires

Cela me donnera des coûts relatifs, mais pas des chiffres réels. J'ai besoin de chiffres réels pour tester les performances.



0
votes

Je penserais que la clause de où 1 = 0 se produit définitivement sur le côté SQL Server, et non sur le studio de gestion. Aucun résultat ne serait retourné.

est votre moteur DB sur la même machine que vous exécutez le studio MGMT?

vous pourriez:

  • sortie sur texte ou
  • sortie au fichier.
  • Fermer le volet Résultats de la requête.

    Il suffit de déplacer les cycles consacrés à dessiner la grille dans le studio MGMT. Peut-être que les resulssifs au texte seraient plus performants dans l'ensemble. Cacher le volet permettrait d'enregistrer les cycles sur le studio MGMT pour avoir à dessiner les données. Il est toujours restitué au studio MGMT, il n'y a donc vraiment pas beaucoup de cycles.


1 commentaires

Ouais, l'endroit où 1 = 0 était facile à tester et n'était pas fonctionnel. Je gère le serveur SQL et le studio MGMT sur ma boîte locale.



11
votes

Vous pouvez faire définir RowCount 1 avant votre requête. Je ne suis pas sûr que ce soit exactement ce que vous voulez, mais cela évitera de devoir attendre que beaucoup de données soient renvoyées et vous donnent donc des coûts de calcul précis.

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


1 commentaires

Les coûts de Set RowCount 1 peuvent être entièrement différents de ceux-ci sans cette valeur. L'exécution s'arrête après que la première ligne soit renvoyée, il sera donc sous le rapport des coûts réels et le plan peut être différent avec et sans RowCount aussi.



3
votes

Vous pouvez Définir le temps de statistiques sur pour obtenir une mesure de le temps sur le serveur. Et vous pouvez utiliser la requête / Inclure les statistiques client (Shift + Alt + S) sur SSMS pour obtenir des informations détaillées sur l'utilisation du temps. Notez que les requêtes SQL ne fonctionnent pas et renvoient ensuite le résultat au client lorsque vous avez terminé, mais ils fonctionnent comme ils renvoient des résultats et même suspendre l'exécution si le canal de communication est plein.

Le seul contexte sous lequel une requête ignore complètement l'envoi des paquets de résultat au client est l'activation. Mais alors le temps de retourner la sortie au client doit également être envisagé lorsque vous mesurez vos performances. Êtes-vous sûr que votre propre client sera plus rapide que SSMS?


0 commentaires

0
votes

Comment pouvez-vous tester les performances de votre requête si vous ne publiez pas les résultats? L'accélération des tests est inutile si les tests ne vous disent rien de la manière dont la requête va se produire. Voulez-vous vraiment savoir que ce chien d'une requête prend dix minutes pour renvoyer des données après que vous le poussez à pousser?

Et bien sûr, il va prendre un certain temps pour renvoyer 600 000 enregistrements. Il sera également dans votre interface utilisateur, cela prendra probablement plus de temps que dans votre fenêtre de requête, car l'info doit aller sur le réseau.


1 commentaires

La requête en question n'ira jamais à pousser et ne sera jamais utilisée dans une interface utilisateur.



1
votes

Définir RowCount 1 CODE> arrêtera le traitement après la première ligne de la première ligne, ce qui signifie que si le plan arrive à avoir un opérateur de blocage, les résultats seront inutiles.

Prendre un exemple trivial P> xxx pré>

Le coût de cette requête en pratique dépendra fortement du nombre de lignes dans tableX code>. p>

Utilisation de Ensemble RowCount 1 code> ne montrera aucune de cela. Indépendamment de savoir si tablex code> a une rangée ou 1 milliard de lignes, il arrête d'exécuter après la première ligne de la première ligne. P>

J'identifie souvent les résultats code> CODE> Variables Pour pouvoir regarder des choses comme des lectures logiques sans être ralenties par SSMS affichant les résultats. P>

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

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


0 commentaires

0
votes

Il y a beaucoup de réponses plus correctes des réponses, mais j'assume une vraie question ici est celle que je viens de me demander quand je suis tombé sur cette question: J'ai une requête A et une requête B sur les mêmes données de test. Lequel est plus vite? Et je veux vérifier rapidement et sale. Pour moi, la réponse est - Tableaux Temps (les frais généraux de la création de table TEMP ici sont faciles à ignorer). Ceci doit être fait sur perf / test / dever serveur uniquement!

Query A: P>

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
SELECT * INTO #temp2 FROM ...


0 commentaires