2

私は asp.net MVC4 プロジェクトで作業しており、SQL Server 2008 を使用しています。私のデータベース テーブルには 100000 行が含まれています。また、接続文字列プロパティの最大プール サイズは 1000000 に設定され、プーリングは true に設定されます。

私のテーブル構造は次のとおりです。

CREATE TABLE tblNews
(
ID int IDENTITY(1,1) NOT NULL,
Url nvarchar(300) UNIQUE NOT NULL,
PubDate datetime NOT NULL,
Active bit NOT NULL,
Hit int NOT NULL,
...
)

そして、次のようなインデックスがあります。

CREATE NONCLUSTERED INDEX indexTblNews_Url
ON tblNews(Url)

私の選択クエリは次のとおりです。

CREATE PROC spNewsGet
   @Url nvarchar(300)
AS
   UPDATE tblNews
   SET Hit = Hit + 1
   WHERE Url = @Url
     AND PubDate > GETDATE()
     AND Active = 1;

   SELECT
      *
   FROM tblNews
   WHERE Url = @Url
     AND PubDate > GETDATE()
     AND Active = 1
   ORDER BY PubDate DESC

評価の低いサイトでは問題はなく、これは完全に機能します。しかし、100000 行のような大きなデータベースと、1 日あたり 2000000 人のユーザーがいる Web サイトでは、クラッシュします。SqlTimeout3 つのページのうちの 1 つで例外をスローします。その結果、ページをクリックすると、ほぼすべてのページで上記の例外が発生します。

ハードウェアのパフォーマンスを確認したところ、プロセッサの消費量は I7 3.6 GHZ の 70% で、RAM の消費量は 1.5 GB です。しかし、より多くの空の RAM メモリがあります。どうすればこの問題を克服できますか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

を使用している可能性が最も高いですSqlConnection。無限のタイムアウトを示すために、接続のConnectionTimeoutプロパティを に設定してみてください。0を使用していないSqlConnection場合は、同様のプロパティを設定できる可能性があります。

于 2013-10-23T15:09:22.527 に答える