2010-06-04 3 views
2

J'essayais de tester la différence de performance entre l'insertion directe dans une table et l'insertion dans une vue dans une base de données différente qui pointe vers la table. J'ai été choqué de voir qu'une boucle WHILE avec 10.000 inserts dans une table simple a pris 3 secondes mais contre la vue cela a pris 30 secondes. Comme je l'ai étudié, j'ai trouvé que si je basculais Windows dans SSMS, la performance de la vue était la même que celle de la table comme je pensais qu'il aurait dû l'être. J'ai ensuite basculé DB dans la fenêtre de vue à la table DB et inséré là-bas et il était lent lorsque vous allez directement contre la table.Différences de performances énormes entre les connexions

Ceci m'a montré l'idée qu'il y avait une différence dans les connexions. Il s'agissait de différents onglets dans SSMS, l'un créé de l'autre avec -N. Je n'ai émis aucune commande SET autre que SET NOCOUNT ON (dans les deux fenêtres) et toutes les statistiques, les plans de requête, etc. ont été désactivés.

Lorsque j'ai exécuté SQL Profiler pour examiner les connexions, elles avaient des paramètres identiques. La différence de performance était cependant constante à 100%.

J'ai vérifié qu'aucune transaction n'était ouverte dans les deux connexions.

J'ai essayé d'ouvrir une autre instance de SSMS et je ne peux pas dupliquer les performances lentes (bien que cela se produise dans deux des trois de mes onglets dans la première instance de SSMS).

Tout cela est sur un serveur local. Je vais devoir le fermer dans environ une heure et je ne sais pas si je peux reproduire ce problème, donc j'espère que je peux obtenir quelques suggestions avant alors :)

D'autres idées sur ce que la différence pourrait être?

+0

Comment SQL Server prend-il en compte la différence de temps? Avez-vous essayé d'inclure des plans d'exécution réels pour voir s'il y a une différence et regarder les résultats SET STATISTICS IO et SET STATISTICS TIME? –

+1

Juste un petit commentaire: si c'est difficile/impossible à reproduire, alors je ne pense pas à autre chose. – NotMe

+0

Est-il possible qu'il y ait quelque chose dans la base de données avec la vue, provoquant une requête supplémentaire sur une table différente dans la même base de données, avant qu'elle n'atteigne l'insertion cible? – Nate

Répondre

3

Je vous suggère de comparer les lignes pour la session lente et rapide dans sys.dm_exec_sessions et de voir s'il y a quelque chose de différent.

+0

Merci. Je ne l'ai pas mentionné dans mon message, mais j'ai vérifié cela et dm_exec_connections –

+1

Vous devriez probablement vous concentrer sur essayer de trouver où est la différence de temps passée. Pendant l'exécution de la requête lente et rapide, pool sur sys.dm_exec_requests wait_type, wait_resource et wait_time, vérifiez s'il existe une différence évidente dans le canevas. Cela devrait vous donner un indice * pourquoi * est le décalage horaire. –

+0

Btw, assurez-vous de ne pas frapper la base de données et/ou de consigner les événements de croissance tous les Nième passages qui * se produisent * toujours sur la même fenêtre. –

Questions connexes