特定のユーザーのクエリが遅い


11

C#.NET Webアプリケーションから呼び出されるクエリがいくつかあります。これは常に高速です(SQL Serverのローカル管理者です)が、ユーザーのグループ(必要な権限を持つドメイングループ)の場合、クエリはアプリケーションでタイムアウトするポイント。

まったく同じクエリがユーザーごとに異なる動作をする原因は何ですか?

より詳しい情報:

  • クエリは、ストアドプロシージャではなく、C#コードのインラインSQLです。
  • アプリはドメイン認証を使用し、ユーザーと私はアプリを通じてクエリを実行します
  • 問題は別のプランであるようで、1つはキャッシュされたため、ユーザーごとに異なっていました。クエリがアプリ経由で遅くなり、SQL Server Management Studioで高速になるため、何かがキャッシュに影響しています。

2
次の質問を確認してください。同じ状況にあるかもしれません。最初にこれを試してみこの他のものを試してみましょう。
マリアン

3
遅いクエリでの待機タイプ(sys.dm_os_waiting_tasks)は何ですか?また、それぞれの実際の実行プランは何ですか(高速、低速)?
トーマス・ストリンガー

2
以前のコメントに同意します。私の最初の考えは、パラメータスニッフィングでもあるでしょう。最初のステップは、計画が異なるかどうかを確認することです。
マーティン・スミス

4
パラメータが同じである場合(それがの意味だと思いますexact same query)、それはパラメータスニッフィングではないはずです(ユーザーは間違ったパラメータの悪い計画を取得します)が、ユーザーは同じパラメータの異なる計画を取得しています(s)。高速ユーザーと低速ユーザーで比較できるquoted_identifierやなどの設定が原因でarithabortあるかsys.dm_exec_sessions、デフォルトのスキーマが異なり、スキーマプレフィックスなしでオブジェクトが参照されている可能性があります。パラメータのスニッフィングが依然として含まれている可能性があります(そのため、なぜそれらの1つは悪い計画を持っています)
アーロンバートランド

1
RE:あなたの編集には、他のユーザーと同じデフォルトのスキーマがありますか?低速実行と高速実行の実行計画をまだ把握していますか?
マーティン・スミス

回答:


5

パラメータが同じである場合(それがの意味だと思いますexact same query)、それはパラメータスニッフィングではないはずです(ユーザーは間違ったパラメータの悪い計画を取得します)が、ユーザーは同じパラメータの異なる計画を取得しています(s)。高速ユーザーと低速ユーザーで比較できるquoted_identifierやなどの設定が原因でarithabortあるかsys.dm_exec_sessions、デフォルトのスキーマが異なり、スキーマプレフィックスなしでオブジェクトが参照されている可能性があります。パラメータのスニッフィングがまだ含まれている可能性があります(そのため、なぜそれらの1つは悪い計画を持っています)。


3

これには2つの理由があります。1、パラメータースニッフィング2、接続設定が異なります。whoisactiveを実行すると、さまざまな接続プロパティが表示されます。私は実際にこれに関するブログ投稿を持っていますが、そこから会社固有の情報をクリーンアップしていません。(私はまだ私のブログを有効にしていません);)


0

試行:すべてのEXECおよびテーブル参照でスキーマを指定します。たとえば、EXEC dbo.MyProc

競合が発生する可能性があります(マーティン・スミスが示唆するように、「同じデフォルトのスキーマ」ですか?)または再コンパイルします


0

これはSQL Serverのバグのようです。SQL Server 2008でこのバグが発生しました。新しいバージョンをテストしていません。管理者としてログインしてこのクエリを実行すると、0秒で応答を取得できます。

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

次に、権限の少ないユーザーとしてログインし、まったく同じクエリを実行すると、応答に45秒かかります。

これは何度も一貫しています。1つは管理者用、もう1つは非管理者用の2つのクエリウィンドウ間で往復する場合、非管理者は常に約45秒かかり、管理者は0秒かかります。


質問へのコメントで尋ねられたように-両方のユーザーは同じデフォルトのデータベースを持っていますか、そしてクエリは同じデータベースで実行されていますか?そして、これがバグであると述べているある種のドキュメントを指摘できますか、それともあなたの意見ですか?あなたが間違っていると言っているのではなく、逸話以上のものを探しています。
RDFozz

回答で特定した問題は、SQL Server 2008では再現できないよう select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAMEです。明示的に付与された権限がまったくないSA以外のログインのデータは、常にすぐに返されます。
Max Vernon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.