Mijn probleem is als volgt: ik ben bezig met een (grote) C#-applicatie (framework 2.0, Visual Studio 2005). Deze maakt veel gebruik van een MS SQL database (SQL Server 2005).
Nu is de performance nog niet echt geweldig en wil ik graag de SQL Server Profiler gebruiken om e.e.a. te analyseren. Wanneer ik echter hiermee een trace doe, en deze vervolgens inlees in de Database Engine Tuning Advisor, blijkt dat de C#-queries niet geanalyseerd kunnen worden; daarbij verschijnt de melding 'Event does not reference any tables'.
In zowel de profiler als de Tuning Advisor is ook te zien dat het bijbehorende event aangeeft dat de queries zijn uitgevoerd als stored procedures:
In de C# code wordt de query gewoon op de 'standaard' manier uitgevoerd:
Wanneer ik de betreffende query uitvoer in de query analyzer met de waarde handmatig ingevoerd kan de profiler er (uiteraard) wel iets mee, maar gezien de hoeveelheid queries was ik niet van plan om het op deze wijze te gaan doen
Een Google-search levert alleen mensen op die ook daadwerkelijk stored procedures uitvoeren. Een wat ruimere search levert een hoop resultaten op, maar niet echt zinnige resultaten voor wat betreft C#.
Is er nu een manier om deze queries alsnog te kunnen profilen? Heeft iemand ervaring met het profilen van queries vanuit C#? Andere tips?
Nu is de performance nog niet echt geweldig en wil ik graag de SQL Server Profiler gebruiken om e.e.a. te analyseren. Wanneer ik echter hiermee een trace doe, en deze vervolgens inlees in de Database Engine Tuning Advisor, blijkt dat de C#-queries niet geanalyseerd kunnen worden; daarbij verschijnt de melding 'Event does not reference any tables'.
In zowel de profiler als de Tuning Advisor is ook te zien dat het bijbehorende event aangeeft dat de queries zijn uitgevoerd als stored procedures:
SQL:
1
| exec sp_executesql N'SELECT veld1 FROM tabel WHERE veld2 = @value',N'@value int',@value=4 |
In de C# code wordt de query gewoon op de 'standaard' manier uitgevoerd:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SqlConnection conn = new SqlConnection(); // Connecten enzo SqlCommand command = conn.CreateCommand(); command.CommandText = "SELECT veld1 FROM tabel WHERE veld2 = @value"; command.Parameters.AddWithValue("@value", value); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { // Doe iets met resultaat } reader.Close(); command.Parameters.Clear(); conn.close(); |
Wanneer ik de betreffende query uitvoer in de query analyzer met de waarde handmatig ingevoerd kan de profiler er (uiteraard) wel iets mee, maar gezien de hoeveelheid queries was ik niet van plan om het op deze wijze te gaan doen
Een Google-search levert alleen mensen op die ook daadwerkelijk stored procedures uitvoeren. Een wat ruimere search levert een hoop resultaten op, maar niet echt zinnige resultaten voor wat betreft C#.
Is er nu een manier om deze queries alsnog te kunnen profilen? Heeft iemand ervaring met het profilen van queries vanuit C#? Andere tips?