Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Query lento no aplicativo .NET, mas instantâneo no SQL Server Management Studio


Na minha experiência, a razão usual pela qual uma consulta é executada rapidamente no SSMS, mas lenta no .NET é devido a diferenças no SET da conexão -tings. Quando uma conexão é aberta por SSMS ou SqlConnection , um monte de SET comandos são emitidos automaticamente para configurar o ambiente de execução. Infelizmente SSMS e SqlConnection tem SET diferente padrões.

Uma diferença comum é SET ARITHABORT . Tente emitir SET ARITHABORT ON como o primeiro comando do seu código .NET.

O SQL Profiler pode ser usado para monitorar qual SET comandos são emitidos por SSMS e .NET para que você possa encontrar outras diferenças.

O código a seguir demonstra como emitir um SET comando, mas observe que este código não foi testado.
using (SqlConnection conn = new SqlConnection("<CONNECTION_STRING>")) {
    conn.Open();

    using (SqlCommand comm = new SqlCommand("SET ARITHABORT ON", conn)) {
        comm.ExecuteNonQuery();
    }

    // Do your own stuff here but you must use the same connection object
    // The SET command applies to the connection. Any other connections will not
    // be affected, nor will any new connections opened. If you want this applied
    // to every connection, you must do it every time one is opened.
}