Compartir a través de


Cuándo se producen notificaciones de consulta

El concepto de notificaciones de consulta es que la aplicación puede basarse en datos almacenados en la caché hasta que llega un mensaje de notificación. Si SQL Server no puede garantizar que los datos de la memoria caché son confiables, SQL Server envía un mensaje de notificación. SQL Server envía una notificación de consulta para una suscripción cuando tiene lugar alguno de los siguientes eventos:

  • Las filas contenidas en los resultados de la consulta pueden haber cambiado.

  • La suscripción expira.

  • El servidor se reinicia.

  • No se pudo crear la suscripción a notificaciones de consulta (por ejemplo, la instrucción SELECT no cumple los requisitos especificados en Crear una consulta de notificación.

  • El servidor está muy cargado.

  • Se quitan o modifican objetos de los que depende la suscripción.

Tenga en cuenta que SQL Server puede producir una notificación de consulta en respuesta a eventos que no cambian los datos, o en respuesta a un cambio que no afecta realmente al resultado de la consulta. Por ejemplo, cuando una instrucción UPDATE cambia una de las filas devueltas por la consulta, la notificación puede activarse incluso si la actualización de la fila no cambió las columnas del conjunto de resultados. Las notificaciones de consulta están diseñadas para lograr el objetivo global de mejorar el rendimiento de las aplicaciones que almacenan datos en memoria caché. Cuando el servidor está muy cargado, SQL Server puede generar un mensaje de notificación de consulta para la suscripción en lugar de determinar si los resultados de la consulta han cambiado.

La suscripción a notificaciones tiene lugar antes de que el Database Engine (Motor de base de datos) ejecute cada instrucción en la solicitud de suscripción. Por tanto, si el comando contiene una consulta e instrucciones que cambian los datos devueltos por la consulta, la aplicación puede recibir un mensaje de notificación antes de que finalice el comando que contiene la solicitud de suscripción.

Cada suscripción tiene una vigencia mínima específica. Tras esa vigencia mínima, SQL Server quita la suscripción y crea un mensaje de notificación. El mensaje informa a la aplicación de que la notificación ya no está activa y SQL Server ya no realiza un seguimiento de los cambios de la consulta.

Cuando se inicia SQL Server, el servidor crea automáticamente mensajes de notificación de consulta para todas las suscripciones a notificaciones de consulta de la base de datos. Esto permite a las aplicaciones actualizar inmediatamente los datos almacenados en caché, y también permite a SQL Server iniciarse sin procesar la consulta en cada notificación. Cuando se quita una base de datos, el Database Engine (Motor de base de datos) genera mensajes de notificación de consulta para todas las suscripciones registradas en esa base de datos.

Si se envía una solicitud de suscripción a notificaciones con una consulta que no cumple los requisitos de notificación de consulta, la base de datos genera inmediatamente un mensaje de notificación de consulta. Este mensaje informa a la aplicación de que la consulta no cumplía los requisitos de una suscripción. Más aún, puesto que SQL Server no puede realizar un seguimiento de los cambios de la consulta, la aplicación debe considerar inmediatamente que los resultados de la consulta están obsoletos.

[!NOTA]

Una suscripción a notificaciones de consulta administrada por un objeto de dependencia (como SqlDependency en ADO.NET) no produce un evento si la conexión entre la aplicación y la base de datos deja de funcionar. Sin embargo, cuando la aplicación logra conectarse de nuevo a la base de datos, recibe inmediatamente las notificaciones creadas mientras no estaba conectada a la base de datos.

Cuando un comando genera un mensaje de notificación, el proceso de creación y envío de un mensaje de notificación tiene lugar como parte de una instrucción, dentro de la transacción que genera el mensaje de notificación. Si el Database Engine (Motor de base de datos) no puede crear y enviar correctamente el mensaje de notificación, el comando provoca un error que se registra en el registro de errores de SQL Server. Tenga en cuenta que el Database Engine (Motor de base de datos) quita la suscripción a notificaciones cuando se genera el mensaje de notificación, independientemente de si el Database Engine (Motor de base de datos) puede generar correctamente el mensaje de notificación.

[!NOTA]

Las suscripciones se quitan sin generar un mensaje de notificación cuando se quita o deshabilita la cuenta de usuario de la base de datos que creó la suscripción, cuando se adjunta la base de datos que contiene la suscripción o cuando se utiliza KILL QUERY NOTIFICATION SUBSCRIPTION para quitar la suscripción.