私は 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 サイトでは、クラッシュします。SqlTimeout
3 つのページのうちの 1 つで例外をスローします。その結果、ページをクリックすると、ほぼすべてのページで上記の例外が発生します。
ハードウェアのパフォーマンスを確認したところ、プロセッサの消費量は I7 3.6 GHZ の 70% で、RAM の消費量は 1.5 GB です。しかし、より多くの空の RAM メモリがあります。どうすればこの問題を克服できますか?
どんな助けでも大歓迎です。