KB2344600 - ИСПРАВЛЕНО: ошибка "Non-yielding Scheduler" может возникать при использовании функции CONTAINSTABLE вместе со многими предикатами OR и AND в SQL Server 2008 или SQL Server 2008 R2

Применяется к
SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Workgroup SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Workgroup

Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 в виде одного загружаемого файла. Поскольку исправления являются накопительными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008. Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 или SQL Server 2008 R2 в виде одного загружаемого файла. Поскольку исправления являются накопительными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 или SQL Server 2008 R2.

Проблема

Рассмотрим следующий сценарий.

  • У вас есть полнотекстовый поисковый запрос, в котором используется функция CONTAINSTABLE вместе со многими предикатами OR и AND в условии в Microsoft SQL Server 2008 или SQL Server 2008 R2. Например, у вас есть следующие операции 50 И: Объявление @Keywords varchar(4000) = NULL

    установить @Keywords= N'((((((((((((((((((((((((((((((((((((((((((((((((((((
    ("TOKarchitect" ИЛИ "architectural")
    И ("TOKинженер" ИЛИ "инженер"))
    И "gineer") И ("TOKmechanical" OR "Mechanical"))
    И ("TOKинженер" ИЛИ "Инженерия"))
    И ("TOKelectronic" ИЛИ "Electronics")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKelectronic" ИЛИ "Электроника")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKelectric" ИЛИ "Инженер")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKelectric" ИЛИ "Электрика")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKcontrol" ИЛИ "Control")) И ("TOKsystem" ИЛИ "Системы")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKproject" ИЛИ "Project")) И ("TOKmanager" ИЛИ "Manager")) И ("TOKengineer" OR "Control")) И ("TOKengineer" OR "Systems")) И ("TOKengineer" ИЛИ "Engineer")) И ("TOKproject" ИЛИ "Project")) И ("TOKmanager" OR "Manager")) И ("TOKengineer" OR "Control")) И ("TOKengineer" OR "Systems")) И ("TOKengineer" OR "Engineer")) И ("TOKengineer" OR "Engineer")) "Инжиниринг")) И "Схема") И ("ТОКпроизводство" ИЛИ "Производство")) И ("ТОКинженер" ИЛИ "Инженер")) И ("ТОКметаллург" ИЛИ "Металлург")) И ("ТОКметаллург" ИЛИ "Металлург")) И ("ТОКметаллург" ИЛИ "Металлург")) И ("ТОКпроцесс" ИЛИ "Процесс")) И ("ТОКехнология" ИЛИ "Технология")) И ("ТОКпродукт" ИЛИ "Производство")) И ("ТОКинженер" ИЛИ "Инженер")) И ("ТОКуальность" ИЛИ "Качество")) И ("ТОКинженер" ИЛИ "Инженер")) И ("ТОКинженер" ИЛИ "Инженер")) И ("ТОКуальность" ИЛИ "Качество")) И ("ТОКуализация" ИЛИ "Качество")) И ("ТОКуправление" ИЛИ "Контроль")) И ("ТОКинженер" ИЛИ "Качество")) "Инженер")) И "Мехатроника") И ("TOKcivil" ИЛИ "Civil")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKcivil" ИЛИ "Инженер")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKdesign" ИЛИ "Проектирование")) И ("TOKинженер" ИЛИ "Проектирование")) И ("TOKdesign" ИЛИ "Проектирование")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKинженер" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TOKgraduate" ИЛИ "Инженер")) И ("TO OR "Graduate")) AND ") ANDNOT (") AND ("TOKRecruitment" OR "Recruitment")) AND ("TOKconsultant" OR "consultant")) AND ("TOKtrainee" OR "trainee")) AND ("TOKRecruitment" OR "recruitment"))'

    select * from CONTAINSTABLE(test_table, *, @keywords, 1000)

  • Вы выполняете запрос.

В этом случае может возникнуть ошибка "Non-yielding Scheduler". Кроме того, мини-файл дампа создается в папке журнала приложений SQL Server 2008 или SQL Server 2008 R2, а следующая ошибка регистрируется в файле журнала ошибок SQL Server:

Примечание

<Сервер меток> времени с использованием «dbghelp.dll» версии «4.0.5»

<Сервер меток> времени ***Не удалось получить контекст потока для spid 0
<Сервер меток> времени *
*******************************************************************************

<Сервер меток> времени *

<Сервер меток> времени * НАЧАЛО ДАМПА СТЕКА:

<Сервер меток> времени * <Time> spid <SPID>
<Сервер меток> времени *

<Сервер меток> времени * Планировщик, не возвращающий

<Сервер меток> времени *

<Сервер меток> времени *
*******************************************************************************

<Подпись стека сервера метки> времени для дампа 0x000000000000030D

<Сервер меток> времени Внешний процесс дампа Код возврата 0x20000001. Внешний процесс дампа не вернул ошибок.

<Time Stamp> Server Process 0:0:0 (0xf94) Worker 0x00000000817481A0, по-видимому, не уступает при планировщике 0. Время создания цепочки: 12925321224306. Приблизительно ЦП потока Используется: ядро 62 мс, пользователь 75187 мс. Коэффициент использования технологического процесса 98%. Простои системы 0 %. Интервал: 76403 мс.

<Time Stamp> Server Process 0:0:0 (0xf94) Worker 0x00000000817481A0, по-видимому, не уступает при планировщике 0. Время создания цепочки: 12925321224306. Приблизительно ЦП потока Используется: ядро 125 мс, пользователь 145250 мс. Коэффициент использования технологического процесса 98%. Простои системы 0 %. Интервал: 148417 мс

<Time Stamp> Server Process 0:0:0 (0xf94) Worker 0x00000000817481A0, по-видимому, не уступает при планировщике 0. Время создания цепочки: 12925321224306. Приблизительно ЦП потока Используется: ядро 171 мс, пользователь 205515 мс. Коэффициент использования технологического процесса 98%. Простои системы 0 %. Интервал: 209729 мс

<Time Stamp> Server Process 0:0:0 (0xf94) Worker 0x00000000817481A0, по-видимому, не уступает при планировщике 0. Время создания цепочки: 12925321224306. Приблизительно ЦП потока Используется: ядро 218 мс, пользователь 266343 мс. Коэффициент использования технологического процесса 98%. Простои системы 0 %. Интервал: 271588 мс

<Time Stamp> Server Process 0:0:0 (0xf94) Worker 0x00000000817481A0, по-видимому, не уступает при планировщике 0. Время создания цепочки: 12925321224306. Приблизительно ЦП потока Используется: ядро 234 мс, пользователь 325156 мс. Коэффициент использования технологического процесса 97%. Простои системы 0 %. Интервал: 333671 мс
<Time Stamp> Server Process 0:0:0 (0xf94) Worker 0x00000000817481A0, по-видимому, не уступает при планировщике 0. Время создания цепочки: 12925321224306. Приблизительно ЦП потока Используется: ядро 296 мс, пользователь 386000 мс. Коэффициент использования технологического процесса 97%. Простои системы 0 %. Интервал: 396370 мс.

Причина

Эта проблема возникает из-за того, что SQL Server 2008 или SQL Server 2008 R2 неправильно выпускает планировщик.

Решение

Сведения о накопительном пакете обновления

SQL Server 2008 R2

Исправление этой проблемы впервые выпущено в накопительном пакете обновления 5. Для получения дополнительной информации о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, откройте статью со следующим номером в базе знаний Майкрософт:

Накопительный пакет обновления 2438347 5 для SQL Server 2008 R2 Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые вошли в предыдущий выпуск исправления SQL Server 2008 R2. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2

SQL Server 2008 с пакетом обновления 1 (SP1)

Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 10 для SQL Server 2008 с пакетом обновления 1. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:

2279604 Накопительный пакет обновления 10 для SQL Server 2008 с пакетом обновления 1Примечание Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 г. Корпорация Майкрософт рекомендует рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

970365 Сборки SQL Server 2008 г., выпущенные после выпуска SQL Server 2008 с пакетом обновления 1 (SP1) Исправления для Microsoft SQL Server 2008 предназначены для определенных пакетов обновления SQL Server. Необходимо установить исправление для SQL Server 2008 с пакетом обновления 1 (SP1) для установки SQL Server 2008 с пакетом обновления 1. По умолчанию все исправления, предоставляемые в пакете обновления для SQL Server, входят в следующий пакет обновления для SQL Server.

SQL Server 2008 с пакетом обновления 2 (SP2)

Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 1 для SQL Server 2008 с пакетом обновления 2. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:

2289254 Накопительный пакет обновления 1 для SQL Server 2008 с пакетом обновления 2 (SP2) Так как сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые вошли в предыдущий выпуск исправления SQL Server 2008 г. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

2402659 Сборки SQL Server 2008 г., выпущенные после выпуска SQL Server 2008 с пакетом обновления 2 (SP2)

Временное решение

Чтобы обойти эту проблему, используйте полнотекстовый тезаурус поиска для определения синонимов сказуемого.

Для этого используйте функцию FORMSOF вместе со значением ТЕЗАУРУС, а затем добавьте все ключевые слова в качестве параметров.

Для примера, описанного в разделе "Симптомы", ниже приведена обновленная версия примера запроса: Выберите * из test_table, где Содержит(*,'ФОРМЫИЗ (ТЕЗАУРУС,"архитектурный","инженер","механик","инженер","инженер","электроника","инженер","электротехника","управление","системы","проект","менеджер","производство","металлургия","металлург","процесс","проектирование","технология","производство","качество","контроль","гражданский","выпускник","подбор персонала","консультант","стажер" ,"вербовка")')

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Ссылки

Дополнительные сведения о функции CONTAINSTABLE см. на следующем веб-сайте Microsoft Developer Network (MSDN):

Общие сведения о функции CONTAINSTABLE Дополнительные сведения о модели добавочного обслуживания для SQL Server см. в следующей статье базы знаний Майкрософт:

935897 Команда SQL Server предоставляет модель добавочного обслуживания для предоставления исправлений для обнаруженных проблем

Дополнительные сведения о схеме именования для обновлений SQL Server см. в следующей статье базы знаний Майкрософт:

822499 Новая схема именования пакетов обновления программного обеспечения Microsoft SQL Server Дополнительные сведения о терминологии обновления программного обеспечения см. в следующей статье базы знаний Майкрософт:

824684 Стандартные термины, используемые при описании обновлений программного обеспечения Майкрософт