MSSQLSERVER_2814

詳細

製品名

SQL Server

製品バージョン

10.50

製品ビルド番号

 

イベント ID

2814

イベント ソース

MSSQLSERVER

コンポーネント

SQLEngine

シンボル名

PR_POSSIBLE_INFINITE_RECOMPILE

メッセージ テキスト

SQLHANDLE %hs、PlanHandle %hs、開始オフセット %d、終了オフセット %d の再コンパイルが無限に行われる可能性があることが検出されました。前回の再コンパイルの理由は、%d でした。

説明

1 つ以上のステートメントにより、クエリ バッチが少なくとも 50 回再コンパイルされました。指定したステートメントを修正し、これ以上再コンパイルされるのを回避する必要があります。

次の表に、再コンパイルの理由を示します。

理由コード

説明

1

スキーマの変更

2

統計の変更

3

コンパイルの遅延

4

Set オプションの変更

5

Temp テーブルの変更

6

リモート行セットの変更

7

参照権限の変更

8

クエリ通知環境の変更

9

パーティション ビューの変更

10

カーソル オプションの変更

11

オプション (再コンパイル) の要求

ユーザーのアクション

  1. 次のクエリを実行して、再コンパイルの原因になっているステートメントを確認します。sql_handle、starting_offset、ending_offset、および plan_handle の各プレースホルダーを、エラー メッセージで指定された値に置き換えます。database_name 列と object_name 列は、アドホック Transact-SQL ステートメントおよび準備された Transact-SQL ステートメントでは NULL になることに注意してください。

    SELECT DB_NAME(st.dbid) AS database_name

    , OBJECT_NAME(st.objectid) AS object_name

    , st.text

    FROM sys.dm_exec_query_stats AS qs

    CROSS APPLY sys.dm_exec_sql_text (sql_handle) AS st

    WHERE qs.statement_start_offset = starting_offset

    AND qs.statement_end_offset = ending_offset

    AND qs.plan_handle = plan_handle;

  2. 理由コードの説明に基づいて、再コンパイルを回避するようにステートメント、バッチ、またはプロシージャを修正します。たとえば、ストアド プロシージャに 1 つ以上の SET ステートメントが含まれていることがあります。これらのステートメントはプロシージャから削除する必要があります。再コンパイルの理由と解決策のその他の例については、「SQL Server 2005 のバッチのコンパイル、再コンパイル、およびプランのキャッシュに関する問題」を参照してください。

  3. 問題が継続して発生する場合は、マイクロソフト カスタマー サポート サービスに問い合わせてください。