Tengo una consulta bastante simple que sigo obteniendo tiempos de espera (toma más de tres minutos para completar, lo detuve temprano para poder publicar esta pregunta) en cuando se ejecuta en código Sin embargo, cuando ejecuto la misma consulta desde la misma computadora en Sql Server Management Studio, la consulta solo tomará 2532 ms
la primera consulta cuando los datos no estén en caché en el servidor y 524 ms
para consultas repetidas.Consulta extremadamente lento en el código pero rápido en SSMS
Aquí está mi código C#
using (var conn = new SqlConnection("Data Source=backend.example.com;Connect Timeout=5;Initial Catalog=Logs;Persist Security Info=True;User ID=backendAPI;Password=Redacted"))
using (var ada = new SqlDataAdapter(String.Format(@"
SELECT [PK_JOB],[CLIENT_ID],[STATUS],[LOG_NAME],dt
FROM [ES_HISTORY]
inner join [es_history_dt] on [PK_JOB] = [es_historyid]
Where client_id = @clientID and dt > @dt and (job_type > 4 {0}) {1}
Order by dt desc"
, where.ToString(), (cbShowOnlyFailed.Checked ? "and Status = 1" : "")), conn))
{
ada.SelectCommand.Parameters.AddWithValue("@clientID", ClientID);
ada.SelectCommand.Parameters.AddWithValue("@dt", dtpFilter.Value);
//ada.SelectCommand.CommandTimeout = 60;
conn.Open();
Logs.Clear();
ada.Fill(Logs); //Time out exception for 30 sec limit.
}
aquí es mi código estoy corriendo en SSMS, me la puso derecha desde ada.SelectCommand.CommandText
declare @clientID varchar(200)
set @clientID = '138'
declare @dt datetime
set @dt = '9/19/2011 12:00:00 AM'
SELECT [PK_JOB],[CLIENT_ID],[STATUS],[LOG_NAME],dt
FROM [ES_HISTORY]
inner join [es_history_dt] on [PK_JOB] = [es_historyid]
Where client_id = @clientID and dt > @dt and (job_type > 4 or job_type = 0 or job_type = 1 or job_type = 4)
Order by dt desc
qué está causando la discrepancia importante para la diferencia en el tiempo?
Para mantener limpia la sección de comentarios, responderé algunas preguntas frecuentes aquí.
La misma computadora y el inicio de sesión se utilizan tanto para la aplicación como para los sms.
En mi consulta de ejemplo solo se devuelven 15 filas. Sin embargo, es_history
contiene 11351699 rows
y es_history_dt
contiene 8588493 rows
. Ambas tablas están bien indexadas y el plan de ejecución en SSMS dice que están utilizando el índice busca las búsquedas, por lo que son búsquedas rápidas. El programa se comporta como si no estuviera utilizando los índices de la versión C# de la consulta.
¿Usó el mismo usuario en SSMS que en el código? – bzlm
¿Cuántas filas devuelve esta consulta? –
@hugh, por favor, mira mi actualización ... –