问题
我们有一个 SQL Server 实例(2008)运行我们的软件,我们认为用户数量很少(在任何给定时间大约有 30 个并发连接到服务器)
作为供应商,我们不是 SQL DBA,我们只为这类问题提供基本技能。大多数客户都有自己的 SQL DBA 来担任这个角色,但有时如果客户没有足够的支持,我们必须介入并提供帮助。
尽管他们确实将此服务器用于 SQL 之外,而且这是一个必须单独处理的问题,但我们最近注意到此客户端的 sqlservr.exe 进程使用的 RAM 比我们预期的软件要多得多。
背景
首先,让我先提一下,我了解 SQL 最大服务器内存默认值基本上设置为使用服务器可用的所有内容。我们将该值更改为 10GB,因为考虑到它们的大小和所使用的软件部分,我们预计它们在任何给定时间只需要大约 4-6GB。
一些可能与我的问题相关或不相关的信息:
- 他们将我们软件的数据库设置为完全恢复模式,并且日志在大约 3 年的时间里一直在不断增长而无需维护。
- 当我们重新启动 SQL 服务时,用户重新进入软件并在大约 24 小时的时间里使用我们期望看到他们使用的 RAM 量(大约分配的 10GB 的 4-6)
- 我们一直在运行 Perfmon 以将一些计数器结果与没有出现此问题的一段时间进行比较,但没有注意到日志之间有任何显着差异
- 检查事件查看器是否存在任何明显的内存问题
结论
我目前唯一的猜测是,这与庞大的日志/恢复模型或某些与缓存相关的 SQL 设置有关。也许这是 SQL 专家计划看到的正常行为,但根据我们在 SQL Server 中运行软件的有限经验,对于这种大小的安装来说,这是不正常的。
因此,将其总结为一个 TLDR:
SQL Server 2008 恢复模式和日志大小是否会影响 sqlservr.exe 进程的内存使用?如果答案是肯定的,那么我对 SQL 的“问题”的描述是否正常,而我们之前没有经历过?如果答案是否定的,您会建议调查哪些其他事情来解决我的问题?
这个数据库有多大?SQL Server 喜欢将整个数据库放在内存中。从您的问题来看,这听起来像是一个 200 MB 的 MDF 和一个 250 GB 的 LDF,或者类似的东西。
除非他们严重忽略了数据库,否则恢复模型不会进入其中,他们显然是。
在您实施基本的数据库维护之前,我个人不会浪费任何时间查看其他任何内容(尽管 10 GB 让我觉得 SQL Server 的内存分配很吝啬)。