Erro: é uma diminuição no desempenho quando você freqüentemente cria e descartar tabelas temporárias no SQL Server 2000

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 891553
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Bug #: 472280 (SQL Server 8.0)
Sintomas
Suponha a seguinte situação: você tentar executar uma operação repetida em uma única conexão no Microsoft SQL Server 2000 usando o procedimento a seguir:
  1. Crie uma tabela temporária.
  2. Você executar uma instrução INSERT para inserir dados na tabela temporária usando o procedimento sp_executesql armazenados.
  3. Você descartar a tabela temporária.
Nesse cenário, tempos de desempenho com firmeza podem aumentar. Além disso, desempenho vezes continuam a aumentar, desde que a conexão não será desfeita. Esse problema não ocorre se você usar uma tabela permanente.

Observação Esse problema lento somente a conexão atual e ele ocorre apenas nas tabelas temporárias globais.
Como Contornar
Para contornar este problema, use um dos seguintes métodos:
  • Usar uma instrução TRUNCAMENTO em vez de uma instrução CREATE e um DROP instrução.
  • Use tabelas permanentes em vez de tabelas temporárias.
  • Use uma instrução INSERT diretamente em vez de chamar o procedimento sp_executesql armazenados.

    Observação A chamada para o procedimento sp_executesql armazenado não pode ser codificada em seu aplicativo. No entanto, o procedimento armazenado pode ser adicionado por banco de dados subjacente API. Por exemplo, banco de dados subjacente API pode ser ADO, OLE DB ou ODBC. Você pode usar o SQL Profiler para determinar se o procedimento sp_executesql armazenados foi enviado para o computador que está executando o SQL Server.
  • Execute o script SQL de um aplicativo. Quando você executa o script SQL de um aplicativo, você pode desconectar e reconectar com mais freqüência. Ou, quando você fizer isso, você pode dispor o código dentro de um procedimento armazenado no SQL Server.
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais Informações

Etapas para reproduzir o problema

  1. Clique em Iniciar , aponte para Todos os programas , aponte para Microsoft SQL Server e, em seguida, clique em Query Analyzer .
  2. Faça logon no computador que está executando o SQL Server 2000 no SQL Query Analyzer.
  3. Cole o seguinte código no SQL Query Analyzer:
    use pubsgoset nocount ondeclare @i intset @i = 0declare @tt as datetimeset @tt = getdate()while @i < 100000begin	if @i % 10 = 0 	begin		if exists (select * from tempdb.dbo.sysobjects where id =object_id('tempdb.dbo.#T1'))			drop table #T1		CREATE TABLE #T1(Id int NULL)		end	exec sp_executesql N'Insert into #T1 values(@P1)', N'@P1 int', @i	select @i = @i + 1	if @i % 10000 = 0 and @i > 0	begin		print datediff(ms,@tt,getdate())		select @tt = getdate()	endend
  4. Pressione F5 para executar o código.

    À medida que você executar o código, desempenho diminui.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 891553 - Última Revisão: 12/09/2015 01:59:53 - Revisão: 3.4

Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 64-bit Edition

  • kbnosurvey kbarchive kbmt kbtshoot kbbug KB891553 KbMtpt
Comentários