0

以前、SQL Server ボックスで実行が遅すぎるストアド プロシージャについて質問したことがありますが、クエリ アナライザで sproc を実行すると、1 秒未満で返されました。クライアントは .NET 1.1 winforms アプリです。

ユーザーのボックスに VNC を接続できましたが、もちろん SQL ツールがインストールされていなかったので、Excel を立ち上げて VBA を起動し、まったく同じパラメーターで sproc を呼び出す簡単な関数を作成しました。

sproc は 1 秒未満で返されることがわかり、すべての行をすぐにループできます。ただし、接続を閉じるには、5 秒から 30 秒という非常に長い時間がかかります。

接続を閉じるのになぜそんなに時間がかかるのでしょうか?

4

3 に答える 3

1

接続プール?

または、クライアントライブラリのサービスパックまたはKB記事を確認します。

于 2009-04-10T14:52:50.733 に答える
1

あなたが説明する症状は、ほとんどの場合、「正しくない」キャッシュされたクエリ プランが原因です。これは大きなトピックですが (SO のパラメーター スニッフィングを参照してください)、データベースのインデックスを再構築し、すべての統計が最新であることを確認することで、多くの場合 (常にではありません) 問題を軽減できます。

于 2009-04-10T01:47:42.963 に答える
1

SqlDataReader を使用している場合は、必要なデータがすべて揃ったら、SqkDataReader で Close を呼び出す前に、SqlCommand で Cancel を呼び出します。これにより、出力パラメーターと戻り値が入力されなくなり、接続を閉じるのが遅くなる可能性があります。ユーザー例外によってキャンセルされる可能性があるため、try catch ブロックで実行します。

于 2009-04-10T02:18:54.777 に答える