小编Ste*_*ven的帖子

SQL Server 没有正确使用内存?

我有一个包含两个表的数据库。一个表大约有 2000 万行,另一个表大约有 7000 万行。

当我在这两个表上运行 sp_spaceused 时,我发现数据的总大小为 ~6.7GB,索引的总大小为 ~2.6GB。加起来总共约 9.3GB。

这是该服务器上唯一的数据。

我是 SQL 新手,所以我假设在整个数据集和索引加载到内存后,这两个表将占用的 RAM 量接近 9.3GB。但我显然大错特错,因为在运行查询几分钟后,SQL Server 进程占用的内存将达到 30+GB 并继续攀升。我什至测试过一遍又一遍地运行相同的查询,并且占用的内存量继续攀升。

RAM 过多的原因是数据的最终大小将是此大小的 5-6 倍,这将用于数据分析。

我的问题是为什么 SQL Server 使用这么多内存?如果整个表和索引都加载到内存中,它继续加载到内存中的是什么?有什么办法可以控制这个吗?如果我的目标是内存分析,除了非聚集索引之外,还有其他类型的索引可以使用吗?我一直在阅读列存储索引,但在对较小的数据集进行测试后,与使用列存储索引相比,我实际上能够通过完全删除索引来获得更好的性能。

总的来说,我对这台服务器发生了什么感到困惑。任何人都可以提供一些指导吗?目前我正在尝试测试 SQL Server 2014,但它仍在 CPT2 中,因此在发布之前它不是解决方案。

我还研究了基于列的存储技术,例如 Amazon Redshift,但它们的服务不符合 HIPAA 标准。

这个问题上,我发现了一些要运行的查询。我现在数据库的缓存大小是 32230.390625。这大于数据库总大小的 3 倍。

db_buffer_pages = 4125490

db_buffer_MB = 32230
Run Code Online (Sandbox Code Playgroud)

我还想做一些测试,并决定完全擦除数据库,重新启动 SQL 服务,并重新加载数据。当我这样做时,它使用了大约 20 GB 的 RAM。我不明白为什么。这是原始数据和索引大小的两倍多。

sql-server-2012

2
推荐指数
2
解决办法
1103
查看次数

标签 统计

sql-server-2012 ×1