C#.NET Webアプリケーションから呼び出されるいくつかのクエリがありますが、これは常に高速です(SQL Serverのローカル管理者です)が、ユーザーのグループ(必要なアクセス許可を持つドメイングループ)の場合、クエリはアプリケーションでタイムアウトするポイント。
まったく同じクエリがユーザーごとに異なる動作をする原因は何でしょうか?
より詳しい情報:
パラメーターが同じである場合(exact same query
が意味するものだと思います)、パラメータースニッフィングではないはずです(ユーザーは間違ったパラメーターの悪い計画を取得します)。同じパラメータを計画しています。 quoted_identifier
やarithabort
などの設定が原因である可能性があります。これらは、高速ユーザーと低速ユーザーのsys.dm_exec_sessions
で比較できます。または、デフォルトのスキーマが異なり、オブジェクトはスキーマ接頭辞なしで参照されます。パラメータのスニッフィングがまだ含まれている可能性があります(そのため、なぜそれらの1つは悪い計画を持っています)。
これには2つの理由があります。1、パラメータースニッフィング2、接続設定が異なります。 whoisactive を実行すると、さまざまな接続プロパティが表示されます。私は実際にこれに関するブログ投稿を持っていますが、そこから会社固有の情報をクリーンアップしていません。 (私はまだ私のブログを有効にしていません);)
これはSQL Serverのバグのようです。 SQL Server 2008でこのバグが発生しました。新しいバージョンをテストしていません。管理者としてログインしてこのクエリを実行すると、0秒で応答を取得できます。
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
次に、権限の少ないユーザーとしてログインし、まったく同じクエリを実行すると、応答に45秒かかります。
これは何度も一貫しています。 1つは管理者用、もう1つは非管理者用の2つのクエリウィンドウ間で往復する場合、非管理者は常に約45秒かかり、管理者は0秒かかります。
試行:すべてのEXECおよびテーブル参照でスキーマを指定します。例:EXEC dbo.MyProc
競合が発生する可能性があります(マーティン・スミスが示唆するように、「同じデフォルトのスキーマ」?)、または再コンパイル