Partilhar via


Classe de evento de aviso de hash

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

A classe de evento de Aviso de Hash pode ser usada para monitorizar quando ocorre uma recursão de hash ou cessação do hash (resgate de hash) durante uma operação de hash.

A recursão de hash ocorre quando a entrada de compilação não cabe na memória disponível, resultando na divisão da entrada em múltiplas partições que são processadas separadamente. Se alguma destas partições ainda não caber na memória disponível, é dividida em subpartições, que também são processadas separadamente. Este processo de divisão continua até que cada partição cabe na memória disponível ou até que o nível máximo de recursão seja atingido (apresentado na coluna de dados IntegerData).

O resgate de hash ocorre quando uma operação de hashing atinge seu nível máximo de recursão e muda para um plano alternativo para processar os dados particionados restantes. O resgate de hash geralmente ocorre devido a dados enviesados.

A recursão de hash e o resgate de hash causam redução do desempenho no seu servidor. Para eliminar ou reduzir a frequência de recursão de hash e resgates, faça uma das seguintes opções:

  • Certifique-se de que existem estatísticas nas colunas que estão a ser juntadas ou agrupadas.

  • Se existirem estatísticas nas colunas, atualize-as.

  • Usa um tipo diferente de junção. Por exemplo, use uma junção MERGE ou LOOP, se apropriado.

  • Aumentar a memória disponível no computador. A recursão de hash ou bailout ocorre quando não há memória suficiente para processar as consultas no local e estas precisam de ser transferidas para o disco.

Criar ou atualizar as estatísticas da coluna envolvida na junção é a forma mais eficaz de reduzir o número de recursão de hash ou resgates que ocorrem.

Observação

Os termos grace hash join e recursive hash join também são usados para descrever o hash bailout.

Importante

Para determinar onde ocorre o evento de Aviso de Hash quando o otimizador de consultas gera um plano de execução, deve também recolher uma classe de evento Showplan no rastreio. Pode escolher qualquer uma das classes de evento Showplan, exceto as classes de evento Showplan Text e Showplan Text (Unencoded), que não retornam um ID de nó. Os IDs de nós nos Showplans identificam cada operação que o otimizador de consultas realiza quando gera um plano de execução de consulta. Estas operações são chamadas operadores, e cada operador num Showplan tem um ID de Nodo. A coluna ObjectID para eventos de Aviso de Hash corresponde ao ID do Nó nos Showplans, para que possa determinar qual operador, ou operação, está a causar o erro.

Colunas de Dados da Classe de Evento de Aviso de Hash

Nome da coluna de dados Tipo de dados Description ID da coluna Filtrável
ApplicationName nvarchar Nome do aplicativo cliente que criou a conexão com uma instância do SQL Server. Esta coluna é preenchida com os valores passados pela aplicação em vez do nome apresentado do programa. 10 Yes
ClientProcessID int ID atribuído pelo computador host ao processo em que o aplicativo cliente está sendo executado. Esta coluna de dados é preenchida se o cliente fornecer um ID de processo do cliente. 9 Yes
Base de Dados int ID da base de dados especificado pela instrução da base de dados USE ou pela base de dados padrão se não tiver sido emitida a instrução USE para uma dada instância. O SQL Server Profiler exibirá o nome do banco de dados se a coluna de dados ServerName for capturada no rastreamento e o servidor estiver disponível. Determine o valor de um banco de dados usando a função DB_ID. 3 Yes
DatabaseName nvarchar Nome do banco de dados no qual a instrução de usuário está sendo executada. 35 Yes
EventClass int Tipo de evento = 55. 27 Não
Sequência de Eventos int Sequência de um determinado evento dentro da solicitação. 51 Não
EventSubClass int Tipo de subclasse de evento.

0=Recursão

1=Resgate
21 Yes
GroupID int ID do grupo de carga de trabalho onde o evento Rastreamento SQL é acionado. 66 Yes
Nome do Anfitrião nvarchar Nome do computador no qual o cliente está sendo executado. Esta coluna de dados é preenchida se o cliente fornecer o nome do anfitrião. Para determinar o nome do anfitrião, use a função HOST_NAME. 8 Yes
IntegerData int Nível de recursão (apenas recursão por hash). 25 Yes
IsSystem int Indica se o evento ocorreu em um processo do sistema ou em um processo do usuário. 1 = sistema, 0 = utilizador. 60 Yes
Nome de login nvarchar Nome do login do utilizador (seja o login de segurança do SQL Server ou as credenciais de login do Windows na forma <de DOMÍNIO>\<nome> de utilizador). 11 Yes
LoginSid image Número de identificação de segurança (SID) do utilizador com sessão iniciada. Pode encontrar esta informação na vista de catálogo sys.server_principals. Cada SID é único para cada login no servidor. 41 Yes
NTDomainName nvarchar Domínio do Windows ao qual o usuário pertence. 7 Yes
NTUserName nvarchar Nome de usuário do Windows. 6 Yes
ID do objeto int ID de nó da raiz da equipa de hash envolvida na repartição. Corresponde ao ID do Nó nos Showplans. 22 Yes
ID do Pedido int ID do pedido que contém a declaração. 49 Yes
Nome do servidor nvarchar Nome da instância do SQL Server que está a ser rastreada. 26
SessionLoginName nvarchar Nome de login do usuário que originou a sessão. Por exemplo, se se ligar ao SQL Server usando o Login1 e executar uma instrução como Login2, o SessionLoginName mostra o Login1 e o LoginName mostra o Login2. Esta coluna exibe os logons do SQL Server e do Windows. 64 Yes
SPID int ID da sessão em que o evento ocorreu. 12 Yes
StartTime datetime Hora de início do evento, se disponível. 14 Yes
ID da transação bigint ID atribuída pelo sistema da transação. 4 Yes
XactSequence bigint Token que descreve a transação atual. 50 Yes

Ver também

sp_trace_setevent (Transact-SQL)
Juntas