Dru*_*key 4 sql-server-2008 sql-server sql-server-2008-r2
我目前正在管理 SaaS 系统的服务器集群。我们目前有 6 个运行 MSSQL 2008 R2 的 SQL 服务器。每台服务器都是一个四核虚拟机,在服务器机架上提供 16GB 的 RAM。我们使用 SQL Server 允许的最多 50 个实例填充每个服务器。每个实例将被最多 10 个客户端同时偶尔访问,并且每个数据库的大小通常只有 100MB 到 500MB 左右。
目前,每个实例都是在没有设置内存限制的情况下安装的,但我们发现第一个实例往往会使用过多的内存,而后面的实例(按启动顺序)只有 200MB 可用,而服务器操作系统的内存不足1% 的物理内存可用。这似乎会导致过度的磁盘交换和延迟问题。
在这种情况下拆分内存分配的推荐方法是什么?是否有一个公式可以根据客户端数量和数据库大小来确定一个实例至少需要多少内存?我可以为每个实例设置最大 300MB 并完成它吗?
我终于想出了如何配置看起来非常稳定并且在所有实例中完全对称的所有内容,并且由于它需要进行一些挖掘和操作,因此我认为我应该分享我的解决方案。这可能并不适合所有人,但对我来说似乎是最好的解决方案。
关键在这个 API:https : //docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setprocessworkingsetsizeex
这允许您在每个进程的基础上设置最小和最大工作集大小的硬限制。这对我来说似乎是最干净的,因为它允许我告诉 SQL Server 在这个工作集大小内使用它想要的尽可能多的内存,并且它似乎自己进行了充分优化,而不是满负荷运行并试图占用更多内存每时每刻。每个实例将交换更多的整体,但由于每个实例的使用是零星的,它似乎工作得很好,如果它成为一个问题,我可以在服务器机架中的 SSD 上提供一些交换分区作为每个服务器的交换空间. 当每个实例启动时,我通过一个 powershell 脚本将每个实例的工作集大小设置为 300MB,最小操作系统总是有 1GB 可用,每个人似乎都很高兴。
Kin*_*hah 13
每台服务器都是一个四核虚拟机,在服务器机架上提供16GB 的 RAM。
我们使用 SQL Server 允许的最多 50 个实例填充每个服务器。每个实例将被最多 10 个客户端同时偶尔访问,并且每个数据库的大小通常只有 100MB 到 500MB 左右。
恕我直言,您的总内存太低。请阅读我的回答(带有相关链接) SQL Server 最大和最小内存配置。当您在给定主机上运行多个 sql server 实例时,它们会发生变化。
限制多实例服务器上的 SQL 服务器最大内存是一种平衡行为,最大内存仅适用于缓冲池。如果 sql server 需要更多内存,它将使用它。
您甚至可以在内存中使用锁定页面(在您的情况下,在启用 LPM 之前,我仍然会选择更多内存)。
作为起点,
为您的实例设定基准。这将帮助您衡量什么对您的工作量有利/可以接受。
使用OptimizeInstanceMemoryAaron 博客中的脚本来帮助您入门。博客文章介绍了如何在发生故障转移时动态平衡最大内存。
附带说明一下,您应该监控 CPU、内存和磁盘利用率,并根据每个客户端的使用情况向它们收费。或者,您可以移动到 Azure :-)
| 归档时间: |
|
| 查看次数: |
21071 次 |
| 最近记录: |