web-dev-qa-db-ja.com

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

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

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

より詳しい情報:

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

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

5
Aaron Bertrand

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

3
rottengeek

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

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

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

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

0
Rob Kraft

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

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

0
Kip Bryan