2010-10-27 14 views

risposta

16

è possibile impostare il CommandTimeout sulla connessione sottostante, ma molto, molto, molto migliore idea sarebbe quella di prendere il tempo e lo sforzo per diagnosticare il motivo per cui il timeout sta accadendo in primo luogo.

Anche se "risolvi" il problema aumentando il tuo CommandTimeout, potresti potenzialmente causare altri problemi di blocco nel tuo database. Cerca invece query di blocco o piani di query mediocri o tabelle e indici mal progettati.

1

Qualsiasi cosa tu faccia, oltre a fissare l'SQL nella stored procedure è solo mascherare il vero problema (l'SQL).

È necessario porre una domanda sull'accelerazione della procedura, dove si inseriscono le tabelle e il codice di procedura memorizzato in modo che possa essere risolto una volta per tutte.

+1

Lo so, ma per 1 milione di inserimenti, non ho scelta ... –

+4

Sarebbe stata un'informazione molto importante da inserire nel post originale, non credi? –

+1

1 milione di inserimenti da una singola chiamata di stored procedure ?? cosa sta succedendo ??? –

3
using (var conn = new SqlConnection(ConnectionStrings.toMyDB)) 
{ 
    conn.Open(); 
    using (var cmd = new SqlCommand("myProc", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandTimeout = 30; // Increase this to allow the proc longer to run 
     cmd.Parameters.AddWithValue("@Param", myParam); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

Patrice Pezillier chiede il timeout in EF e il tuo esempio è ADO.NET –

+0

Come posso passare il risultato al DataSet? Ora sono con questa tecnologia. –

4
 using (var context = new MyDbEntities()) 
     { 
      context.CommandTimeout = 600; 
      context.MyLongRunningStoredProc(); 
     } 
0

Uso degli indici risolto il mio problema, ho scoperto che l'esecuzione della stored procedure con ExecuteStoreCommand non ha lo stesso tempo come in SQL.

È possibile utilizzare SQL Management Studio per trovare l'indice che è necessario, selezionare il codice SQL per la stored procedure, fare clic con il tasto destro e "Visualizza piano di esecuzione stimato" prendere l'indice proposto. Questo dovrebbe ottimizzare la procedura memorizzata.

Problemi correlati