Pregunta

He trabajado en un proyecto utilizando una base de datos propietaria no es de SQL donde las consultas sean interrumpidos y en el código base había bastante algunos puntos en los que se utilizó Funcionalidad y mucho sentido (por ejemplo, para detener una consulta larga duración que se cancela por el usuario, o cuando una consulta más reciente se lleva a cabo y hace que la consulta anterior obsoletos, etc.) y me di cuenta que en realidad nunca vi ese tipo de consultas "interrumpidas" con anterioridad y pensó que podría hacer una pregunta buena SO (varios preguntas, pero están todos relacionados con exactamente la misma cosa):

  • SQL puede ser interrumpido consultas?

  • Es esta parte del estándar SQL?

  • si no es parte del estándar SQL, que DB SQL permiten consultas a ser interrumpidas (cualquier ejemplo más de bienvenida)?

  • ¿Es común para interrumpir una consulta DB (SQL o no), que sabrá que no se preocupan por el resultado más? (En la base de código que he trabajado, seguro que ayuda a aligerar la carga del servidor)

¿Fue útil?

Solución

mi humilde opinión "interrumpidas" debe sustituirse por 'muerto' o 'terminado'. El concepto de interrupción puede ser confuso como uno podría suponer que permitiría que la consulta se reanudó más tarde.

El estándar SQL no suministra una manera de interrumpir o terminar una consulta que se ejecuta, pero cada DBMS Yo sé lo hace poner en práctica una matanza mando o similar. Por ejemplo, en MySQL un usuario puede utilizar la DEMOSTRACIÓN [FULL] PROCESSLIST para ver todas las consultas que se ejecutan (y sus estados, los ID de consulta, etc.). Los usuarios con el privilegio MATAR a continuación, pueden poner fin a una consulta.

La mayoría de las Muertes ocurren porque una consulta se arriesga demasiado largo o está bloqueando otras consultas, por ejemplo. la tabla no se encuentra un índice o el disco está lleno. Cuando no se preocupan por el resultado (por ejemplo, el usuario cancela la navegación del sitio.), A menudo el servidor web propio abortará el proceso y por lo tanto la consulta en sí mismo (sin interacción manual o programador es necesario)

Otros consejos

capas acceder a todos los RDBMS que he trabajado con proporcionan un método de cancelación a las preguntas de forma asíncrona cancelar en ejecución. Consulte la documentación de cualquier pila de tecnología de acceso a datos que está utilizando. NET / ADO / JDBC proporcionar un método 'cancelar'. ODBC - SQLCancel. Obviamente subyacente RDBMS proveedores de controlador de acceso a datos también debe implementar el método.

En términos del usefullness de cancelación que tendería a ser crítico de cualquier esquema que hizo uso regular de la misma. En mi opinión una mejor coordinación y diseño o tenderían a mitigar necesidad no administrativo.

Hay dependencia significativa en el funcionamiento interno de la RDBMS, la naturaleza del esquema de transacción y el aislamiento. Si el RDBMS utiliza un modelo de concurrencia optimista (es decir, cometer es esencialmente libre) cancelar una consulta en ejecución puede implicar una operación de reversión potencialmente costosa. En el peor caso de una consulta que se ejecuta durante una hora hasta el punto de cancelación puede muy bien tener otra hora a reversión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top