Classe d'événements Hash Warning
La classe d'événements Hash Warning peut être utilisée pour analyser une récurrence de hachage ou une cessation de hachage (interruption de hachage) qui s'est produite lors d'une opération de hachage.
Une récurrence de hachage se produit lorsque l'entrée de construction n'est pas adaptée à la mémoire disponible, ce qui entraîne une fragmentation de l'entrée en plusieurs parties traitées séparément. Si l'une de ces parties n'est toujours pas adaptée à la mémoire disponible, elle est à nouveau fragmentée en sous-parties, également traitées séparément. Ce processus de fragmentation se poursuit jusqu'à ce que toutes les parties soient adaptées à la mémoire disponible ou jusqu'à ce que le niveau maximal de récursivité soit atteint (affiché dans la colonne de données IntegerData).
L'interruption de hachage a lieu lorsqu'une opération de hachage atteint son niveau maximal de récursivité et se décale à un plan auxiliaire pour traiter les données partitionnées restantes. L'interruption de hachage se produit généralement en raison de données rétrécies.
La récurrence de hachage et l'interruption de hachage entraînent une réduction des performances de votre serveur. Pour supprimer ou réduire la fréquence des récurrences et interruptions de hachage, effectuez l'une des opérations suivantes :
Assurez-vous qu'il existe des statistiques sur les colonnes qui sont jointes ou groupées.
S'il existe des statistiques sur les colonnes, mettez-les à jour.
Utilisez un type de jointure différent. Utilisez, par exemple, une jointure MERGE ou LOOP à la place, le cas échéant.
Augmentez la quantité de mémoire disponible de l'ordinateur. La récurrence ou l'interruption de hachage se produit lorsque la quantité de mémoire s'avère insuffisante pour traiter les requêtes en place et qu'elles doivent déborder du disque.
La création ou la mise à jour de statistiques sur la colonne impliquée dans la jointure s'avère le moyen le plus efficace pour réduire le nombre de récurrences ou d'interruptions de hachage se produisant.
[!REMARQUE]
Les termes jointure de hachage progressive et jointure de hachage récursive servent également à décrire une interruption de hachage.
Important
Pour déterminer l'emplacement où se produit l'événement Hash Warning lorsque l'optimiseur de requête génère un plan d'exécution, vous pouvez également recueillir une classe d'événements Showplan dans la trace. Vous pouvez choisir n'importe quelle classe d'événements Showplan à l'exception des classes d'événements Showplan Text et Showplan Text (Unencoded), qui ne retournent aucun ID de nœud. Les ID de nœud dans les plans d'exécution Showplan identifient chaque opération effectuée par l'optimiseur de requête lorsqu'il crée un plan d'exécution de requête. Ces opérations sont appelées opérateurs, et chaque opérateur d'un Showplan a un ID de nœud. La colonne ObjectID des événements Hash Warning correspond à l'ID de nœud dans les plans d'exécution pour vous permettre de déterminer quel opérateur ou quelle opération est responsable de l'erreur.
Colonnes de la classe d'événements Hash Warning
Nom de colonne de données |
Type de données |
Description |
ID de la colonne |
Filtrable |
---|---|---|---|---|
ApplicationName |
nvarchar |
Nom de l'application cliente qui a créé la connexion à une instance de SQL Server. Cette colonne est remplie des valeurs transmises par l'application et non pas du nom affiché du programme. |
10 |
Oui |
ClientProcessID |
int |
ID affecté par l'ordinateur hôte au processus dans lequel s'exécute l'application cliente. Cette colonne de données est remplie si le client fournit l'ID du processus client. |
9 |
Oui |
DatabaseID |
int |
ID de la base de données spécifiée par l'instruction USE database ou celui de la base de données par défaut si aucune instruction USE database n'a été spécifiée pour une instance donnée. Le SQL Server Profiler affiche le nom de la base de données si la colonne de données ServerName est capturée dans la trace et que le serveur est disponible. Déterminez la valeur pour une base de données à l'aide de la fonction DB_ID. |
3 |
Oui |
DatabaseName |
nvarchar |
Nom de la base de données dans laquelle l'instruction de l'utilisateur est exécutée. |
35 |
Oui |
EventClass |
int |
Type d'événement = 55. |
27 |
Non |
EventSequence |
int |
Séquence d'un événement donné au sein de la demande. |
51 |
Non |
EventSubClass |
int |
Type de sous-classe d'événements. 0=Récurrence 1=Interruption |
21 |
Oui |
GroupID |
int |
ID du groupe de charges de travail où l'événement Trace SQL se déclenche. |
66 |
Oui |
HostName |
nvarchar |
Nom de l'ordinateur sur lequel le client est exécuté. La colonne de données est remplie si le client fournit le nom de l'hôte. Pour déterminer le nom de l'hôte, utilisez la fonction HOST_NAME. |
8 |
Oui |
IntegerData |
int |
Niveau de récurrence (récurrence du hachage uniquement). |
25 |
Oui |
IsSystem |
int |
Indique si l'événement s'est produit sur un processus système ou sur un processus utilisateur. 1 = système, 0 = utilisateur. |
60 |
Oui |
LoginName |
nvarchar |
Nom de la connexion de l'utilisateur (soit la connexion de sécurité SQL Server, soit les informations d'identification Windows au format <DOMAIN>\<username>). |
11 |
Oui |
LoginSid |
image |
Numéro d'identification de sécurité (SID) de l'utilisateur connecté. Vous pouvez trouver ces informations dans l'affichage catalogue sys.server_principals. Chaque connexion possède un SID unique au niveau du serveur. |
41 |
Oui |
NTDomainName |
nvarchar |
Domaine Windows auquel appartient l'utilisateur. |
7 |
Oui |
NTUserName |
nvarchar |
Nom d'utilisateur Windows. |
6 |
Oui |
ObjectID |
int |
ID de nœud de la racine de l'équipe de hachage impliquée dans la répartition. Correspond à l'ID de nœud dans les plans d'exécution Showplan. |
22 |
Oui |
RequestID |
int |
ID de la demande qui contient l'instruction. |
49 |
Oui |
ServerName |
nvarchar |
Nom de l'instance SQL Server tracée. |
26 |
|
SessionLoginName |
nvarchar |
Nom de connexion de l'utilisateur à l'origine de la session. Exemple : si vous vous connectez à SQL Server en utilisant le nom d'utilisateur Login1 et exécutez une instruction sous le nom Login2, SessionLoginName retourne Login1 et LoginName retourne Login2. Cette colonne affiche les noms de connexion SQL Server et Windows. |
64 |
Oui |
SPID |
int |
ID de la session au cours de laquelle l'événement s'est produit. |
12 |
Oui |
StartTime |
datetime |
Heure à laquelle a débuté l'événement, si elle est connue. |
14 |
Oui |
TransactionID |
bigint |
ID affecté par le système à la transaction. |
4 |
Oui |
XactSequence |
bigint |
Jeton qui décrit la transaction actuelle. |
50 |
Oui |