我们有许多具有相同配置的系统
- 一台服务器(虚拟或物理)
- 运行 SQL Server (SQL) 和 SQL Server 分析服务器 (AS)
- 多核
- 16GB 内存
SQL Server 每天晚上会进行大约 2-3 小时的处理,然后是 2-3 小时的 AS 处理。然后一整天只查询 AS。
假设这是一个专用服务器,并且没有其他应用程序值得关注,并且两组处理是完全同步的 - 没有重叠总是一个接一个 - 我怎样才能最好地设置 SQL 和 AS 服务器内存限制。
询问的原因是,如果我不为 SQL 设置限制,它将获取它可以获取的所有内存。但是 - 我的理解是,如果出现以下情况,SQL 会很乐意放弃此内存:
它没有使用它并且
另一个服务/程序请求它。
所以从逻辑的角度来看,我相信允许 SQL 尽可能多地使用它,但我不太确定 AS' TotalMemoryLimit
。我不确定 AS 是否会放弃它的内存。事实上,阅读更多让我相信让它占据一切是错误的。
这是否意味着我实际上需要为两者设置限制?我对最佳实践应该是什么感到困惑,考虑到流程不重叠,我们需要衡量什么。
希望这是有道理的。
我认为通过安排以下任务或服务来强制两个服务的手是可行的:
(a) 在 SQL Server 每晚处理之前,关闭 SSAS 服务,并增加分配给 SQL Server 的内存
(b) SQL Server 完成处理后,减少最大服务器内存并重新启动 SQL Server
(c) 启动 SSAS
这假定 SSAS 在 SQL Server 处理时不需要联机。否则将(a)从“关闭”更改为“重新启动”......只要 SSAS 在 SQL Server 处理时没有主动做任何事情,就不必担心它会偷回内存。
这还假设您希望每个服务重叠内存消耗,并在不同时间使用相同的内存 - 我确信有一些方法可以使用亲和力 / NUMA 等来完全隔离它们的操作空间,或者在最坏的情况下托管他们在不同的机器上。
SQL 和 SSAS 是否需要同时运行?如果不是,你100%确定吗?
我会考虑为 SQL 和 SSAS 设置内存设置,看看它们是否可以相互协作。
我们需要为操作系统、其他进程和多页分配留出一些内存。也许是4G?
尝试这样的事情...
在 SQL 端,将 Max Server Memory 设置为 12G,Min Server Memory 设置为 6G。
在 SSAS 端,将 TotalMemoryLimit 设置为 12G,将 LowMemoryLimit 设置为 6G。
此外,不要启用在内存中锁定页面。
尝试几次迭代,向上或向下调整这些数字。
如果这不起作用,并且您知道事实上 SQL 和 SSAS 不需要同时运行,那么我会尝试 Aaron 的调度作业以关闭和打开服务的建议。