Utilisation de SQL Server Management Studio. p>
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. p>
Je pense que cela a un impact sur mes numéros car la base de données est sur ma boîte locale. p>
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. p>
7 Réponses :
La meilleure chose à faire est de vérifier le plan d'exécution de la requête (appuyez sur CTRL KBD> + L KBD>) pour la requête réelle. Cela vous donnera la meilleure estimation de la performance disponible. P>
Cela me donnera des coûts relatifs, mais pas des chiffres réels. J'ai besoin de chiffres réels pour tester les performances.
Je penserais que la clause de est votre moteur DB sur la même machine que vous exécutez le studio MGMT? P>
vous pourriez: p>
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. P> où 1 = 0 code> se produit définitivement sur le côté SQL Server, et non sur le studio de gestion. Aucun résultat ne serait retourné. P>
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.
Vous pouvez faire 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. P> définir RowCount 1 code> 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. P>
Les coûts de Set RowCount 1 code> 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 code> aussi.
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 em> ils renvoient des résultats et même suspendre l'exécution si le canal de communication est plein. P>
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? P>
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? p>
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. P>
La requête en question n'ira jamais à pousser et ne sera jamais utilisée dans une interface utilisateur.
Prendre un exemple trivial P> Le coût de cette requête en pratique dépendra fortement du nombre de lignes dans Utilisation de 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> 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.
tableX code>. p>
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>
SET STATISTICS IO ON
DECLARE @name nvarchar(35),
@type nchar(3)
SELECT @name = name,
@type = type
FROM master..spt_values
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 ...