2009-07-03 1 views
1

これはSQLコマンドの最適化に関する質問ではありません。私は、SQL接続が開いていて、できるだけ効率的にコマンドを処理する準備ができていることを確実にする方法があるのだろうかと思います。SQL接続のパフォーマンスを最適化しますか?

私が今見ているのは、私はSQLコマンドを実行することができ、そのコマンドは〜1秒かかることになり、追加の実行には約300msかかるでしょう。これは、コマンドが(別のアプリケーションインスタンスからの)SQLサーバーに対して以前に実行された後です。このアプリケーションの初期実行の前に実行されたクエリに対してSQLキャッシュを完全に読み込む必要があります。限り私は継続的に私は約300ミリ秒の時間を参照してクエリを再実行するが、私はアプリケーションをアイドル状態を5~10分戻って、次の要求を返す〜1(最初の要求と同じ)に戻ります。

接続文字列またはSqlConnection上のいくつかのプロパティを使用して、接続を水和状態に保ち、効率的にクエリを処理できるようにフレームワークに指示する方法はありますか?

答えて

0

あなたはそれを閉じないで開いてください。 :)接続プールがあなたのための接続管理を処理するので、それは助言できません。あなたはそれを有効にしていますか?

+0

デフォルトで有効になっています。 –

2

手順の実行計画を確認しましたか。実行計画私は、サーバー上のメモリにロードされ、特定の期間が経過するか、プロシージャでアクセスされるテーブルなどに応じてクリアされると考えています。ストアドプロシージャを単純化すると(おそらくそれらを分割する)、データベースサーバが計画を計算する際に必要な作業量が減り、最終的にプロシージャが呼び出されるまでの時間が短縮されるケースがありました。最初の呼び出し時間を短縮するかどうかをテストするたびにストアドプロシージャを再コンパイルするようにストアドプロシージャを強制する... ストアドプロシージャの複雑さによって、データベースサーバーは異なるパラメータに基づいて継続的に再コンパイルする必要があった、SPを分割するか、大規模なselect文を複数のupdate文などに単純化することは、かなりの量を助けました。

他のアイデアは、たぶん間欠的に単純なgetDate()やそれと同様のものを頻繁に呼び出して、SQLサーバが起きている(希望が意味をなさない)... asp.netアプリケーションをIISのメモリに保持することと同じです。

0

デフォルトでは、ADO .NETでは接続プールが有効になっています。これは、アプリケーションによって使用される接続文字列を介して行われます。詳細情報Using Connection Pooling with SQL Server

0

複数のデータベース接続を使用すると、より効率的な場合があります。 1つのデータベース接続があるということは、可能な最良のアクセス速度が常に逐次的に制限されることを意味します。 1以上の接続を持つことは、コンパイラが並列アクセスを最適化する機会を与えることを意味します。私はあなたが.NETを使用していると思いますか?また

あなたが繰り返し同じSQL文を発行する場合は、その可能なデータベース・サーバは、したがって、迅速に結果セットのリターンを作る、短時間の結果をキャッシュします。..オープン接続のための

1

デフォルト値.NET接続プールではゼロです。

あなたが1以上にあなたの接続文字列で、この値を調整することができます。

"data source=dbserver;...Asynchronous Processing=true;Min Pool Size=1" 

は、これらのoptions in MSDNについての詳細を参照してください。

関連する問題