質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

Q&A

解決済

1回答

6930閲覧

SQLServer実行プランに表示される「ExcessiveGrant」という警告とは何か

Kaebnet

総合スコア9

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

0グッド

0クリップ

投稿2020/06/10 14:35

2つの仮想マシンがありそのそれぞれにSQL Serverが入っています。
2つのサーバーはリンクサーバーとしており、
以下のようなクエリを実行しています。

SQL

1DELETE [サーバー_A].[DB_A].dbo.テーブル_A 2FROM [サーバー_A].[DB_A].dbo.テーブル_A AS テーブル_A 3INNER JOIN 4( 5 SELECT 6 ID 7 FROM 8 テーブル_B 9 WHERE 10 条件 = ○○ 11)AS テーブル_B 12ON 13テーブル_A.ID= テーブル_B.ID

すると実行プランにて以下のような記述がされておりました。

クエリ メモリ許可によって、信頼性に影響を与える可能性のある "ExcessiveGrant" が検出されました。
許可サイズ: 初期 1024 KB、最終 1024 KB、使用済み 0 KB。

このクエリは実行にかなりの時間がかかってしまっているのですが、
関係がありますでしょうか?
また、解決方法があれば教えて頂けますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/06/11 01:11

どのテーブルがどちらのサーバーのものであるか明示して下さい。
Kaebnet

2020/06/11 01:38

失礼致しました。 サーバー_Bからサーバー_Aを参照できるようにリンクサーバーを設定しており、 テーブル_Aはサーバー_Aのテーブル(リンクサーバーの参照先) テーブル_Bはサーバー_Bのテーブル(リンクサーバーの参照元)です。 上記のクエリは、 サーバ_Bからサーバ_A側のテーブルのDELETE処理を行っております。
guest

回答1

0

ベストアンサー

結合する事によって、行ごとの問合せがサーバー間で行われ、性能やメモリーに影響しているのではないかと推測します。

以下の様なSQLに変更し改善されるかどうか試して下さい。

SQL

1delete from [サーバー_A].[DB_A].dbo.テーブル_A 2where ID in (SELECT ID FROM テーブル_B WHERE 条件 = ○○)

投稿2020/06/11 02:05

編集2020/06/11 02:07
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kaebnet

2020/06/11 09:21 編集

ご回答くださいましてありがとうございました。 頂きましたSQL文で試したところ少し早くなることが確認できました。 ただし、SQLServerの設定等に問題があるのかそれでもかなり遅かったため、 実行プラン等を確認していたところ、 仰っていた通り1行毎やり取りをしていたようでした。。。 DELETEする500件を一件ずつ20,000レコードあるテーブルと 比較していたため、 10,000,000回近いやり取りが行われていたようです。 今回はDELETEのWHERE句に指定するIDを別クエリで取得して変数に保持する方法が現時点で一番早いことが分かったため、 そのような対応と致しました。 ご助言ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問