6

上記のエラーで失敗する SSIS パッケージがあります。

データベースには 300 のクエリ ガバナー制限があります

ステートメントを実行するデータ フロー タスクの前に、「SQL の実行」タスクをパッケージに追加しようとしました。

SET QUERY_GOVERNOR_COST_LIMIT 0 

これはパッケージの実行中に成功として表示されますが、データフロー タスクはまだ失敗しており、制限が 300 であると報告されています。

ソース: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 説明: "このクエリ (336) の推定コストが構成されたしきい値の 300 を超えたため、クエリはキャンセルされました。システム管理者に連絡してください。". 終了エラー

データ フロー タスクでこの設定をオーバーライドするにはどうすればよいですか?

4

2 に答える 2

6

パッケージに「同じ接続を保持する」プロパティを設定していない限り、これは私の好みではありませんが、経験していることはドキュメントに記載されていることです。

Using SET QUERY_GOVERNOR_COST_LIMIT applies to the current connection only 
and lasts the duration of the current connection

パッケージ内で、SQL 実行タスクの接続が開かれ、クエリ ガバナー ステートメントが発行され、そのタスクが終了します。次に、OLE DB ソース (または ADO.NET ソース) の一部として、データ フロー タスクで新しい/異なる接続が使用されます。その接続はガバナーのコストを変更していないため、QG の対象となります。

これを解決するには、データ フローでソースを変更する必要があります。必要なテーブルを選択したと仮定すると、ラジオ ボタンを [テーブル ソース] から [クエリ ソース] (おおよその名前) に切り替える必要があります。このクエリのソースとして、次のようなものを使用します

SET QUERY_GOVERNOR_COST_LIMIT 0;
SELECT
    MT.*
FROM
    dbo.MyTable AS MT;

編集

QG 制限を超えているのはターゲット テーブルであることを考えると、Destination の Connection Manager を変更して RetainSameConnection プロパティを True に設定するのが手っ取り早い方法です。これにより、宛先変換の同じ接続のコストが既に変更されていることが保証されます。この質問に対する私の回答で、それを設定した場所のスクリーンショットがあります

SSIS: デフォルトの Logging OnError が RetainSameConnection で機能しない

うまくいく可能性のある他のアプローチは、データの負荷を変更してクエリ (挿入) のコストを削減することです。

  • コミット サイズやバッチ サイズを減らすことで、そこに到達できる場合があります。
  • ターゲット テーブルに大量のインデックスが作成されている場合、すべてのインデックスを維持するコストがクエリ ガバナーのしきい値を超える可能性があるため、パッケージの実行前後に非クラスター化インデックスを削除して再作成すると、挿入コストが削減される可能性があります。また、NCI を再作成すると作業に時間がかかる可能性があるため、缶 (コスト) が後回しになる可能性があります。
  • Enterprise Edition を使用していてパーティショニングを使用している場合は、空のパーティションにロードしてスワップインできる可能性があります。この状況ではそうではなく、パーティショニングがうまく行われなければ問題が悪化する可能性があるためです。
于 2012-09-24T13:48:29.647 に答える
5

SSMS の GUI オプションを使用して、サーバー全体で変更する方法があります。

1. [サーバーのプロパティ] ダイアログ ボックスで、[接続] ページに移動します。
2. [クエリ ガバナーを使用して実行時間の長いクエリを防ぐ] オプションを選択します。
3. オプションの下のボックスに、クエリの最大コスト制限を入力します。有効な範囲は 0 ~ 2,147,483,647 です。値 0 はクエリ ガバナーを無効にします。その他の値は、最大クエリ コスト制限を設定します。
4. [OK] をクリックします。

出典: Technet の記事: クエリ ガバナーを使用して過剰なクエリの実行を制御する

于 2016-08-26T13:46:03.543 に答える