vista tuning trucos tiempo reducir practicas optimizar datos consulta como buenas analizar acelerar sql-server ado.net sqlexception

sql server - tuning - Solución de problemas de tiempo de espera SqlExceptions



trucos sql server (5)

El tiempo de espera de los comandos SQL es mayor porque la consulta que está utilizando tarda más que eso en ejecutarse. Ejecútelo en Query Analyzer o Management Studio, con una cantidad representativa de datos en la base de datos , y observe el plan de ejecución para averiguar qué es lento.

Si algo está tomando un gran porcentaje del tiempo y se describe como ''escaneo de tabla'' o ''escaneo de índice agrupado'', fíjese si puede crear un índice que convierta esa operación en una búsqueda de clave (una búsqueda de índice o índice agrupado buscar).

Tengo un comportamiento curioso que me cuesta entender por qué está ocurriendo. Veo excepciones intermitentes de tiempo de espera. Estoy bastante seguro de que está relacionado con el volumen porque no es reproducible en nuestro entorno de desarrollo. Como una solución de bandaida, intenté aumentar el tiempo de espera del comando sql a sesenta segundos, pero como he descubierto, esto no parece ayudar. Aquí está la parte extraña, cuando reviso mis registros en el proceso que está fallando, aquí están los tiempos de inicio y finalización:

  • 16/09/2008 16:21:49
  • 16/09/2008 16:22:19

Entonces, ¿cómo podría ser que se agote el tiempo en treinta segundos cuando establezca el tiempo de espera del comando en sesenta?

Solo como referencia, aquí está la excepción lanzada:

System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader() at SetClear.DataAccess.SqlHelper.ExecuteReader(CommandType commandType, String commandText, SqlParameter[] commandArgs)


Esto puede sonar estúpido, pero solo escúchame. Verifique todos los índices y claves principales involucradas en su consulta. ¿Existen? ¿Están fragmentados? He tenido un problema donde, por alguna razón, ejecutar el script directamente funcionaba solo para encontrar, pero luego cuando lo hice a través de la aplicación, fue lento como suciedad. El lector básicamente actúa como cursores, por lo que la indexación es extremadamente importante.

Puede que no sea esto, pero siempre es lo primero que verifico.


Intente cambiar la propiedad de tiempo de espera de SqlConnection, en lugar de la del comando


Porque el tiempo de espera está ocurriendo en la conexión, no en el comando. Debe establecer la propiedad connection.TimeOut


Tuve este problema una vez, y lo rastreé a un código SQL realmente ineficiente en una de las vistas de mi base de datos. Alguien había puesto una condición compleja con una subconsulta en la cláusula ON para una unión de tabla, en lugar de en la cláusula WHERE donde pertenecía. Una vez que corregí este error, el problema desapareció.