我们的应用程序在具有 4 核 CPU、8GB RAM 和 Sql Server 2008 R2 标准版 (10.50.1600.1) 64 位的服务器上运行。专用于 Sql Server 的服务器,没有运行其他重型服务。
我们已将最小/最大内存使用量分别设置为 4/6.4 GB。AWE 已关闭,并且已锁定页面计数始终保持为 0。Sql Server 的处理器亲和性自动维护,Windows 的虚拟内存管理也设置为自动。
问题是,物理内存使用量从未超过 723 MB。即使在后台运行负载很大的报告时也是如此。我们面临着巨大的锁定等待。
服务器在虚拟机上运行,我们认为这是问题的根源,但迁移到物理服务器后问题仍然存在。
什么可能限制内存的使用?
编辑(操作系统):Windows 8.1。数据库之前在容量几乎相同的虚拟 Windows 2008 服务器上运行。出于测试目的,已移至此服务器。应用程序的配置足够了。
我尝试过页面锁定。使用组策略设置向运行该服务的 NETWORKSERVICE 用户授予页面锁定权限。然后打开 AWE。没有帮助。
编辑(锁定):这有一个明显的原因。我们的手持设备在 SQL Server CE 上离线传输数据。一旦它们开始将日常数据传输到主数据库,由于长时间运行的事务,其他客户端就会等待获取锁定,主要是 LCK_M_S。虽然 PDA 逐行传输数据,但由于索引,引擎大多将锁定放在多个页面上。我们不知道如何解决这个问题,因为我们无法选择不使用事务。
下面你可以看到来自同一应用程序的两个安装的一些指标。右边一栏的值属于这个问题中的服务器。左边的属于最大的实现。第一个显然需要更多的内存。
Total Mem (GB) 14 8
Mem Used by SQL Server (GB) 12,5 0,5
Page Faults (per minute) 13500 1200
Key Lock Count 6 3
Key Lock Wait (sec) 20 11
Page Lock Count 8 3
Page Lock Wait (sec) 65 591
Stolen Pages 145945 12525
Database Pages 1045799 25564
Database Size On Disk (MB) 52504 269
User Connections 95 18
Buffer Cache Hit Ratio (%) 100 100
答案1
最大服务器内存意味着您的服务器不能使用超过该数量,而不是必须使用该数量。最小服务器内存并不意味着必须也不要使用该数量;这意味着一旦服务器使用了那么多内存,它就不会放弃低于该数量的内存。基本上,SQL Server 会使用它所需的内存量,直到达到您设置的上限,如果它停止使用,它可能会放弃部分内存,除非您设置了最小内存。
这就是说:
Microsoft 对 SQL Server 2008 R2 内存的建议是……乐观的。(他们建议 4GB 或更多。)您没有说明您使用的是什么操作系统,但他们还建议 Windows Server 2008 R2 使用 2GB RAM,2012 使用 8GB RAM。
基本上:操作系统安装的“最低” RAM 数为 512MB,基本上就是“安装程序将拒绝在此以下运行”的数字。(对于 SQL,1GB RAM 也是如此。)
我的看法是?操作系统正在使用您的 RAM。
答案2
你没说你用的是什么操作系统?但服务器总共只有 8GB?对于现代机器来说,这简直是太低了,当你说物理内存使用量从未超过 723MB 时,我假设你指的是 SQL 服务器,而不是整个服务器?只是想确定一切
好吧,不得不同意上面的帖子,你只有 8GB 内存是出于某种物理原因吗?现在笔记本电脑上都有这种内存。我甚至不确定,我很乐意在 Win 2008 上运行一个 8GB 的文件服务器,更不用说在其中添加 SQL 了?并不是说 RAM 很贵,将机器上的 RAM 最大化,假设你可以放入更多,如果你不能,那么这是安装在某种台式机上的东西吗?你有什么样的驱动器/阵列?数据库是 I/O 密集型的 SATA 驱动器,这真的很垃圾,如果你镜像了它们,情况会更糟,因为一切都被写入了两次。就我而言,数据库的标准操作程序是 RAID 10,没有理由不使用它,它非常有弹性,速度非常快。