CORRECÇÃO: Poderá falha concorrente execução do procedimento armazenado que recompila executar todas as declarações

Traduções de Artigos Traduções de Artigos
Artigo: 250506 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
N.º DE BUGS: 55251 (SQLBUG_70)
Expandir tudo | Reduzir tudo

Sintomas

Um procedimento armazenado poderá silenciosamente não conseguir executar todas as instruções contidas se as seguintes condições se verificarem:

  • Várias ligações de acesso estão a executar o mesmo procedimento em simultâneo.

  • É efectuada uma referência a uma tabela temporária criada fora deste procedimento.

  • Uma ou mais instruções que também podem provocar uma recompilação (potencialmente accionada por 'Estatísticas de actualização automática') siga a referência para esta tabela temporária.
Todas as afirmações podem executar para alguns utilizadores executando o procedimento, enquanto outros falharem.

Como contornar

Criar o procedimento com a cláusula WITH RECOMPILAR ou utilizar a cláusula WITH RECOMPILAR quando executar o procedimento.

Ponto Da Situação

Microsoft confirmou que este problema existe no SQL Server 7.0. Este problema foi corrigido dos Estados Unidos Service Pack 2 para o Microsoft SQL Server 7.0. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
254561INF: Como obter o Service Pack 2 para Microsoft SQL Server 7.0 e Microsoft Data Engine (MSDE) 1.0
Para mais informações, contacte o fornecedor de suporte principal.

Mais Informação

Se é efectuada uma referência a uma tabela temporária criada fora do procedimento actual, que declaração e quaisquer instruções subsequentes podem não ser compiladas quando o procedimento é executado pela primeira vez. Isto acontece porque não existem informações são conhecidas sobre o esquema da tabela. Depois de execução atinge essa instrução e os valores de esquema e cardinalidade estão disponíveis, o procedimento é novamente compilado utilizando estas informações. Para minimizar o tempo de compilação, do SQL Server é um "compile parcial" nesta situação e apenas gera um plano de consulta para instruções para esta.

Uma vez que vários utilizadores podem partilhar um plano compilado, SQL Server 7.0 serializes recompilações para garantir que apenas uma das ligações efectua a recompilação. Se as ligações também necessitar de recompilar, aguardam na primeira ligação para concluir a recompilação e retomar a execução no seu passo seguinte.

Se tiver uma situação em que duas ligações estão em várias fases de execução e que acciona a recompilação é primeiro antes da referência para a tabela temporária criada fora do procedimento, deixará de compilar um plano quando atinge essa instrução. Se uma segunda ligação for algures depois e activa também uma recompilação enquanto a primeira ligação é compilar, retoma a execução e incorrectamente acredita que foi executada todas as instruções no plano de.

Se utilizar WITH RECOMPILAR, quando o procedimento é criado ou quando é executado, duas ligações nunca partilham o mesmo plano compilado e nunca irão encontrar esta condição.

Sempre que possível, também é aconselhável não para referenciar uma tabela temporária criada fora do procedimento actual, como requer sempre uma recompilação do procedimento. Outras práticas de programação para procedimentos armazenados podem ser encontradas sob o tópico "Transact-SQL sugestões" em SQL Books Online.

Para determinar novamente quando um procedimento está a ser compilado, pode ver o evento SP:Recompile SQL Profiler.

Propriedades

Artigo: 250506 - Última revisão: 12 de fevereiro de 2014 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbbug kbfix KB250506 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 250506

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com