2012-05-15 73 views
0

我有一个1000万条记录的表,需要加载全部内存(缓存应用程序)。SQL Server 2008在10 Mil记录表上选择性能 - 很慢?

表结构是这样的:

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进行测试的,结果几乎相同。

我正在使用SQL Server 2008 R2 Std,具有32 GB Ram和SSD磁盘RAID的16核心服务器上,没有其他应用程序或连接到SQL Server。

从性能计数器我可以看到没有队列/磁盘/ CPU使用,因为数据库完全在内存中。在执行查询时,唯一可见的信息是SQL和SSMS之间大约6 MB/s的缓慢网络流量。

所有测试都在本地机器上完成。

有关如何加速或在哪里寻找问题的任何建议?

回答

0

我想这不是SQL服务器问题,它更关于从数据库传输大量数据到本地Windows交换文件/内存。为什么你需要所有的表,SQL服务器会在正常情况下找出哪些页面应该保留在缓存中。

+0

我们正在缓存我们服务中的所有数据,以便更好地响应我们的交易系统。缓存表很少发生变化。该服务现在非常适用,但我们正在研究加速重启过程。 – Marko