サイトがダウンして再起動されるまで、CPU 使用率が 100% に跳ね上がり、100% のままになるという問題が発生しています。コードを調べて、可能な限りすべてを最適化しましたが、これはまだ起こっています。
キャッシュで行うことは、SQL サーバーから構造全体 (最大 6000 行) をロードするクエリを実行し、それをキャッシュに格納し、そのキャッシュをクエリして、アプリケーションの残りの部分全体で実行する必要があるさまざまな操作を実行することです (データに対して実行する必要がある多くの再帰操作が必要であり、それ以外の場合は SQL サーバーに大きな打撃を与える可能性があります)。
上記の説明は、SQL キャッシュの依存関係を使用すると、SQL サーバーで CPU スパイクが発生するように思われるためです。無効にすると、同じ量のデータをキャッシュしていても、(SQL サーバーまたは Web サーバーで) スパイクは発生しなくなります。
SQLキャッシュの依存関係がこのような動作を引き起こす可能性があることを知っている人はいますか? 使用する SQL サーバーは SQL Server 2008 R2 です。Web サーバーは IIS 7.5 で、ASP.NET 3.5 を使用しました。この Web サーバーはクラスター (x2) として設定されており、両方とも同じ SQL サーバーを指しています。
これは、キャッシュをロード/セットアップするコードです。
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);
}