12

.NET コードと SQL Server 間の実行時間を改善するためのチェックリスト。基本的な解決策から奇妙な解決策まで、何でも歓迎します。

コード:

avgbodyでコマンドと接続のデフォルトのタイムアウトを変更します。

avgbodyによるインライン SQL ステートメントの代わりに、ストアド プロシージャ コールを使用します。

Jay Shepherdによるアクティビティ モニターを使用して、ブロック/ロックを探します。

SQLサーバー:

AlexCuseによるストアド プロシージャのパラメータ スニッフィングに注意してください。

Martin Clarkeによるデータベースの動的拡張に注意してください。

プロファイラーを使用して、 BradOで 100 ミリ秒以上かかるクエリ/ストアド プロシージャを見つけます。

トランザクションのタイムアウトをavgbody だけ増やします。

avgbodyによって動的ストアド プロシージャを静的ストアド プロシージャに変換します。

Jay Shepherdによるサーバーのビジー状態を確認してください。

4

8 に答える 8

5

過去に私の解決策のいくつかは次のとおりです。

  1. sqlcommand のデフォルトのタイムアウト設定を修正します。

    Dim myCommand As New SqlCommand("[dbo].[spSetUserPreferences]", myConnection)

    myCommand.CommandType = CommandType.StoredProcedure

    myCommand.CommandTimeout = 120

  2. 接続タイムアウト文字列を増やします:

    Data Source=mydatabase;Initial Catalog=Match;Persist Security Info=True;User ID=User;Password=password; 接続タイムアウト=120

  3. sql-server 2005 でトランザクション タイムアウトを増やす

    管理スタジオの [ツール] > [オプション] > [デザイナー] で、[テーブル デザイナーの更新の接続文字列のタイムアウト値を上書きする] がオン/オフになっていても、[次のトランザクション タイムアウト:] を増やします。

  4. 動的ストアド プロシージャを静的ストアド プロシージャに変換する

  5. コードにインライン SQL ステートメントを記述する代わりに、ストアド プロシージャを呼び出すコードを作成します。

于 2008-09-15T21:59:40.327 に答える
3

長い応答時間に関する苦情に対する奇妙な「解決策」は、より興味深い進行状況バーを表示することです。つまり、ユーザーの気持ちに働きかけます。1 つの例は、Windows Vista の待機アイコンです。その高速回転する円は、物事がより速く進んでいるという感覚を与えます。Google は Android でも同じトリックを使用しています (少なくとも私が見たバージョン)。

ただし、最初に技術的な問題に対処することを試み、選択肢がない場合にのみ人間の行動に取り組むことをお勧めします。

于 2008-09-15T21:56:43.670 に答える
2

ストアド プロシージャを使用していますか? その場合は、パラメータ スニッフィングに注意する必要があります。特定の状況では、これにより非常に長時間実行されるクエリが発生する可能性があります。いくつかの読書:

http://blogs.msdn.com/queryoptteam/archive/2006/03/31/565991.aspx

http://blogs.msdn.com/khen1234/archive/2005/06/02/424228.aspx

于 2008-09-16T00:18:10.040 に答える
1

何よりもまず、実行されている実際のクエリを確認してください。プログラムでセットアップするときに SQL Server プロファイラーを使用し、すべてのクエリが正しい結合を使用しており、可能な場合はキーを参照していることを確認します。

于 2008-09-15T21:53:20.013 に答える
0

SQLServerプロファイラーも使用するのが好きです。私は、データベースサーバー上のクライアントサイトで、営業日の真っ只中に15〜30分の時間のトレースを設定し、100ミリ秒を超える期間ですべてのクエリ/ストアドプロシージャをログに記録するのが好きです。それはとにかく「長時間実行」クエリの私の基準です。

于 2008-09-15T22:25:09.047 に答える
0

SQL Server 2000 に適用され、今日でも適用される可能性のある奇妙なもの:

本番環境でデータベースを動的に拡張しようとしていないことを確認してください。その余分なスペースを割り当てるのにかかる時間と通常の負荷の実行により、クエリがタイムアウトするポイントが来ます (そして成長も!)

于 2008-09-15T22:35:20.130 に答える
0

いくつかの簡単なもの...

  • サーバーのプロセッサ使用率をチェックして、ビジー状態かどうかを確認します
  • アクティビティモニターで進行中のブロック/ロックを探します
  • ネットワークの問題/パフォーマンス
于 2008-09-15T21:53:59.230 に答える
0

Profiler を実行して、クエリの実行時間を測定します。
デッドロックがないか、アプリケーションのログを確認してください。

于 2008-09-15T21:59:49.093 に答える