0

これは非常に奇妙です。単純なコードの一部

        using(SqlConnection
        {//open connection 
            using(SqlCommand
            {//Specified parameters and SP name
                using(SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.Read())
                    {
                    // Parse it and return an object.

                        return new MyObject
                                   {
                                      prop1 = (int)reader["column1"]
                                      ...

                                      propN=reader["columnn"].ToString()
                     }

実行には最大 3 分かかる場合がありますが、Management Studio から同じ SP を実行すると 1 秒未満で実行されます!

このコードは別のサーバーで実行されます。また、Sql Profiler は、コードから実行した場合は数百万回の読み取りを報告しますが、Studio で実行した場合は 5000 回未満の読み取りを報告することもわかりました。

それがなぜなのか、私にはわかりません。どんな助けでも大歓迎です。PS実行計画はSPにバインドされていませんか?それを実行するために使用されたクライアントに違いはありませんか?

4

1 に答える 1

0

実際には答えではありませんが、少なくとも解決しました;)実行計画をキャプチャしてSQLプロファイラーを実行すると(Davidがほのめかしたように)、最初と2番目のシナリオで異なることがわかりました。統計/指標に問題がある可能性があると仮定したよりも、オプティマイザーには非常に貧弱なオプションがありました。インデックスを再構築することで問題が解決し、両方の方法が互いに近くで (時間的に) 実行されました。したがって、これが発生した場合は、インデックスの断片化と統計の最終更新を確認してください。

于 2013-03-21T20:42:56.440 に答える