0

cpuの使用率が上昇し、サイトが停止して再起動されるまでSQL Serverが100%のままであるという問題が発生しています。私たちはコードを実行し、可能な限りすべてを最適化しましたが、これはまだ起こっています。SqlCacheDependencyに起因するSQL ServerのCPU使用率が高くなる

キャッシュとは、SQL Serverから構造全体(〜6000行)をロードし、キャッシュに格納し、そのキャッシュをクエリして残りの部分で実行する必要のあるクエリを実行するものです。アプリケーションでは(データに対して実行する必要のある再帰的操作が多数あり、それ以外の場合はSQL Serverにとって大きなヒットとなります)。

これは、sqlキャッシュの依存関係を使用すると、SQL Server上でCPUスパイクが発生するように思われるためです。無効にすると、同じ量のデータをキャッシュしているにもかかわらず、スパイク(SQLサーバーまたはWebサーバー上)に遭遇することはなくなりました。

誰かがsqlキャッシュの依存関係についてこのような動作を引き起こす可能性がありますか? 使用されるSQL ServerはSQL Server 2008 R2です。 WebサーバーはIIS 7.5で、ASP.NET 3.5を使用しました。このWebサーバーはクラスタ(x2)としてセットアップされ、両方が同じSQL Serverを指しています。

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)) 
{ 
    cn.Open(); 

    string query = 
     @"SELECT 
      id, 
      parentid, 
      field1, 
      field2, 
      field3, 
      field4, 
      field5 
     FROM 
      dbo.theTableWithDataInIt"; 

    SqlCommand cmd = new SqlCommand(query, cn); 
    cmd.Notification = null; 
    cmd.NotificationAutoEnlist = true; 
    SqlCacheDependencyAdmin.EnableNotifications(
     ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString); 

    if (!SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(
     ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString) 
     .Contains("dbo.theTableWithDataInIt")) 
    { 
     SqlCacheDependencyAdmin.EnableTableForNotifications(
        ConfigurationManager.ConnectionStrings["MyConnectionString"]. 
     ConnectionString, "dbo.theTableWithDataInIt"); 
    } 

    SqlCacheDependency dependency = new SqlCacheDependency(cmd); 
    cmd.ExecuteNonQuery(); 

    // 
    // Get Cache Data is a function that returns a DataSet with the data to be added to cache 
    // 
    Cache.Insert("mycache", GetCacheData(), dependency); 
} 
+0

"theTableWithDataInIt"テーブルが更新されていますか? SQLプロファイラトレースを実行して、クエリアクティビティが何であるかを判断しましたか? –

+0

データを更新できる管理部分がアプリケーションにあります。しかし、これは支配下に置くためにサイトをダウンさせる必要がある持続的なCPUスパイクを引き起こすほど十分に起こらないはずです。私たちはプロファイラを調べましたが、これは普通のことではありませんでした。 – computrius

+0

私たちはしましたが、犯人であるとは考えられませんでした。また、そのような場合は、SQL依存関係をオフにしても起こります。 – computrius

答えて

2

問題が解決された:

これは、ロード/キャッシュを設定するコードです。何とかインデックスが破損したり紛失したりしたことが判明しました。テーブル内のインデックスを右クリックし、[Rebuild]を選択すると問題が解決しました。

関連する問題