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.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base 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 |