[MSSQL/C#] Profiler kan niet overweg met queries vanuit C#

Pagina: 1
Acties:

  • bigben04
  • Registratie: December 2001
  • Laatst online: 29-11 11:34
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:
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?

  • arnob
  • Registratie: Juli 2000
  • Niet online
klinkt logisch hoor. Je doet een 'createcommand'. Als je gewoon sql uitvoert dan zou het als gewoon statement te zien moeten zijn.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
arnob schreef op dinsdag 19 juni 2007 @ 10:34:
klinkt logisch hoor. Je doet een 'createcommand'. Als je gewoon sql uitvoert dan zou het als gewoon statement te zien moeten zijn.
Hoe ga jij een SQL Query uitvoeren in .NET zonder een command.

Tja, er is eigenlijk niets vreemd aan de manier waarop SQL Server die statements uitvoert. Bij mij is dit ook zo... Ik heb die Index Tuning Wizard eigenlijk nog maar sporadisch gebruikt, en vziw heb ik er geen problemen mee gehad. (Gebruik wel Sql Server 2000)

https://fgheysels.github.io/


Verwijderd

volgens mij is het probleem dat je je statement in C# via een inline sql statement probeert uit te voeren. SQL / .net voert de query uit door sp_executesql uit te voeren. De queryoptimizer kijkt niet naar wat het statement precies is wat je in sp_executesql het staan (zo slim is ie niet).

Ik zal de stored procedure vs dynamic SQL discussie maar niet aanzwengelen maar met SP's houdt je je data access laag wel makkelijk beheersbaar (met name bij grote applicaties).