KB2344600 - CORRECÇÃO: Erro "Non-yielding Scheduler" pode ocorrer quando você usa a função CONTAINSTABLE juntamente com muitos predicados OR e AND no SQL Server 2008 ou no SQL Server 2008 R2

Aplica-se A
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

A Microsoft distribui correções do Microsoft SQL Server 2008 como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 corrigir lançamento. A Microsoft distribui as correções do Microsoft SQL Server 2008 ou SQL Server 2008 R2 como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 ou SQL Server 2008 R2 corrigir lançamento.

Sintomas

Tenha em conta o seguinte cenário:

  • Tem uma consulta de pesquisa de texto completo que utiliza a função CONTAINSTABLE juntamente com muitos predicados OU e E na condição no Microsoft SQL Server 2008 ou no SQL Server 2008 R2. Por exemplo, tem as seguintes 50 operações E: Declare @Keywords varchar(4000) = NULL

    set @Keywords= N'((((((((((((((((((((((((((((((((((((((((((((((((((((
    ("TOKarchitect" OU "architectural")
    AND ("TOKengineer" OR "engineer"))
    AND "gineer") AND ("TOKmechanical" OR "Mechanical"))
    AND ("TOKengineer" OR "Engineering"))
    AND ("TOKelectronic" OR "Electronics")) AND ("TOKengineer" OR "Engineer")) AND ("TOKelectronic" OR "Electronics")) AND ("TOKengineer" OR "Engineering")) AND ("TOKelectric" OR "Electrical")) AND ("TOKengineer" OR "Engineer")) AND ("TOKelectric" OR "Electrical")) AND ("TOKengineer" OR "Engineering")) AND ("TOKcontrol" OR "Control")) AND ("TOKsystem" OR "Systems")) AND ("TOKengineer" OR "Engineer")) AND ("TOKproject" OR "Project")) AND ("TOKmanager" OR "Manager")) AND ("TOKengineer" OR "Engenharia")) E "Esquema") E ("TOKfabric" OU "Fabrico")) E ("TOKengineer" OU "Engenheiro")) AND ("TOKmetallurgist" OU "Metalurgia")) AND ("TOKmetallurgist" OU "Metalúrgico")) AND ("TOKprocess" OR "Processo")) AND ("TOKTechnology" OR "Technology")) AND ("TOKproduct" OR "Production")) AND ("TOKengineer" OR "Engineer")) AND ("TOKuality" OR "Quality")) AND ("TOKengineer" OR "Engineer")) AND ("TOKQuality" OR "Quality")) AND ("TOKcontrol" OR "Control")) AND ("TOKengineer" OR "Engenheiro")) E "Mecatrônica") E ("TOKcivil" OU "Civil")) E ("TOKengineer" OU "Engenheiro")) AND ("TOKcivil" OU "Civil")) AND ("TOKengineer" OU "Engenharia")) AND ("TOKdesign" OU "Design")) AND ("TOKengineer" OR "Engineering")) AND ("TOKdesign" OR "Design")) AND ("TOKengineer" OR "Engineer")) AND ("TOKgraduate" OR "Graduate")) AND ("TOKengineer" OR "Engineer")) AND ("TOKgraduate" OR "Degree")) AND ("TOKengineer" OR "engineering")) AND ("TOKengineer" OR "Engineering")) AND ("TOKgraduate" OU "Graduado")) E ") E NÃO (") E ("TOKRecruitment" OU "Recrutamento")) E ("TOKconsultant" OU "consultor")) AND ("TOKtrainee" OU "trainee")) E ("TOKRecruitment" OU "recrutamento"))'

    selecione * de CONTAINSTABLE(test_table, *, @keywords, 1000)

  • Executa a consulta.

Neste cenário, pode ocorrer um erro "Agendador não produtivo". Além disso, é gerado um ficheiro de mini-despejo na pasta de registo de aplicações do SQL Server 2008 ou SQL Server 2008 R2 e o seguinte erro é registado no ficheiro de registo de erros SQL Server:

Nota

<Servidor de carimbos de data/hora> usando 'dbghelp.dll' versão '4.0.5'

<Time Stamp> Server ***Não é possível obter contexto de thread para spid 0
<Servidor de Carimbos de Data/Hora> *
*******************************************************************************

<Servidor de Carimbos de Data/Hora> *

<Time Stamp> Server * BEGIN STACK DUMP:

<Time Stamp> Server * <Time> spid <SPID>
<Servidor de Carimbos de Data/Hora> *

<Time Stamp> Server * Non-yielding Scheduler

<Servidor de Carimbos de Data/Hora> *

<Servidor de Carimbos de Data/Hora> *
*******************************************************************************

<Pilha do servidor de carimbo de data/hora> A assinatura para a imagem de erro está 0x000000000000030D

<Time Stamp> Server Código de retorno do processo de despejo externo 0x20000001. O processo de despejo externo não retornou erros.

<Time Stamp> Server Process 0:0:0 (0xf94) O 0x00000000817481A0 de trabalho parece não ceder no Scheduler 0. Tempo de criação do tópico: 12925321224306. CPU de thread aproximado usado: kernel 62 ms, usuário 75187 ms. Utilização do processo 98%. Sistema inativo 0%. Intervalo: 76403 ms.

<Time Stamp> Server Process 0:0:0 (0xf94) O 0x00000000817481A0 de trabalho parece não ceder no Scheduler 0. Tempo de criação do tópico: 12925321224306. CPU de thread aproximado usado: kernel 125 ms, usuário 145250 ms. Utilização do processo 98%. Sistema inativo 0%. Intervalo: 148417 ms.

<Time Stamp> Server Process 0:0:0 (0xf94) O 0x00000000817481A0 de trabalho parece não ceder no Scheduler 0. Tempo de criação do tópico: 12925321224306. CPU de thread aproximado usada: kernel 171 ms, usuário 205515 ms. Utilização do processo 98%. Sistema inativo 0%. Intervalo: 209729 ms.

<Time Stamp> Server Process 0:0:0 (0xf94) O 0x00000000817481A0 de trabalho parece não ceder no Scheduler 0. Tempo de criação do tópico: 12925321224306. CPU de thread aproximado usado: kernel 218 ms, usuário 266343 ms. Utilização do processo 98%. Sistema inativo 0%. Intervalo: 271588 ms.

<Time Stamp> Server Process 0:0:0 (0xf94) O 0x00000000817481A0 de trabalho parece não ceder no Scheduler 0. Tempo de criação do tópico: 12925321224306. CPU de thread aproximado usada: kernel 234 ms, usuário 325156 ms. Utilização do processo 97%. Sistema inativo 0%. Intervalo: 333671 ms.
<Time Stamp> Server Process 0:0:0 (0xf94) O 0x00000000817481A0 de trabalho parece não ceder no Scheduler 0. Tempo de criação do tópico: 12925321224306. CPU de thread aproximado usado: kernel 296 ms, usuário 386000 ms. Utilização do processo 97%. Sistema inativo 0%. Intervalo: 396370 ms.

Causa

Este problema ocorre porque o SQL Server 2008 ou o SQL Server 2008 R2 não lança corretamente um agendador.

Resolução

Informações de atualização cumulativa

SQL Server 2008 R2

A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 5. Para obter mais informações sobre como obter este pacote de atualização cumulativa para o SQL Server 2008 R2, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

2438347 pacote de atualização cumulativa 5 para SQL Server 2008 R2 Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 R2 corrigir lançamento. Recomendamos que você considere aplicar o lançamento de correção mais recente que contém esse hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

981356 As compilações SQL Server 2008 R2 lançadas após o lançamento do SQL Server 2008 R2

SQL Server 2008 Service Pack 1

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 10 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre este pacote de atualização cumulativa, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

2279604 Pacote de atualizações cumulativas 10 para SQL Server 2008 Service Pack 1Nota Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 corrigir lançamento. A Microsoft recomenda que você considere aplicar o lançamento de correção mais recente que contém esse hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

970365 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008 Service Pack 1 Os hotfixes do Microsoft SQL Server 2008 são criados para service packs SQL Server específicos. Tem de aplicar uma correção do SQL Server 2008 Service Pack 1 a uma instalação do SQL Server 2008 Service Pack 1. Por padrão, qualquer hotfix fornecido em um SQL Server service pack é incluído no próximo SQL Server service pack.

SQL Server 2008 Service Pack 2

A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 1 para o SQL Server 2008 Service Pack 2. Para obter mais informações sobre este pacote de atualização cumulativa, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

2289254 Atualização cumulativa 1 para SQL Server 2008 Service Pack 2Nota Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 corrigir lançamento. Recomendamos que você considere aplicar o lançamento de correção mais recente que contém esse hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

2402659 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008 Service Pack 2

Solução

Para contornar esse problema, use um dicionário de sinônimos de pesquisa de texto completo para definir os sinônimos do predicado.

Para tal, utilize a função FORMSOF juntamente com o valor DICIONÁRIO de Sinónimos e, em seguida, adicione todas as palavras-chave como parâmetros.

Para o exemplo descrito na seção "Sintomas", a seguir é uma versão atualizada da consulta de exemplo: Selecione * de test_table onde contém(*,'FORMASDE (THESAURUS,"arquitetônico","engenheiro","mecânico","engenharia","eletrônica","engenheiro","elétrico","controle","sistemas","projeto","gerente","fabricação","metalurgia","metalúrgica","processo","design","tecnologia","produção","qualidade","controle","civil","graduado","recrutamento","consultor","estagiário" ,"recrutamento")»)

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".

Referências

Para obter mais informações sobre a função CONTAINSTABLE, visite o seguinte site da Microsoft Developer Network (MSDN):

Informações gerais sobre a função CONTAINSTABLE Para obter mais informações sobre o modelo de manutenção incremental para SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

935897 Um modelo de manutenção incremental está disponível na equipe de SQL Server para fornecer hotfixes para problemas relatados

Para obter mais informações sobre o esquema de nomenclatura para atualizações SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

822499 Novo esquema de nomenclatura para pacotes de atualização de software do Microsoft SQL Server Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

824684 Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft