Avatar billede brian_h Nybegynder
31. maj 2005 - 12:30 Der er 2 kommentarer

Problem med System.Data.Odbc

Hejsa

Jeg har udviklet et site, som benytter en MySql database som backend.

Jeg arbejder med databasen gennem System.Data.Odbc biblioteket, og når det kører lokalt på min egen server (WinXP Pro), eksekverer det som det skal, lynhurtigt.

Mit problem opstår når jeg så smider applikationen over på produktionsserveren (Win2k3), hvor eksekveringstiden stiger helt enormt.

Jeg har derfor downloadet en .NET provider direkte fra MySql.com (http://dev.mysql.com/downloads/connector/net/1.0.html) , så jeg kan opstille et benchmark mod den nuværende System.Data.Odbc provider.

MySql provider:

kodeeksempel...
private void Test1()
{
  DateTime start = DateTime.Now ;
     
  using(MySqlConnection conn = new MySqlConnection("Data Source=[server]; Database=[db]; User Id=[user]; Password=[password];"))
  {
    conn.Open() ;
     
    using(MySqlCommand command = new MySqlCommand("SELECT UNIX_TIMESTAMP()", conn))
    {
      object o = command.ExecuteScalar() ;
       
      if(o == null)
        return ;
           
      Response.Write("Timestamp: " + Convert.ToString(o) + "<br />") ;
    }
  }
     
  PrintExecTime(start, DateTime.Now) ;     
}

.NET provider:

kodeeksempel...

private void Test2()
{
  DateTime start = DateTime.Now ;
     
  using(OdbcConnection conn = new OdbcConnection("Driver={MySql ODBC 3.51 Driver}; server=[server]; Database=[db]; uid=[user]; pwd=[password];"))
  {
    conn.Open() ;
     
    using(OdbcCommand command = new OdbcCommand("SELECT UNIX_TIMESTAMP()", conn))
    {
      object o = command.ExecuteScalar() ;
   
      if(o == null)
        return ;
           
      Response.Write("Timestamp: " + Convert.ToString(o) + "<br />") ;
    }
  }
     
  PrintExecTime(start, DateTime.Now) ;     
}

Jeg har også vedlagt resultatet af min kørsel:


kodeeksempel...

(1. kørsel - før compilation)

MySql.com provider:
Timestamp: 1117533462
Eksekveringstid: 1,515625
---------------------------
.NET provider:
Timestamp: 1117533463
Eksekveringstid: 1,515625
---------------------------

(2. kørsel)

MySql.com provider:
Timestamp: 1117533492
Eksekveringstid: 0
---------------------------
.NET provider:
Timestamp: 1117533493
Eksekveringstid: 1,515625
---------------------------

Liveeksempel: http://www.brianh.dk/dbtest.aspx

Som i nok kan se er der noget der er helt galt. Som jeg ser det, ser det ud til at den recompiler for hver kørsel, hvor jeg bruger System.Data.Odbc klasserne. Det kan i hvert fald ikke passe at eksekveringstiden for en yderst simpel SQL-sætning er 1,5 sekunder.

Det tyder på en serversetting der er forkert, men jeg kan ikke gennemskue hvilken.


Nogle ideer?

Med venlig hilsen
Brian Holmgård Kristensen
Avatar billede arne_v Ekspert
31. maj 2005 - 13:09 #1
1)  du skal nok køre den forespørgsel 10000 gange eller lignende for at få en god
    måling

2)  hvorfor bekymre sig så meget over ODBC performance - du vil vil hellere
    bruger MySQL Connector for .NET anyway (jeg vil forvente både bedre
    performance, bedre fejl meddeleser og nemmere installation med den)
Avatar billede arne_v Ekspert
24. juli 2005 - 16:37 #2
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester