Hash Warning イベント クラス

Hash Warning イベント クラスを使用して、ハッシュ演算中にハッシュの再帰、またはハッシュの中断 (ハッシュの保留) が発生する時点を監視できます。

使用できるメモリ内にビルド入力が収まらないときに、ハッシュの再帰が発生します。その結果、入力が複数のパーティションに分割され、個別に処理されます。複数のパーティションに分割されても使用できるメモリ内に収まらない場合は、さらにサブパーティションに分割され、個別に処理されます。この分割プロセスは、使用できるメモリ内に各パーティションが収まるようになるまで、または (IntegerData データ列に表示された) 最大再帰レベルに到達するまで続けられます。

ハッシュ演算が最大再帰レベルに到達するとハッシュの保留が発生し、パーティション分割された残りのデータを処理するための代替プランに移行されます。通常、ハッシュの保留は非対称データにより発生します。

ハッシュの再帰やハッシュの保留により、サーバーのパフォーマンスが低下することになります。ハッシュの再帰や保留を取り除いたり、頻度を減らすには、次のいずれかの操作を行います。

  • 結合またはグループ化される列に、統計が存在していることを確認します。

  • 列に統計が存在する場合は、統計を更新します。

  • 異なる種類の結合を使用します。たとえば、適切であれば、MERGE 結合または LOOP 結合を代用します。

  • コンピュータで使用できるメモリを増やします。メモリ不足でクエリを適切に処理できず、ディスクへの書き込みが必要になると、ハッシュの再帰や保留が発生します。

結合に関係する列に統計を作成したり、その統計を更新することが、ハッシュの再帰や保留の発生数を減らすのに最も効果的です。

注意

猶予ハッシュ結合および再帰的ハッシュ結合という用語は、ハッシュの保留を表すためにも使用されます。詳細については、「ハッシュ結合について」を参照してください。

重要な注意事項重要

クエリ オプティマイザが実行プランを生成するときに Hash Warning イベントが発生している場所を特定するには、トレースで Showplan イベント クラスも収集する必要があります。ノード ID を返さない Showplan Text イベント クラスと Showplan Text (Unencoded) イベント クラスを除く、任意の Showplan イベント クラスを選択できます。Showplans のノード ID で、クエリ オプティマイザがクエリ実行プランの生成時に実行する各操作が特定されます。これらの操作はオペレータと呼ばれ、Showplan の各オペレータにはノード ID があります。Hash Warning イベントの ObjectID 列は Showplan のノード ID に対応するので、エラーの原因であるオペレータつまり操作を判別できます。Showplan イベント クラスの詳細については、「SQL Server Profiler のイベント クラスを使用した実行プランの表示」を参照してください。

Hash Warning イベント クラスのデータ列

データ列名

データ型

説明

列 ID

フィルタの適用

ApplicationName

nvarchar

SQL Server のインスタンスへの接続を作成したクライアント アプリケーションの名前。この列には、プログラムの表示名ではなく、アプリケーションによって渡された値が格納されます。

10

ClientProcessID

int

クライアント アプリケーションが実行されているプロセスに対し、ホスト コンピュータが割り当てた ID。クライアントによってクライアント プロセス ID が指定された場合、このデータ列にデータが格納されます。

9

DatabaseID

int

USE database ステートメントで指定されたデータベースの ID。特定のインスタンスについて USE database ステートメントが実行されていない場合は、既定のデータベースの ID となります。SQL Server Profiler では、ServerName データ列がトレースにキャプチャされ、そのサーバーが利用可能な場合、データベースの名前が表示されます。データベースに対応する値は、DB_ID 関数を使用して特定します。

3

DatabaseName

nvarchar

ユーザーのステートメントが実行されているデータベースの名前。

35

EventClass

int

イベントの種類 = 55。

27

不可

EventSequence

int

要求内の特定のイベントのシーケンス。

51

不可

EventSubClass

int

イベント サブクラスの種類。

0 = 再帰

1 = 保留

21

GroupID

int

SQL トレース イベントが発生したワークロード グループの ID。

66

HostName

nvarchar

クライアントが実行されているコンピュータの名前。クライアントによりホスト名が指定されている場合は、このデータ列に値が格納されます。ホスト名を指定するには、HOST_NAME 関数を使用します。

8

IntegerData

int

再帰レベル (ハッシュの再帰のみ)。

25

IsSystem

int

イベントがシステム プロセスで発生したか、ユーザー プロセスで発生したかを示します。1 = システム、0 = ユーザーです。

60

LoginName

nvarchar

ユーザーのログイン名。SQL Server セキュリティ ログイン、または <DOMAIN>\<username> の形式で表された Windows ログイン資格情報です。

11

LoginSid

image

ログイン ユーザーのセキュリティ ID 番号 (SID)。この情報は、sys.server_principals カタログ ビューで参照できます。各 SID はサーバーのログインごとに一意です。

41

NTDomainName

nvarchar

ユーザーが所属する Windows ドメイン。

7

NTUserName

nvarchar

Windows のユーザー名。

6

ObjectID

int

パーティション再分割に関係するハッシュ チームのルートのノード ID。Showplan のノード ID と一致します。

22

RequestID

int

ステートメントが含まれている要求の ID。

49

ServerName

nvarchar

トレースされている SQL Server のインスタンスの名前。

26

SessionLoginName

nvarchar

セッションを開始したユーザーのログイン名。たとえば、Login1 を使用して SQL Server に接続し、Login2 でステートメントを実行すると、SessionLoginName には Login1 が表示され、LoginName には Login2 が表示されます。この列には、SQL Server ログインと Windows ログインの両方が表示されます。

64

SPID

int

イベントが発生したセッションの ID。

12

StartTime

datetime

イベントの開始時刻 (取得できた場合)。

14

TransactionID

bigint

トランザクションにシステムが割り当てた ID。

4

XactSequence

bigint

現在のトランザクションを説明するトークン。

50

関連項目

参照

概念

その他の技術情報