Problem med System.Data.Odbc
HejsaJeg 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