Планирование уведомлений
Для эффективного использования уведомлений о запросах необходимо учитывать, даст ли это приложению какой-либо выигрыш, поддерживает ли оно уведомления о запросах, а также определить стратегию, которую приложение будет использовать для подписки на уведомления и для их получения.
Уведомления о запросах являются удобным способом снизить количество обращений к базе данных, если данные, возвращаемые запросом, меняются относительно редко, если приложение не требует мгновенного обновления после изменения данных и если запрос удовлетворяет требованиям и ограничениям, описанным в разделе Создание запроса с уведомлениями. Этим критериям удовлетворяют многие веб-приложения, которые могут получить выигрыш от использования уведомлений о запросах.
Уведомления о запросах не всегда оказываются полезными. Они эффективны в ситуациях, когда приложение часто считывает данные из базы данных, но данные при этом обновляются относительно редко. Например, интерактивный каталог просматривается гораздо чаще, чем происходит его обновление. А вот содержимое интерактивной корзины покупок может обновляться довольно часто, поэтому в данном случае уведомления запросов не будут столь полезны.
Уведомления о запросах полезны в тех случаях, когда приложение выдает запросы, имеющие общую структуру и отличающиеся только значениями параметров. Например:
SELECT ProductNumber, Name FROM Production.Product WHERE ListPrice < 300
SELECT ProductNumber, Name FROM Production.Product WHERE ListPrice < 500
В этом случае подписки на оба уведомления разделяют один общий внутренний шаблон, таким образом создавая в SQL Server меньшую дополнительную нагрузку, чем создают две подписки на запросы с разной структурой. Однако обратите внимание на то, что параметры запросов также учитываются. Несмотря на то, что запросы имеют общий шаблон, добавление элемента со значением 350 в поле ListPrice вызывает уведомление о втором запросе, а не о первом.
Если для таблицы определены активные уведомления о запросах, обновления данных в ней становятся более ресурсоемкими, поскольку компонент Database Engine выполняет дополнительную работу, проверяя подписки и при необходимости формируя уведомления. Повторное использование внутренних шаблонов позволяет минимизировать дополнительную нагрузку, приходящуюся на одну подписку. Поэтому уведомления о запросах следует использовать только для тех приложений, которые выполняют запросы с одинаковой структурой. Не стоит использовать их для приложений, выполняющих запросы с разной структурой.
Например, приложение, отображающее элементы каталога в заданном диапазоне цен, выдает запросы с одной и той же структурой. Тогда компонент Database Engine может повторно использовать шаблон для каждого запроса, и в этом случае уведомления о запросах могут повысить производительность. А вот приложение, которое производит подготовку нерегламентированных отчетов, выполняет запросы с изменяющейся структурой. В таком приложении уведомления о запросах использовать не следует.
Database Engine обслуживает внутренний шаблон до тех пор, пока он используется хотя бы одной зарегистрированной подпиской. Компонент Database Engine ограничивает общее количество внутренних шаблонов для каждой таблицы. Как только это ограничение достигнуто, компонент Database Engine перестает регистрировать подписки, которые привели бы к созданию нового шаблона. Вместо этого компонент Database Engine немедленно выдает сообщение, указывающее, что подписку невозможно зарегистрировать.