当我查看 SQL Server 时,我检查的第一件事是,“相对于我们在此处托管的数据量,这个东西有多少内存?” 长期以来,我一直在使用一些临时数字,但借助选择公共数据共享的SQL ConstantCare®用户的数据,让我们进行更深入的分析。
我上周四收集了大约 1,400 台服务器的数据,然后排除了堆叠实例(安装在同一操作系统上的多个实例)、Azure SQL DB、托管实例和数据少于 10GB 的服务器。
SQL Server 有多少内存?
中值 SQL Server 有 19% 的数据大小作为 RAM。意思是,如果它托管 100GB 的数据,它在服务器中有 19GB 的 RAM。(最大内存大小和文件大小是另一篇博文的讨论。)
从该中位数中举几个例子:
- 84GB 数据托管在具有 16GB RAM 的 SQL Server 上
- 32GB RAM 托管 166GB 数据
- 55GB RAM 托管 289GB 数据
不过,让我们以不同的方式对其进行切片:让我们从这个样本中取出中值数据量,即 219GB。(如果我按服务器托管的数据量对服务器进行排序,则中间值为 219GB。)在该范围内的服务器中,一些包括:
- 219GB 数据托管在具有 15GB RAM 的 SQL Server 上(操作系统有 7% 的数据大小)
- 128GB RAM 托管 222GB 数据 (58%)
- 24GB RAM 托管 222GB 数据 (11%)
这些数字发人深省,但在您提出问题之前,请先考虑这一点:数据大小与硬件大小本身并不意味着用户 满意。还有很多其他因素在起作用,例如查询量、调整完成、等待统计信息等。
来自内存与数据大小配置极端的一些示例:
- 4.2TB 数据托管在 16GB RAM 上(哈哈哈)
- 20TB 托管在 64GB 上
- 10GB(不是 TB)托管在 64GB RAM 上
- 61GB 托管在 256GB RAM 上
随着数据大小的增长,内存不会。
我根据服务器托管的数据大小将服务器分成四分位数:
- 托管 10-59GB 数据的服务器:平均 RAM 大小是数据的 74%!(例如:27GB 数据,20GB RAM)
- 60-224GB 数据:23% RAM 大小(例如:210GB 数据,48GB RAM)
- 225-600GB 数据:13% RAM 大小(例如:488GB 数据,64GB RAM)
- >600GB 数据:6% RAM 大小(例如:2.1TB 数据,128GB RAM)
低端百分比有点倾斜,因为在 10-59GB 层中,操作系统内存意义重大。在我们的 SQL Server 安装指南中,我们告诉人们至少为操作系统留出 4GB,我认为大多数系统管理员会认为 2GB 是最低限度。但是,随着数据的增长,百分比下降——这是相当陡峭的。
企业版服务器是否有更多内存?
总体而言,企业版服务器处理大量数据,并且配置了更多内存来处理这些数据:
- 标准版中位数据大小为 168GB,中位 RAM 大小为 32GB
- 企业版:中位数据大小为 358GB,中位 RAM 大小为 54GB
- 开发者版:数据 111GB,RAM 16GB(可怜的开发者)
所以就纯粹的服务器大小而言,是的,企业服务器更大,但作为数据的百分比,发生了一些有趣的事情:
- 标准版中位数:RAM 是数据大小的 23%
- 企业版:RAM 是数据大小的 17%
- 开发者版:11%(来吧,伙计,让他们获得一些内存!)
较旧的 SQL Server 内存是否更少?
你们都在挨饿恐龙:
- SQL Server 2008 和 2008R2 中位 RAM 是数据库大小的 15%
- SQL Server 2012:18%
- SQL Server 2014:19%
- SQL Server 2016:22%
- SQL Server 2017:24%
这可能是由于几个因素造成的,比如不关心旧服务器的性能,或者处理内存容量低得多的旧服务器。
从这往哪儿走
我接下来的想法是:
- 哪些服务器更有可能遇到 PAGEIOLATCH 等待?
- 哪些服务器在查询工作区内存不足时更有可能遇到 RESOURCE_SEMAPHORE 中毒等待?
- 我可以构建一个基于数据大小预测用户幸福感的大小调整工具吗?(意思是,如果你将 3TB 的数据放在 64GB RAM 的虚拟机上,等待统计数据会有多糟糕?)
- 那么,我们可以给客户同样的建议吗?例如,向他们展示他们在数据大小、内存和幸福度方面的排名?