0

1,000 万件のレコードを含むテーブルがあり、すべてをメモリにロードする必要があります (キャッシュ アプリケーション)。

テーブル構造は次のようになります。

CREATE TABLE [TestTable] (
    [Id]        [int] IDENTITY(1,1) NOT NULL,
    [RefId1]    [int] NOT NULL,
    [RefId2]    [int] NOT NULL,
    [RefId3]    [int] NULL,
    [Credits]   [money] NOT NULL,
    CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ( [Id] ),
    CONSTRAINT [UK_Table] UNIQUE NONCLUSTERED ([RefId1],[RefId2],[RefId3])
)

テーブル サイズ: 364080 KB (データ) - 341648 KB (インデックス)

単純な選択でこの量のデータをロードするには、約 2 分かかります。

使用済みを選択:

SELECT  Id, RefId1, Credits, RefId3
FROM    TestTable WITH (NOLOCK)

これは SQL Server の通常の速度パフォーマンスですか? このクエリを高速化するにはどうすればよいですか?

クエリはキャッシュ アプリケーションと SSMS からテストされ、結果は実質的に同じでした。

32 GB RAM と SSD ディスク RAID を備えた 16 コア サーバーで SQL Server 2008 R2 Std を使用しています。他のアプリケーションや SQL サーバーへの接続はありません。

パフォーマンス カウンターから、データベースが完全にメモリ内にあるため、キュー/ディスク/CPU の使用がないことがわかります。クエリの実行時に表示される唯一の情報は、SQL と SSMS の間の約 6 MB/秒の遅いネットワーク トラフィックです。

すべてのテストは、ローカル マシンで実行されました。

これをスピードアップする方法、または問題を探す場所に関する提案はありますか?

4

1 に答える 1

0

これは SQL サーバーの問題ではなく、大量のデータを DB からローカルの Windows スワップ ファイル/メモリに転送することに関するものだと思います。なぜすべてのテーブルが必要なのですか? SQL サーバーは、通常のシナリオでどのページをキャッシュに残す必要があるかを判断します。

于 2012-05-15T22:19:30.330 に答える