Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Applies to:SQL Server
Details
| Attribute | Value |
|---|---|
| Product Name | SQL Server |
| Event ID | 2814 |
| Event Source | MSSQLSERVER |
| Component | SQLEngine |
| Symbolic Name | PR_POSSIBLE_INFINITE_RECOMPILE |
| Message Text | Uma possível recompilação infinita foi detetada para SQLHANDLE %hs, PlanHandle %hs, iniciando o offset %d, terminando o offset %d. A última razão de recompilação foi %d. |
Explanation
Uma ou mais instruções fizeram com que o lote de consulta fosse recompilado pelo menos 50 vezes. A instrução especificada deve ser corrigida para evitar novas recompilações.
A tabela a seguir lista os motivos para a recompilação.
| Reason code | Description |
|---|---|
| 1 | Schema changed |
| 2 | Statistics changed |
| 3 | Deferred compile |
| 4 | Definir alteração de opção |
| 5 | Tabela temporária alterada |
| 6 | Conjunto de linhas remoto alterado |
| 7 | Para permissões de navegação alteradas |
| 8 | Ambiente de notificação de consulta alterado |
| 9 | PartitionView changed |
| 10 | Opções do cursor alteradas |
| 11 | Opção (recompilar) solicitada |
| 12 | Plano parametrizado lavado |
| 13 | Linearização do plano de teste |
| 14 | Plano que afeta a versão do banco de dados alterada |
| 15 | Plano do Repositório de Consultas forçando a política alterada |
| 16 | Falha ao forçar o plano do Repositório de Consultas |
| 17 | Loja de Consultas sem o plano |
| 18 | A execução intercalada exigiu recompilação |
| 19 | Não é uma recompilação |
| 20 | Sugestões do Repositório de Consultas alteradas |
| 21 | Falha no aplicativo de dicas do Repositório de Consultas |
| 22 | Recompilação do Repositório de Consultas para capturar a consulta do cursor |
| 23 | Recompilando para limpar o plano de despachante multiplano |
Para exibir todos os códigos de compilação, execute a seguinte consulta de exibição de gerenciamento dinâmico:
SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';
User action
Exiba a instrução que está causando a recompilação executando a consulta a seguir. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. As
database_namecolunas eobject_namesãoNULLpara declarações ad hoc e preparadas Transact-SQL.SELECT DB_NAME(st.dbid) AS database_name, OBJECT_NAME(st.objectid) AS object_name, st.text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000 /* replace the 0x01000600B... value with the actual sql_handle */ ) AS st WHERE qs.statement_start_offset = 123 /* replace 123 with actual starting_offset value */ AND qs.statement_end_offset = 456 /* replace 456 with actual ending_offset value */ AND qs.plan_handle = 0x06000100A27E7C1FA821B10600; /* replace 0x06000100A27E7C1FA821B10600 with actual plan_handle value */Com base na descrição do código de motivo, modifique a instrução, o lote ou o procedimento para evitar recompilações. Por exemplo, um procedimento armazenado pode conter uma ou mais
SETinstruções. Estas declarações devem ser retiradas do procedimento.Para obter mais exemplos de causas e resoluções de recompilação, consulte Compilação em lote, recompilação e problemas de cache de plano no SQL Server 2005. Para obter mais informações sobre recompilações, consulte Recompilar planos de execução.
Se o problema persistir, contacte os Serviços de Apoio ao Cliente da Microsoft.