Classe di evento Hash Warning
Data aggiornamento: 5 dicembre 2005
È possibile utilizzare la classe di evento Hash Warning per monitorare il momento in cui si verifica una ricorsione di hash o l'interruzione dell'hashing (hash bailout) durante un'operazione di hashing.
La ricorsione di hash si verifica quando la memoria disponibile non è sufficiente per l'input di creazione, che viene quindi suddiviso in più partizioni elaborate separatamente. Se la memoria disponibile non è sufficiente per una delle partizioni, la partizione viene suddivisa ulteriormente in sottopartizioni che vengono elaborate separatamente. Il processo di suddivisione continua fino a quando non vengono inserite nella memoria disponibile tutte le partizioni o non viene raggiunto il livello massimo di ricorsione (visualizzato nella colonna di dati IntegerData).
L'evento hash bailout si verifica quando un'operazione di hashing raggiunge il livello massimo di ricorsione e ricorre a un piano alternativo per l'elaborazione dei dati partizionati rimanenti. È in genere causato da dati asimmetrici.
Ricorsione di hash e hash bailout provocano una riduzione delle prestazioni del server. Per eliminare ricorsioni di hash e hash bailout o ridurne la frequenza, eseguire una delle operazioni seguenti:
- Verificare che siano disponibili statistiche per le colonne da unire in join o raggruppare.
- Se esistono statistiche per le colonne, aggiornarle.
- Utilizzare un tipo di join diverso. Ad esempio, utilizzare un join MERGE o LOOP, se appropriato.
- Aumentare la memoria disponibile nel computer. Ricorsione di hash e hash bailout si verificano quando non è disponibile memoria sufficiente per l'elaborazione delle query e si rende necessaria la scrittura su disco.
La creazione o l'aggiornamento delle statistiche per le colonne interessate dall'operazione di join è la procedura più efficace per ridurre il numero di ricorsioni di hash e hash bailout.
[!NOTA] Per descrivere l'hash bailout sono utilizzati anche i termini grace hash join e hash join ricorsivo. Per ulteriori informazioni, vedere Informazioni sugli hash join.
Importante: |
---|
Per determinare la posizione in cui si verifica l'evento Hash Warning quando Query Optimizer genera un piano di esecuzione, è inoltre consigliabile acquisire una classe di evento Showplan nella traccia. È possibile scegliere qualsiasi classe di evento Showplan, ad eccezione delle classi di evento Showplan Text e Showplan Text (Unencoded) che non restituiscono un ID nodo. All'interno delle classi di evento Showplan gli ID nodo identificano tutte le operazioni eseguite da Query Optimizer durante la generazione di un piano di esecuzione delle query. Queste operazioni vengono definite operatori e a ogni operatore in una classe di evento Showplan è associato un ID di nodo. La colonna ObjectID per gli eventi Hash Warning corrisponde all'ID di nodo contenuto nelle classi di evento Showplan, in modo che sia possibile determinare l'operatore o l'operazione che causa l'errore. Per ulteriori informazioni sulle classi di evento Showplan, vedere Visualizzazione dei piani di esecuzione utilizzando le classi di eventi di SQL Server Profiler. |
Colonne di dati della classe di evento Hash Warning
Nome colonna di dati | Tipo di dati | Descrizione | ID colonna | Filtrabile |
---|---|---|---|---|
ApplicationName |
nvarchar |
Nome dell'applicazione client che ha creato la connessione a un'istanza di SQL Server. Questa colonna viene popolata con i valori passati dall'applicazione anziché con il nome visualizzato del programma. |
10 |
Sì |
ClientProcessID |
int |
ID assegnato dal computer host al processo in cui è in esecuzione l'applicazione client. Questa colonna di dati viene popolata se il client fornisce l'ID del processo client. |
9 |
Sì |
DatabaseID |
int |
ID del database specificato nell'istruzione di database USE oppure ID del database predefinito, se per una determinata istanza non viene eseguita un'istruzione di database USE. In SQL Server Profiler viene visualizzato il nome del database se la colonna di dati ServerName viene acquisita nella traccia e il server è disponibile. È possibile determinare il valore per un database utilizzando la funzione DB_ID. |
3 |
Sì |
DatabaseName |
nvarchar |
Nome del database nel quale viene eseguita l'istruzione dell'utente. |
35 |
Sì |
EventClass |
int |
Tipo di evento = 55. |
27 |
No |
EventSequence |
int |
Sequenza di un determinato evento nella richiesta. |
51 |
No |
EventSubClass |
int |
Tipo di sottoclasse di evento. 0=Ricorsione 1=Bailout |
21 |
Sì |
HostName |
nvarchar |
Nome del computer in cui è in esecuzione il client. Questa colonna di dati viene popolata se il client fornisce il nome host. Per determinare il nome host, utilizzare la funzione HOST_NAME. |
8 |
Sì |
IntegerData |
int |
Livello di ricorsione (solo ricorsione di hash). |
25 |
Sì |
IsSystem |
int |
Indica se l'evento si è verificato in un processo di sistema o in un processo utente. 1 = sistema, 0 = utente. |
60 |
Sì |
LoginName |
nvarchar |
Nome dell'account di accesso dell'utente (account di accesso di protezione di SQL Server o credenziali di accesso di Windows nel formato <DOMAIN>\<username>). |
11 |
Sì |
LoginSid |
image |
ID di protezione (SID) dell'utente connesso. Tali informazioni sono disponibili nella tabella syslogins del database master. Il SID è univoco per ogni account di accesso nel server. |
41 |
Sì |
NTDomainName |
nvarchar |
Dominio di Windows a cui appartiene l'utente. |
7 |
Sì |
NTUserName |
nvarchar |
Nome utente di Windows. |
6 |
Sì |
ObjectID |
int |
ID del nodo principale del gruppo di hash coinvolto nella ripartizione, Corrisponde al nodo di ID nelle classi di evento Showplan. |
22 |
Sì |
RequestID |
int |
ID della richiesta contenente l'istruzione. |
49 |
Sì |
ServerName |
nvarchar |
Nome dell'istanza di SQL Server tracciata. |
26 |
|
SessionLoginName |
nvarchar |
Nome dell'account di accesso dell'utente che ha avviato la sessione. Ad esempio, se si attiva la connessione a SQL Server con l'account di accesso Login1 e si esegue un'istruzione con l'account di accesso Login2, SessionLoginName indica Login1 e LoginName indica Login2. In questa colonna vengono visualizzati sia gli account di accesso di SQL Server che quelli di Windows. |
64 |
Sì |
SPID |
int |
ID della sessione in cui si è verificato l'evento. |
12 |
Sì |
StartTime |
datetime |
Ora di inizio dell'evento, se disponibile. |
14 |
Sì |
TransactionID |
bigint |
ID della transazione assegnato dal sistema. |
4 |
Sì |
XactSequence |
bigint |
Token utilizzato per descrivere la transazione corrente. |
50 |
Sì |
Vedere anche
Concetti
Altre risorse
Monitoraggio di eventi
sp_trace_setevent (Transact-SQL)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
5 dicembre 2005 |
|