Hash Warning イベント クラスHash Warning Event Class

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

Hash Warning イベント クラスを使用して、ハッシュ演算中にハッシュの再帰、またはハッシュの中断 (ハッシュの保留) が発生する時点を監視できます。The Hash Warning event class can be used to monitor when a hash recursion or cessation of hashing (hash bailout) has occurred during a hashing operation.

使用できるメモリ内にビルド入力が収まらないときに、ハッシュの再帰が発生します。その結果、入力が複数のパーティションに分割され、個別に処理されます。Hash recursion occurs when the build input does not fit into available memory, resulting in the split of input into multiple partitions that are processed separately. 複数のパーティションに分割されても使用できるメモリ内に収まらない場合は、さらにサブパーティションに分割され、個別に処理されます。If any of these partitions still do not fit into available memory, it is split into subpartitions, which are also processed separately. この分割プロセスは、使用できるメモリ内に各パーティションが収まるようになるまで、または (IntegerData データ列に表示された) 最大再帰レベルに到達するまで続けられます。This splitting process continues until each partition fits into available memory or until the maximum recursion level is reached (displayed in the IntegerData data column).

ハッシュ演算が最大再帰レベルに到達するとハッシュの保留が発生し、パーティション分割された残りのデータを処理するための代替プランに移行されます。Hash bailout occurs when a hashing operation reaches its maximum recursion level and shifts to an alternate plan to process the remaining partitioned data. 通常、ハッシュの保留は非対称データにより発生します。Hash bailout usually occurs because of skewed data.

ハッシュの再帰やハッシュの保留により、サーバーのパフォーマンスが低下することになります。Hash recursion and hash bailout cause reduced performance in your server. ハッシュの再帰や保留を取り除いたり、頻度を減らすには、次のいずれかの操作を行います。To eliminate or reduce the frequency of hash recursion and bailouts, do one of the following:

  • 結合またはグループ化される列に、統計が存在していることを確認します。Make sure that statistics exist on the columns that are being joined or grouped.

  • 列に統計が存在する場合は、統計を更新します。If statistics exist on the columns, update them.

  • 異なる種類の結合を使用します。Use a different type of join. たとえば、適切であれば、MERGE 結合または LOOP 結合を代用します。For example, use a MERGE or LOOP join instead, if appropriate.

  • コンピューターで使用できるメモリを増やします。Increase available memory on the computer. メモリ不足でクエリを適切に処理できず、ディスクへの書き込みが必要になると、ハッシュの再帰や保留が発生します。Hash recursion or bailout occurs when there is not enough memory to process queries in place and they need to spill to disk.

結合に関係する列に統計を作成したり、その統計を更新することが、ハッシュの再帰や保留の発生数を減らすのに最も効果的です。Creating or updating the statistics on the column involved in the join is the most effective way to reduce the number of hash recursion or bailouts that occur.

注意

猶予ハッシュ結合 および 再帰的ハッシュ結合 という用語は、ハッシュの保留を表すためにも使用されます。The terms grace hash join and recursive hash join are also used to describe hash bailout.

重要

クエリ オプティマイザーが実行プランを生成するときに Hash Warning イベントが発生している場所を特定するには、トレースで Showplan イベント クラスも収集する必要があります。To determine where the Hash Warning event is occurring when the query optimizer generates an execution plan, you should also collect a Showplan event class in the trace. ノード ID を返さない Showplan Text イベント クラスと Showplan Text (Unencoded) イベント クラスを除く、任意の Showplan イベント クラスを選択できます。You can choose any of the Showplan event classes except the Showplan Text and Showplan Text (Unencoded) event classes, which do not return a Node ID. Showplans のノード ID で、クエリ オプティマイザーがクエリ実行プランの生成時に実行する各操作が特定されます。Node IDs in Showplans identify each operation the query optimizer performs when it generates a query execution plan. これらの操作は オペレーターと呼ばれ、Showplan の各オペレーターにはノード ID があります。These operations are called operators, and each operator in a Showplan has a Node ID. Hash Warning イベントの ObjectID 列は Showplan のノード ID に対応するので、エラーの原因であるオペレーターつまり操作を判別できます。The ObjectID column for Hash Warning events corresponds to the Node ID in Showplans so you can determine which operator, or operation, is causing the error.

Hash Warning イベント クラスのデータ列Hash Warning Event Class Data Columns

データ列名Data column name データ型Data type 説明Description 列 IDColumn ID フィルターの適用Filterable
ApplicationNameApplicationName nvarcharnvarchar SQL ServerSQL Serverのインスタンスへの接続を作成したクライアント アプリケーションの名前。Name of the client application that created the connection to an instance of SQL ServerSQL Server. この列には、プログラムの表示名ではなく、アプリケーションによって渡された値が格納されます。This column is populated with the values passed by the application rather than with the displayed name of the program. 1010 はいYes
ClientProcessIDClientProcessID intint クライアント アプリケーションが実行されているプロセスに対し、ホスト コンピューターが割り当てた ID。ID assigned by the host computer to the process where the client application is running. クライアントによってクライアント プロセス ID が指定された場合、このデータ列にデータが格納されます。This data column is populated if the client provides a client process ID. 99 はいYes
DatabaseIDDatabaseID intint USE database ステートメントで指定されたデータベースの ID、または特定のインスタンスについて USE database ステートメントが実行されていない場合は既定のデータベースの ID となります。ID of the database specified by the USE database statement or the default database if no USE database statement has been issued for a given instance. SQL Server プロファイラーSQL Server Profiler では、ServerName データ列がトレースにキャプチャされ、そのサーバーが利用可能な場合、データベースの名前が表示されます。displays the name of the database if the ServerName data column is captured in the trace and the server is available. データベースに対応する値は、DB_ID 関数を使用して特定します。Determine the value for a database by using the DB_ID function. 33 はいYes
DatabaseNameDatabaseName nvarcharnvarchar ユーザーのステートメントが実行されているデータベースの名前。Name of the database in which the user statement is running. 3535 はいYes
EventClassEventClass intint イベントの種類 = 55。Type of event = 55. 2727 いいえNo
EventSequenceEventSequence intint 要求内の特定のイベントのシーケンス。Sequence of a given event within the request. 5151 いいえNo
EventSubClassEventSubClass intint イベント サブクラスの種類。Type of event subclass.

0 = 再帰0=Recursion

1 = 保留1=Bailout
2121 はいYes
GroupIDGroupID intint SQL トレース イベントが発生したワークロード グループの ID。ID of the workload group where the SQL Trace event fires. 6666 はいYes
HostNameHostName nvarcharnvarchar クライアントが実行されているコンピューターの名前。Name of the computer on which the client is running. このデータ列にはクライアントからホスト名が提供されている場合に値が格納されます。This data column is populated if the client provides the host name. ホスト名を指定するには、HOST_NAME 関数を使用します。To determine the host name, use the HOST_NAME function. 88 はいYes
IntegerDataIntegerData intint 再帰レベル (ハッシュの再帰のみ)。Recursion level (hash recursion only). 2525 はいYes
IsSystemIsSystem intint イベントがシステム プロセスとユーザー プロセスのどちらで発生したか。Indicates whether the event occurred on a system process or a user process. 1 はシステム、0 はユーザーです。1 = system, 0 = user. 6060 はいYes
LoginNameLoginName nvarcharnvarchar ユーザーのログイン名 (SQL ServerSQL Server セキュリティ ログイン、または <DOMAIN>\<username> という形式の Windows ログイン資格情報)。Name of the login of the user (either SQL ServerSQL Server security login or the Windows login credentials in the form of <DOMAIN>\<username>). 1111 はいYes
LoginSidLoginSid imageimage ログイン ユーザーのセキュリティ ID 番号 (SID)。Security identification number (SID) of the logged-in user. この情報は、sys.server_principals カタログ ビューで参照できます。You can find this information in the sys.server_principals catalog view. 各 SID はサーバーのログインごとに一意です。Each SID is unique for each login in the server. 4141 はいYes
NTDomainNameNTDomainName nvarcharnvarchar ユーザーが所属する Windows ドメイン。Windows domain to which the user belongs. 77 はいYes
NTUserNameNTUserName nvarcharnvarchar Windows のユーザー名。Windows user name. 66 はいYes
ObjectIDObjectID intint パーティション再分割に関係するハッシュ チームのルートのノード ID。Node ID of the root of the hash team involved in the repartition. Showplan のノード ID と一致します。Corresponds with the Node ID in Showplans. 2222 はいYes
RequestIDRequestID intint ステートメントを含んでいる要求の ID。ID of the request that contains the statement. 4949 はいYes
ServerNameServerName nvarcharnvarchar トレースされている SQL ServerSQL Server のインスタンスの名前。Name of the instance of SQL ServerSQL Server that is being traced. 2626
SessionLoginNameSessionLoginName nvarcharnvarchar セッションを開始したユーザーのログイン名。Login name of the user who originated the session. たとえば、Login1 を使用して SQL ServerSQL Server に接続し、Login2 でステートメントを実行すると、SessionLoginName には Login1 が表示され、LoginName には Login2 が表示されます。For example, if you connect to SQL ServerSQL Server using Login1 and execute a statement as Login2, SessionLoginName shows Login1 and LoginName shows Login2. この列には、 SQL ServerSQL Server ログインと Windows ログインの両方が表示されます。This column displays both SQL ServerSQL Server and Windows logins. 6464 はいYes
SPIDSPID intint イベントが発生したセッションの ID。ID of the session on which the event occurred. 1212 はいYes
StartTimeStartTime datetimedatetime イベントの開始時刻 (取得できた場合)。Time at which the event started, if available. 1414 はいYes
TransactionIDTransactionID bigintbigint システムによって割り当てられたトランザクション ID。System-assigned ID of the transaction. 44 はいYes
XactSequenceXactSequence bigintbigint 現在のトランザクションを説明するトークン。Token that describes the current transaction. 5050 はいYes

参照See Also

sp_trace_setevent (Transact-SQL) sp_trace_setevent (Transact-SQL)
結合Joins