Автор — Pinal Dave
Сегодня у нас очень интересная тем, сегодня мы поговорим о том типе ожиданий, о котором меня часто спрашивают, а именно о ожиданиях Preemptive. Чтобы получить текущие ожидания на вашем сервере, воспользуйтесь скриптом по ссылке Статистика и виды ожиданий. День № 4
Прежде чем мы продолжим, предлагаю рассмотреть поближе ожидания PREEMPTIVE и Non-PREEMPTIVE в SQL Server.
PREEMPTIVE: Пока SQL Server выполняет задачу, операционная система прерывает (interrupts) её. Это приводит к тому, что SQL Server непреднамеренно переключается на выполнение более приоритетных задач. Данное поведение плохо сказывается на SQL Server. Ожидания типа PREEMPTIVE могут существенно снизить производительность и должны быть исследованы.
Non-PREEMPTIVE: SQL Server самостоятельно управляет планированием потоков. Когда SQL Server делает это вместо операционной системы, он устанавливает свой собственный приоритет.
В более ранних версиях SQL Server не было ожидания Non-PREEMPTIVE и статус задачи помечался как SUSPENDED. В SQL Server 2005 ожидания PREEMPTIVE, так же не были представлены и помечались как RUNNING. Начиная с 2008 данные виды ожиданий были добавлены.
Сейчас, SQL Server по-умолчанию работает в Non-Preemptive mode и работает хорошо. Когда запускается CLR, расширенные хранимые процедуры и другие внешние компоненты, они работают в Preemptive mode, создавая соответствующий тип ожиданий.
Есть множество типов ожиданий Preemptive, если они имеют высокие значения на вашем сервере, я настоятельно рекомендую изучить их и выявить причину.
Заметка: Представленная тут информация является исключительно моим опытом. Я настаиваю на том, чтобы вы читали Books On-Line. Все мои рассуждения о ожиданиях носят исключительно общий характер и варьируются от системы к системе. Прежде чем использовать это на рабочем сервере, рекомендую провести тестирование на сервере разработки.