c# - SqlConnection hangs on open -


i've got program send's multiple request in parallel sql server instance. of concurrent requests, 1 of them block few seconds on db.open().

void mymethod() {     var brands = new  list<string>{"chevy", "honda", "ford", "gm"};     var foundcars = new  concurrentbag<car>();         parallel.foreach(brands, brand =>     {       logger.trace(brand + " before enqueue");       foundscars.enqueue(findcar(brand));       logger.trace(brand + " after enqueue");     }); }  public car findcars(string brand) {    using (var db = new sqlconnection(connectionstring))    {      sqllogger.trace("brand " + " brand " + " before db open");      db.open();      sqllogger.trace("brand " + " brand " + " after db open");      using (var cmd = new sqlcommand(sqlcmd, db))      {         while (reader.read())         {                           //sql select stuff going on         }      }    } } 

if i'd in trace i'd see this, order depends on db response time guess, in scenario honda data being processed not be:

12:00:00.0000 chevy before enqueue  12:00:00.0000 honda before enqueue  12:00:00.0000 ford before enqueue 12:00:00.0000 gm before enqueue 12:00:00.0200 brand chevy before db open 12:00:00.0300 brand honda before db open 12:00:00.0200 brand ford before db open 12:00:00.0200 brand gm before db open 12:00:00.0300 brand chevy after db open 12:00:00.0300 brand ford after db open 12:00:00.0300 brand gm after db open 12:00:00.0400 chevy after enqueue 12:00:00.0400 ford after enqueue 12:00:00.0400 gm after enqueue 12:00:07.0000 brand honda after db open <-- around 7 seconds late 12:00:07.0100 honda after enqueue 

i can't seem replicate problem locally on sql server 2008 instance, happens time on sql server 2012 instance. issue seems configuration problem. happen when send concurrent requests , whatever select request is. if blocking query in sql server management, return in sub 100ms.

here connection string:

<add key="sqlconnectionstring" value="data source=10.0.20.20;initial catalog=carsdb;integrated security=sspi;connection timeout=240;" /> 

edit:

i have insert "min pool size=30" in connection string, seems first, second or third time method hit runs in +15 seconds, other method calls sub 500ms.

i've got sql server 2012 running in our test environement same meta data in tables issue seen, , can't replicate problem. seems configuration problem somewhere.

unless have partitioned table insane

parallel.foreach(brands, brand => {   logger.trace(brand + " before enqueue");   foundscars.enqueue(findcar(brand));   logger.trace(brand + " after enqueue"); }); 

multiple connections going after same table not faster let alone overhead of multiple connections. on other end have single physical read write head. not open , close connection takes way way longer simple read? line table , read it. reader very fast.


Comments