次の方法で共有


Hash Warning イベント クラス

ハッシュ警告イベント クラスを使用すると、ハッシュ操作中にハッシュ再帰またはハッシュの停止 (ハッシュのベイルアウト) が発生した場合を監視できます。

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

ハッシュのベイルアウトは、ハッシュ操作が最大再帰レベルに達し、残りのパーティション 分割されたデータを処理する代替プランに移行したときに発生します。 ハッシュのベイルアウトは、通常、データが偏っているために発生します。

ハッシュ再帰とハッシュのベイルアウトにより、サーバーのパフォーマンスが低下します。 ハッシュ再帰とベイルアウトの頻度を排除または減らすには、次のいずれかの操作を行います。

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

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

  • 別の種類の結合を使用します。 たとえば、必要に応じて、代わりに MERGE 結合または LOOP 結合を使用します。

  • コンピューターで使用可能なメモリを増やします。 ハッシュ再帰またはベイルアウトは、クエリを処理するのに十分なメモリが存在せず、ディスクにスピルする必要がある場合に発生します。

結合に関係する列の統計を作成または更新することは、発生するハッシュ再帰またはベイルアウトの数を減らす最も効果的な方法です。

猶予期間ハッシュ結合再帰ハッシュ結合という用語は、ハッシュのベイルアウトを記述するためにも使用されます。

重要

クエリ オプティマイザーが実行プランを生成するときにハッシュ警告イベントが発生している場所を確認するには、トレースで Showplan イベント クラスも収集する必要があります。 Showplan Text イベント クラスと Showplan Text (Unencoded) イベント クラスを除き、ノード ID を返さない Showplan イベント クラスを選択できます。 Showplans のノード ID は、クエリ オプティマイザーがクエリ実行プランを生成するときに実行する各操作を識別します。 これらの操作は 演算子と呼ばれ、Showplan の各演算子にはノード ID があります。 ハッシュ警告イベントの ObjectID 列は Showplans のノード ID に対応しているため、エラーの原因となっている演算子または操作を特定できます。

ハッシュ警告イベント クラスのデータ列

データ列名 データの種類 説明 列 ID フィルターの適用
アプリケーション名 nvarchar SQL Server のインスタンスへの接続を作成したクライアント アプリケーションの名前。 この列には、プログラムの表示名ではなく、アプリケーションによって渡された値が設定されます。 10 イエス
ClientProcessID int クライアント アプリケーションが実行されているプロセスに対し、ホスト コンピューターが割り当てた ID。 このデータ列は、クライアントがクライアント プロセス ID を提供する場合に設定されます。 9 イエス
データベースID int USE database ステートメントで指定されたデータベースの ID、または特定のインスタンスについて USE database ステートメントが実行されていない場合は既定の database となります。 SQL Server Profiler では、 ServerName データ列がトレースにキャプチャされ、そのサーバーが利用可能な場合、データベースの名前が表示されます。 データベースに対応する値は、DB_ID 関数を使用して特定します。 3 イエス
データベース名 nvarchar ユーザーのステートメントが実行されているデータベースの名前。 35 イエス
EventClass int イベントの種類 = 55。 二十七 いいえ
イベントシーケンス int 要求内の特定のイベントのシーケンス。 51 いいえ
イベントサブクラス int イベント サブクラスの種類。

0=再帰

1 = ベイルアウト
21 (二十一) イエス
グループID int SQL トレース イベントが発生したワークロード グループの ID。 66 イエス
ホストネーム nvarchar クライアントが実行されているコンピューターの名前。 このデータ列にはクライアントからホスト名が提供されている場合に値が格納されます。 ホスト名を指定するには、 HOST_NAME 関数を使用します。 8 イエス
整数データ int 再帰レベル (ハッシュ再帰のみ)。 二十五 イエス
IsSystem int イベントがシステム プロセスとユーザー プロセスのどちらで発生したか。 1 はシステム、0 はユーザーです。 六十 イエス
ログイン名 nvarchar ユーザーのログイン名 (SQL Server セキュリティ ログインまたは Windows ログイン資格情報 ( <DOMAIN>\<username> の形式)。 11 イエス
ログインSID image ログイン ユーザーのセキュリティ ID 番号 (SID)。 この情報は、sys.server_principals カタログ ビューで参照できます。 各 SID はサーバーのログインごとに一意です。 41 イエス
NTドメインネーム nvarchar ユーザーが所属する Windows ドメイン。 7 イエス
NTユーザー名 (NTUserName) nvarchar Windows のユーザー名。 6 イエス
オブジェクトID int 再パーティションに関与するハッシュチームのルートノードID。 プラン表示のノード ID に対応します。 22 イエス
RequestID int ステートメントを含む要求の ID。 49 イエス
サーバー名 nvarchar トレース対象の SQL Server のインスタンスの名前。 26
SessionLoginName nvarchar セッションを開始したユーザーのログイン名。 たとえば、Login1 を使用して SQL Server に接続し、Login2 としてステートメントを実行すると、SessionLoginName に Login1 が表示され、LoginName に Login2 が表示されます。 この列には、SQL Server ログインと Windows ログインの両方が表示されます。 64 イエス
SPID (サービスプロバイダーID) int イベントが発生したセッションの ID。 12 イエス
開始時間 datetime イベントの開始時刻 (取得できた場合)。 14 イエス
TransactionID bigint システムによって割り当てられたトランザクション ID。 4 イエス
エクザクトシーケンス bigint 現在のトランザクションを説明するトークン。 50 イエス

こちらもご覧ください

sp_trace_setevent (Transact-SQL) イベント設定関数