CORRECÇÃO: A função fn_get_sql devolve texto SQL para a alça na tabela de sistema Sysprocesses

Traduções de Artigos Traduções de Artigos
Artigo: 325607 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo aborda uma correcção funcional para o SQL Server 2000 que implementa as seguintes alterações:
  • A correcção cria uma nova fn_get_sql tabelares função do sistema.
  • A correcção adiciona estas três novas colunas ao final da forma mestre sysprocesses tabela de sistema:
    • sql_handle (binário)
    • stmt_start (int)
    • stmt_end (int)

  • A correcção cria um novo sinalizador de rastreio, o sinalizador de rastreamento 2861.

Resolução

Para resolver este problema, obtenha o service pack mais recente do Microsoft SQL Server 2000. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
290211Como obter o SQL Server 2000 service pack mais recente
Nota A correcção seguinte foi criada antes da disponibilização do Microsoft SQL Server 2000 Service Pack 3.

Ficheiro de correcção

Existe uma correcção para o SQL Server 2000 que implementa a função fn_get_sql .

Contacte o suporte técnico da Microsoft para obter a correcção. A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas na hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   Date         Time      Version    Size              File name
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
Nota Devido a dependências de ficheiros, a correcção ou funcionalidade que contém os ficheiros mais recentes poderão também conter ficheiros adicionais.

importante Se pretender a funcionalidade desta correcção, tem de aplicar uma compilação Sqlservr.exe posterior ou igual a 8.00.652, tem de executar o Sp2_qfe_serv_uni.sql ficheiro incluída esta correcção. Para mais informações, consulte o Readme.txt ficheiro incluída nos ficheiros de correcção.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.Este problema foi corrigido pela primeira vez no Microsoft SQL Server 2000 Service Pack 3.

Mais Informação

Segue-se uma definição e a sintaxe da função de tabelares de sistema para fn_get_sql .

fn_get_sql

Devolve o texto SQL referido para o identificador especificado.

Sintaxe

fn_get_sql ([ @ SqlHandle =] SqlHandle )

Argumentos

[ @ SqlHandle =] SqlHandle

O valor de identificador binário. SqlHandle é binary(20) com não predefinida.

Tabelas devolvidas

Reduzir esta tabelaExpandir esta tabela
nome da coluna tipo de dados Descrição
DBID smallint ID da base de dados. NULL em caso de instruções de SQL ad-hoc.
objectid Int ID do objecto de base de dados. NULL em caso de ad-hoc SQL instruções.
número smallint Número no procedimento agrupamento se agrupados. 0 entradas que não são procedimentos. NULL em caso de instruções de SQL ad-hoc.
encriptado bit Indica se o objecto é encriptado:
0 = Não encriptado
1 = Encriptada
texto texto Texto SQL. NULL em caso de objectos encriptados.

Comentários

Fn_get_sql é uma sistema tabelares função que devolve o texto SQL para SQLHANDLE especificado. Pode obter um SQLHANDLE válido de coluna da tabela de sistema sysprocesses sql_handle .

Se passar um identificador que já não existe na cache, fn_get_sql devolverá um conjunto de resultado vazio. Se passar um identificador inválido, cancelará a secção e receberá a seguinte mensagem de erro:
Servidor: Erro 569, 16 de nível 1 de estado, fn_get_sql procedimento, linha 12 O parâmetro passado para fn_get_sql era inválido.
SQL Server não é possível colocar em cache algumas instruções de Transact-SQL, tais como instruções de operação em massa e instruções com cadeias literais superiores a 8 KB. Não são recuperáveis através da função fn_get_sql alças para essas instruções.

A coluna de texto é filtrada para texto que pode conter palavras-passe. Reveja o tópico "Limitar rastreios" no SQL Server Books Online para obter detalhes sobre relacionadas com segurança procedimentos armazenados que não monitorizados.

Permissões

Apenas os membros da função de servidor fixa sysadmin possam executar a função fn_get_sql .

Exemplos

As informações devolvidas pela função fn_get_sql semelhante ao comando DBCC INPUTBUFFER. Utilize a função fn_get_sql em situações em que é limitado, como, por exemplo, DBCC INPUTBUFFER:
  • Quando os eventos ter mais de 255 caracteres.
  • Quando tem de devolver o mais elevado nível de aninhamento actual de um procedimento armazenado. Por exemplo, terá dois procedimentos armazenados são denominados sp_1 e sp_2 . Se sp_1 armazenados chamadas de procedimento sp_2 procedimento armazenado e obter o identificador da tabela de sistema sysprocesses enquanto sp_2 está em execução, a função fn_get_sql devolverá informações sobre sp_2 . Além disso, a função fn_get_sql devolve o procedimento armazenado inteiramente no nível de aninhamento actual mais elevado.
Os administradores de base de dados podem utilizar a função fn_get_sql para ajudar a diagnosticar o problema processos. Depois de um administrador identifica um processo do servidor problema ID (SPID), o administrador pode obter o SQLHANDLE para esse SPID e, em seguida, chamar a função fn_get_sql com a alça e utilizar os deslocamentos de início e de fim para determinar o texto SQL do problema SPID. Por exemplo:
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
pode também utilizar a função fn_get_sql continuamente monitorizar o servidor. Por exemplo, uma ferramenta de cliente que obtém periodicamente o SQLHANDLE e a declaração de início e fim desloca da tabela de sistema sysprocesses . A ferramenta mantém uma cache de texto SQL, com o identificador SQL como a chave exclusiva e os resultados da função fn_get_sql como o valor. Para cada linha no conjunto de linhas sysprocesses da tabela do sistema, a ferramenta procura o texto na respectiva cache baseado o SQLHANDLE. Se o texto não estiver na cache da ferramenta, a ferramenta chama, em seguida, a função de fn_get_sql para obter o texto e guardá-lo na respectiva cache.

Sinalizador 2861 de rastreio

Sinalizador de rastreamento 2861 indica ao SQL Server que tenha zero planos de custo em cache, SQL Server normalmente seria não cache (tais como consultas ad-hoc simples conjunto de instruções, transacção de consolidação e outros).
  • Se o sinalizador de rastreamento 2861 estiver activado, a função fn_get_sql pode devolver o texto SQL para actividades que têm zero planos de custo. Se o sinalizador de rastreamento 2861 estiver desactivado, a função fn_get_sql não pode devolver o texto SQL para as actividades com zero planos de custo.
  • Por predefinição, o sinalizador de rastreamento 2861 é desactivada quando aplicar esta correcção.

Comentários

Aumenta o número de objectos na cache do procedimento quando o sinalizador de rastreamento 2861 está activado. Uma vez que os objectos adicionais são tão pequenos, verá um pequeno aumento na memória, que é ocupada pela cache de procedimento.

SQL Server 2000 tem um algoritmo eficiente para localizar qualquer plano de execução existentes em qualquer instrução SQL especificada. No entanto, devido ao número maior de objectos armazenados na cache do procedimento, é possível que o tempo necessário para o motor relacional procurar um plano existente poderá diminuir e poderá prejudicar o desempenho do sistema.

Normalmente, nos sistemas onde o tamanho de base de dados é muito maior do que o tamanho da memória, o sistema está em alguns pressão de memória esperado. Se a pressão de memória que é necessária para objectos de memória, o processo de lazywriter irá deallocate objectos na cache do procedimento. Isto irá ligar o tamanho da cache procedimento e irá minimizar os efeitos adversos potenciais desta alteração.

No entanto, nos sistemas onde o tamanho de memória é superior ao tamanho da base de dados, o sistema é normalmente não sob pressão de memória. Por conseguinte, não são desatribuídos objectos a partir da cache do procedimento devido a necessidades de memória e o tamanho da cache procedimento pode aumentar a um ponto onde-irá afectar negativamente o desempenho.

Se ter tido um efeito adverso no desempenho do sistema, siga estes passos:
  1. Desactive o sinalizador de rastreamento 2861.
  2. Execute o comando DBCC FREEPROCCACHE do analisador de consultas. Não é necessário reiniciar o SQL Server.

Propriedades

Artigo: 325607 - Última revisão: 27 de setembro de 2005 - Revisão: 5.3
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix KB325607 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: 325607

Submeter comentários

 

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