Digamos que tengo una consulta que se envía a la base de datos de mi servidor SQL, lleva más de 30 segundos y mi programa arroja una excepción de tiempo de espera de consulta SQL. ¿La consulta sigue avanzando en mi base de datos o se cancela tan pronto como se lanza la excepción?¿Qué sucede con una consulta si se agota el tiempo?
Respuesta
Un cliente indica un tiempo de espera de consulta a el servidor mediante un evento atención. Un evento de atención es simplemente un tipo distinto de paquete TDS que un cliente de servidor SQL puede enviarle. En además de conectar/desconectar, T-SQL por lotes, y eventos RPC, un cliente puede llamar al . Una atención le dice al servidor que cancele la conexión actualmente en ejecución consulta (si hay una) tan pronto como posible. Una atención hace transacciones abiertas no rollback, y no detiene el consulta que se está ejecutando en un centavo - el servidor aborta lo que estaba haciendo para la conexión en la próxima oportunidad disponible . Generalmente, esto ocurre bastante rápido, pero no siempre.
Si obtiene un tiempo de espera SQL, SQL se ha detenido, sin embargo, las aplicaciones web pueden agotar el tiempo de espera y la consulta SQL puede continuar.
Antes de ejecutar una consulta, SQL Server estimaciones de la cantidad de memoria que necesita para plazo y trata de reservar esta cantidad de la memoria de la agrupación de almacenamiento intermedio. Si la reserva se realiza correctamente, la consulta es ejecutada inmediatamente. Si no hay memoria suficiente disponible desde el grupo de búferes, la consulta se pone en una cola con un valor de tiempo de espera, donde el valor de tiempo de espera es guiado por el costo de consulta. La regla básica es: mayor es el costo estimado, mayor el valor de tiempo de espera es. Cuando el tiempo de espera de esta consulta excede el valor de tiempo de espera , se genera un error de tiempo de espera y la consulta se elimina de la cola.
lo general, cuando el tiempo de espera significa que la conexión ha muerto, es decir, la consulta no ha sido enviado a la base de datos, la mayoría de las operaciones de apoyo a la base de datos donde se puede iniciar una transacción, ejecutar sus consultas, y si eres feliz, puedes cometerlos.
Ejemplo:
BEGIN TRAN
UPDATE authors
SET au_fname = 'John'
WHERE au_id = '172-32-1176'
UPDATE authors
SET au_fname = 'Marg'
WHERE au_id = '213-46-8915'
COMMIT TRAN
En este caso, la conexión sigue abierta, pero la base de datos está cargada, lo que provoca consultas tomar un largo tiempo. – sooprise
¿Estás hablando de tiempo de espera de conexión o algo así? Eso es diferente del tiempo de espera del comando. –
Mi punto es que si él hace conexiones a un servidor y necesita asegurarse de que vayan a la base de datos real, el uso de transacciones ayudará a prevenir errores que a veces pueden ser causados por el tiempo de espera – RobertPitt
Cuando el cliente decide que el comando se ha ejecutado tiempo suficiente, se emite un "Cancelar". La consulta simplemente deja de ejecutarse en la base de datos.
Cualquier bloque CATCH no se activará, las transacciones se dejarán abiertas y las bloqueos aún pueden permanecer asignadas después de esto, incluso si la conexión se cierra porque "cerrar" significa "volver al grupo de conexiones".
Si esperas un montón de tiempo de espera de comando y luego considerar el uso de SET XACT_ABORT ON (and this too) que se cerraduras de liberación y retrotraer transacciones. o corrige el código ...
Usted dijo "La consulta simplemente deja de ejecutarse en la base de datos"; La respuesta de Martin Smith decía que "no detiene la consulta que se está ejecutando actualmente en un centavo: el servidor aborta lo que estaba haciendo para la conexión en la próxima oportunidad disponible". ¿Cual es correcta? – simonp
Mismo resultado, idioma diferente. Mi "stop" puede retrasarse en función de la carga del servidor, IO en vuelo, lo que WAIT esté en juego, etc. – gbn
- 1. ¿Qué sucede cuando se agota una columna de incremento automático?
- 2. ¿Qué sucede cuando se agota un grupo de conexiones?
- 3. ¿Qué sucede si matas una consulta alternativa de larga ejecución?
- 4. ¿Se agota el tiempo de espera?
- 5. ¿Qué sucede si deseo implementar una consulta complicada en REST
- 6. Capistrano agota el tiempo de implementación con Amazon RDS
- 7. ¿Qué sucede si se lanza una excepción durante finalize()
- 8. ¿Qué sucede si llamo a jQuery.post() con una url vacía?
- 9. ¿Qué sucede si un mensaje se revierte en MQ?
- 10. ¿Qué sucede si un hilo se cuelga en un proceso?
- 11. ¿Qué sucede si un servicio se inicia varias veces?
- 12. ¿Qué sucede si nunca llamas a Socket.EndConnect?
- 13. ¿Qué sucede si configuro HttpGetEnabled = false
- 14. ¿Qué sucede si lanzo ReleaseMutex() dos veces?
- 15. ¿Qué sucede si las cookies están deshabilitadas?
- 16. ¿Qué sucede si no revierte una transacción en Hibernate?
- 17. ¿Qué sucede si necesito una identificación de autoincrement muy grande?
- 18. ¿Qué sucede si un bloque finally arroja una excepción?
- 19. ¿Qué sucede si saltas de una instrucción Lock()?
- 20. ¿Qué sucede si falla el constructor de shared_ptr?
- 21. ¿Qué sucede si dos categorías ObjC anulan el mismo método?
- 22. ¿Qué sucede si utilizo "throw"? sin una excepción para tirar?
- 23. ¿Qué sucede si no especifico targetFramework = "4.0"?
- 24. ¿Qué sucede con el proceso hijo?
- 25. ¿Matar o terminar el subproceso cuando se agota el tiempo de espera?
- 26. ¿Por qué readfile() agota la memoria PHP?
- 27. ¿Qué sucede cuando se inicia una aplicación .net?
- 28. ¿Qué sucede cuando un proceso se bifurca?
- 29. ¿Cómo arreglar la memoria que se agota con PHPExcel?
- 30. ¿Qué sucede si no comprometes una transacción a una base de datos (por ejemplo, SQL Server)?
La mención de 30 segundos en la pregunta indica que el OP está preguntando sobre los tiempos de espera de los comandos (del cliente), no sobre los tiempos de espera de la concesión de la memoria o los tiempos de espera de bloqueo. –
El tiempo de espera de concesión de memoria es diferente del tiempo de espera de solicitud de cliente ADO.Net, que es los 30 segundos a los que se refiere el OP –