Hash Warning-Ereignisklasse
Aktualisiert: 05. Dezember 2005
Mit der Hash Warning-Ereignisklasse können Sie überwachen, ob während eines Hashvorgangs eine Hashrekursion oder eine Beendigung des Hashings (Hashabbruch) aufgetreten ist.
Die Hashrekursion tritt auf, wenn die Eingabe für den verfügbaren Arbeitsspeicher zu groß ist und deshalb auf mehrere Partitionen verteilt wird, die separat verarbeitet werden. Sollten diese Partitionen für den Arbeitsspeicher immer noch zu groß sein, werden sie in Unterpartitionen aufgeteilt, die dann ebenfalls separat verarbeitet werden. Dieser Vorgang wird so lange fortgesetzt, bis jede Partition in den verfügbaren Arbeitsspeicher passt oder die maximale Rekursionsebene erreicht ist (die in der IntegerData-Datenspalte angezeigt wird).
Ein Hashabbruch tritt auf, wenn ein Hashvorgang die maximale Rekursionsebene erreicht hat und ein alternativer Plan verwendet wird, um die restlichen Partitionsdaten zu verarbeiten. Ein Hashabbruch tritt gewöhnlich aufgrund von verfälschten Daten auf.
Durch die Hashrekursion und den Hashabbruch wird die Leistung auf dem Server beeinträchtigt. Führen Sie eine der folgenden Aktionen aus, um Hashrekursionen und Hashabbrüche zu eliminieren oder deren Häufigkeit zu reduzieren:
- Stellen Sie sicher, dass in den Spalten, die verknüpft oder gruppiert werden, Statistiken vorhanden sind.
- Falls in den Spalten Statistiken vorhanden sind, aktualisieren Sie diese.
- Verwenden Sie einen anderen Verknüpfungstyp. Verwenden Sie beispielsweise ggf. eine MERGE- bzw. LOOP-Verknüpfung.
- Erhöhen Sie den verfügbaren Arbeitsspeicher auf dem Computer. Eine Hashrekursion oder ein Hashabbruch tritt auf, wenn nicht ausreichend Arbeitsspeicher zum Verarbeiten von Abfragen vorhanden ist und ein Überlauf auf den Datenträger notwendig ist.
Das Erstellen oder Aktualisieren der Statistiken in der an der Verknüpfung beteiligten Spalte ist die effizienteste Methode, um die Anzahl von Hashrekursionen oder Hashabbrüchen zu reduzieren.
Hinweis: |
---|
Die Begriffe schrittweise Hashverknüpfung und rekursive Hashverknüpfung werden ebenfalls zur Beschreibung eines Hashabbruchs verwendet. Weitere Informationen finden Sie unter Grundlegendes zu Hashverknüpfungen. |
Wichtig: |
---|
Sie sollten auch eine Showplan-Ereignisklasse in der Ablaufverfolgung sammeln, um zu bestimmen, an welcher Stelle das Hash Warning-Ereignis auftritt, wenn der Abfrageoptimierer einen Ausführungsplan generiert. Abgesehen von den Ereignisklassen Showplan Text und Showplan Text (Unencoded), die keine Knoten-ID zurückgeben, können Sie jede der Showplan-Ereignisklassen auswählen. Knoten-IDs in Showplans identifizieren jeden Vorgang, die der Abfrageoptimierer beim Generieren eines Abfrageausführungsplanes ausführt. Diese Vorgänge werden als Operatoren bezeichnet; jeder Operator in einem Showplan verfügt über eine Knoten-ID. Die ObjectID-Spalte für Hash Warning-Ereignisse entspricht der Knoten-ID in Showplans, damit Sie den Operator bzw. den Vorgang bestimmen können, der den Fehler verursacht. Weitere Informationen zu Showplan-Ereignisklassen finden Sie unter Anzeigen von Ausführungsplänen mithilfe von SQL Server Profiler-Ereignisklassen. |
Datenspalten der Hash Warning-Ereignisklasse
Datenspaltenname | Datentyp | Beschreibung | Spalten-ID | Filterbar |
---|---|---|---|---|
ApplicationName |
nvarchar |
Der Name der Clientanwendung, die die Verbindung mit einer Instanz von SQL Server hergestellt hat. Diese Spalte wird mit den Werten aufgefüllt, die von der Anwendung übergeben werden, und nicht mit dem angezeigten Namen des Programms. |
10 |
Ja |
ClientProcessID |
int |
Die ID, die vom Hostcomputer dem Prozess zugewiesen wird, in dem die Clientanwendung ausgeführt wird. Diese Datenspalte wird aufgefüllt, wenn der Client eine Clientprozess-ID bereitstellt. |
9 |
Ja |
DatabaseID |
int |
Die ID der Datenbank, die in der USE database-Anweisung angegeben wurde, bzw. die ID der Standarddatenbank, wenn für eine bestimmte Instanz keine USE database-Anweisung ausgegeben wurde. In SQL Server Profiler wird der Name der Datenbank angezeigt, wenn die ServerName-Datenspalte in der Ablaufverfolgung aufgezeichnet wird und der Server verfügbar ist. Der Wert für eine Datenbank kann mithilfe der DB_ID-Funktion ermittelt werden. |
3 |
Ja |
DatabaseName |
nvarchar |
Name der Datenbank, in der die Benutzeranweisung ausgeführt wird |
35 |
Ja |
EventClass |
int |
Ereignistyp = 55 |
27 |
Nein |
EventSequence |
int |
Sequenznummer eines bestimmten Ereignisses innerhalb der Anforderung |
51 |
Nein |
EventSubClass |
int |
Typ der Ereignisunterklasse 0 = Rekursion 1 = Abbruch |
21 |
Ja |
HostName |
nvarchar |
Name des Computers, auf dem der Client ausgeführt wird. Diese Datenspalte wird aufgefüllt, wenn der Hostname durch den Client bereitgestellt wird. Der Hostname kann mithilfe der HOST_NAME-Funktion ermittelt werden. |
8 |
Ja |
IntegerData |
int |
Rekursionsebene (nur Hashrekursion) |
25 |
Ja |
IsSystem |
int |
Gibt an, ob das Ereignis bei einem Systemprozess oder einem Benutzerprozess aufgetreten ist. 1 = System, 0 = Benutzer. |
60 |
Ja |
LoginName |
nvarchar |
Der Anmeldename des Benutzers (Anmeldung der SQL Server-Sicherheit oder die Windows-Anmeldeinformationen im Format <DOMAIN>\<username>). |
11 |
Ja |
LoginSid |
image |
Sicherheits-ID (Security Identification Number, SID) des angemeldeten Benutzers. Sie finden diese Informationen in der syslogins-Tabelle der master-Datenbank. Die SID ist für jede Anmeldung am Server eindeutig. |
41 |
Ja |
NTDomainName |
nvarchar |
Windows-Domäne, der der Benutzer angehört |
7 |
Ja |
NTUserName |
nvarchar |
Windows-Benutzername |
6 |
Ja |
ObjectID |
int |
Die Knoten-ID des Stammes vom an der Neupartition beteiligten Hashteam. Entspricht der Knoten-ID eines Showplans. |
22 |
Ja |
RequestID |
int |
ID der Anforderung, die die Anweisung enthält |
49 |
Ja |
ServerName |
nvarchar |
Name der Instanz von SQL Server, für die eine Ablaufverfolgung ausgeführt wird |
26 |
|
SessionLoginName |
nvarchar |
Der Anmeldename des Benutzers, der die Sitzung gestartet hat. Wenn Sie beispielsweise Login1 dazu verwenden, eine Verbindung mit SQL Server herzustellen, und eine Anweisung als Login2 ausführen, zeigt SessionLoginName den Wert Login1 an, wogegen LoginName den Wert Login2 anzeigt. Diese Spalte zeigt sowohl den SQL Server- als auch den Windows-Anmeldenamen an. |
64 |
Ja |
SPID |
int |
ID der Sitzung, bei der das Ereignis aufgetreten ist |
12 |
Ja |
StartTime |
datetime |
Zeitpunkt, zu dem das Ereignis begonnen hat (falls verfügbar) |
14 |
Ja |
TransactionID |
bigint |
Vom System zugewiesene ID der Transaktion |
4 |
Ja |
XactSequence |
bigint |
Token zur Beschreibung der aktuellen Transaktion |
50 |
Ja |
Siehe auch
Konzepte
Grundlegendes zu Hashverknüpfungen
Andere Ressourcen
Überwachen von Ereignissen
sp_trace_setevent (Transact-SQL)
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
05. Dezember 2005 |
|