SQL Server 2008 R2的一般内存要求


11

我对DBA的工作没有经验,但是我正在尝试为SQL服务器请求更多资源,并希望我可以请一些聪明的人对应该运行的内容进行粗略的估计。我怀疑IT给生产sql服务器的资源分配很低。

硬件软件:

数据库:SQL Server 2008 R2企业数据库

Windows:Windows 2008 r2 Enterprise 64位,可以肯定在VMware上运行。

处理器:Intel(R)Xeon(R)CPU E7-4860 @ 2.27GHz 2.26 GHz(2个处理器)

安装的内存:4GB

数据库文件硬盘:300GB

备份硬盘:150GB

日志硬盘:100GB

应用:

我们有3个主要数据库,它们总共增加了大约170GB的数据,在同一服务器上的Reporting Services数据库(SSRS)可能每天存储10个不同的报告(每个报告平均包含70万条记录)。我们的用户群大约有20个同时用户,其中可能有5个被认为是“资源密集型”的,可以生成数据密集型大型报告。大多数用户通过asp.net网站和报表服务器网站与数据库进行交互。此外,我们的开发人员通过直接远程连接到服务器(最多2个远程连接),在BIDS中广泛使用SSIS。最后,我们有一个相当复杂的数据仓库操作,它可能每天也通过在服务器上运行的SSIS包带来300万条记录。

当前问题:

我们的服务器长期存在超时问题,对网站的响应时间非常糟糕。我怀疑我们拥有的内存量(4GB)可能是一个很大的瓶颈。我们先前对额外内存的请求已被拒绝,我们需要执行更多查询优化来获得共同的响应。虽然我们不是sql专家,也不是(我相信您可以通过我们的设置告诉您)db admin专家,但我想确保的是,如果硬件不是硬件,那么我不会花太多时间试图挤出一点潜在的性能瓶颈。

谢谢大家避免tl!dr!


7
他们希望使用4 GB的内存来服务170 GB的数据吗?没有任何查询调整将解决此问题,并且它们超出了他们的要求。
亚伦·伯特兰

向他们显示数字(性能统计信息)。您还可以向他们显示Microsoft文档,该文档显示Window Server 2008 R2的最小内存为4GB。这对于SQL Server来说并没有太多的余地。

2
您的等待状态显示什么?我怀疑您看到很多PAGEIOLATCH_XX正在等待您的查询。如果是这样,则可以使用它作为证明额外的内存将是有益的。
SQLRockstar

2
这样一来,您就有了内存,您可以开始研究更好的IO子系统。硬盘驱动器对于一个经常使用的数据库是一个IOPS笑话。这些应该是驱动器。您不购买驱动器作为容量,对于数据库购买的驱动器作为IOPS源。这意味着512gb SSD将非常适合数据库文件。标准的“让它变大又便宜”将杀死数据库。
TomTom

@TomTom我确定(我希望)我们有一个raid数组。我不确定如何检测到它。我只是将硬盘驱动器描述基于Windows服务器上“计算机”窗口浏览器中显示的内容。
RMuesi

Answers:


14

希望我能够得到关于应该运行的粗略估计。

如果没有有关您的查询和数据大小的更多信息,则很难给您任何估算,更不用说准确的估算了。

数据库:SQL Server 2008 R2企业数据库

Windows:Windows 2008 r2 Enterprise 64位,可以肯定在VMware上运行。

处理器:Intel(R)Xeon(R)CPU E7-4860 @ 2.27GHz 2.26 GHz(2个处理器)

安装的内存:4GB

两个处理器(我假设它在VM中以2个内核公开)可能未必会配置不足。分配给VM的核心不一定直接映射到物理核心(甚至在需要时甚至允许使用单个核心的100%!),因此您可能会发现这是比内存更灵活的资源。如果没有有关您的工作负载或硬件/虚拟化配置的更多信息,我想说将其增加到4就可以了。

内存分配。好家伙。这对于工作负载而言严重不足。Windows本身至少需要2-3 GB的空间才能保持快乐,并且在盒子上运行BIDS的2个用户中的每个用户都至少需要500 MB。这样一来,包装盒就已经花光了,我什至没有开始弄清楚数据库需要多少。

大多数用户通过asp.net网站和报表服务器网站与数据库进行交互。

您没有说,但是如果它们在同一盒上运行,则还需要考虑它们的内存需求。

最后,我们有一个相当复杂的数据仓库操作,它可能每天也通过在服务器上运行的SSIS包带来300万条记录。

假设此操作在没有系统用户的夜晚运行,除非运行时间太长,否则我认为这不是问题。这部分事情是您最少的担心;实时用户更为重要。

我们先前对额外内存的请求已被拒绝,我们需要执行更多查询优化来获得共同的响应。

如上文所述,当前已配置的内存量完全不足。但是,与此同时,在另一端,您极不可能配置足够的内存以能够一次将整个数据库保留在内存中。

即使您得到了这样的全面答复(顺便说一句,这可能与您是否有理由说服额外资源的理由,而不是实际的资源使用本身有关),很可能数据库的效率可能是改善。但是,没有任何一个调整可以解决您现在遇到的问题。那个建议对我来说完全是初学者。

我将采用总体方法,即当前配置的内存量低于所需的最小数量(应尽快更正),并且可能需要额外的资源才能将用户体验提高到可用水平,同时进行改进以提高效率。系统。

以下是一些想法(按攻击顺序):

  • 如果您能够证明每次配置更多资源都会提高多少性能,那么您将赢得胜利。使用性能监视器日志记录性能指标(注意:日志记录部分非常重要),包括网站响应时间(如果可以)。开始做这个现在在做任何事情之前,。当您最终达到最小内存量(您不会马上获得32 GB)时,突然您现在有证据表明添加的内存可以改善性能……这意味着添加更多的内存也可能会有所帮助!如果您没有在当前配置上收集基线,那么当事情达到建议的最低水平时,您将错过机会。

  • 分析服务器的等待统计信息。这将告诉您系统中最大的瓶颈是什么。您可能会遇到PAGEIOLATCH_XX最常见/最长的等待时间,这表明执行过多的I / O操作无法从磁盘获取页面。可以通过添加内存来缓解这种情况,因此,由于所需的数据已在内存中,因此物理I / O的频率降低了。尽管此分析几乎是已成定局的结论,但事实证明您已经收集了这些统计数据,这在为资源需求辩护时会给您带来更多的弹药。

  • 正如我上面提到的,内存的最低要求没有得到满足。收集所有正在运行的软件的建议硬件要求集,还可以获取任务管理器的屏幕截图。仅此一项就足以当场证明至少有4-8 GB的空间。如果他们仍然拒绝,请尝试说服他们让您试用一个星期,然后再归还(您正在收集效果统计信息,因此您无需归还它,因为周中您可以就能证明情况有所改善)。如果他们仍然拒绝,那就意味着您将失败。URLT

  • 如果您可以卸载某些工作负载(尤其是尽可能避免远程处理),则这将增加数据库可用的内存量,这一点更为关键。

  • 您将无法在内存中,以适应整个数据库一次,这意味着你需要设置SQL Server的最大内存非常仔细地设置为防止内存过度承诺,它可以杀死一样的性能没有别的。实际上,过量使用甚至比不能完全容纳内存中的数据还要糟糕。您很可能现在就处于这种情况,仅是因为根本没有可用的内存,而且最大内存设置很可能已设置为默认值(无限制)。

  • 由于您正在运行SQL Server Enterprise Edition,并且内存非常宝贵,因此我强烈考虑实现数据压缩。这将在增加CPU使用率以节省内存空间(并因此减少磁盘访问,相对较慢)方面取得平衡。

  • 调整数据库。就索引和访问模式而言,结构和查询可能会使用改进。另外,如果经常扫描和聚合大量数据,则创建索引视图,摘要表或预先计算的报告可能会非常有帮助。

  • 这可能是一个漫长的过程,因为这可能意味着需要更多的硬件配置,但要实现缓存解决方案。最快的查询是您从未做出过的查询

这些只是一些想法。最重要的是,仅靠调优无法解决这里的问题,仅靠硬件也无法解决,即使后者可能会缓解大多数眼前的问题。真正的方法就是这样:在短期内将硬件投入到该问题上来扑灭大火,并在长期内对该问题进行调整,以尽最大可能解决根本原因。


1
约翰,我很喜欢您的答案和+1,但在这种情况下,似乎亚伦的评论引起了人们的关注,无论他们多么努力地进行调整,他们都只需要更多的夯。
2013年

2
@Ali:是的,我同意,我在回答中提到了这一点。通常,我想专注于获取更多RAM的策略,因为这似乎是这里的问题。(如果根本无法使用,那就是一个单独的问题。)
乔恩·塞格尔

非常感谢您提供详细的答案!我是数据库性能调优的新手,所以我只是想了解从哪里开始。我已经有了一些阅读材料和Performance Monitor,现在我只需要了解指标。但是您的建议为解决此问题提供了一个很好的路线图。再次感谢。
RMuesi

@RMuesi:非常欢迎。如果您对如何完成所需的工作有任何疑问,请随时发布(当然,请先搜索),社区将乐意为您提供帮助。
乔恩·塞格尔

9

这就是账户“反豆”的疯狂。您将在RAM上花费的$ 1100- $ 2500可能会在一周内收回成本!

他们正在超时使用20名员工,其中5名正在从事“资源密集型”工作。我以为他们的时间并不便宜,其中一些报告是那些没有在薪水单上签字的老板会喜欢的报告。那浪费了无数的浪费在重新传递和处理挫败感上。

向他们解释,他们可能正在寻找每GB 15-20美元的RAM。128GB的RAM现在大约在$ 2200- $ 2500,并且RAM价格目前上涨了一点。即使您的服务器主板不支持它(这很奇怪),但64GB的价格在1100-1200美元之间(我刚刚检查过,这是戴尔提供的服务器内存质量,没有折扣)。甚至64GB的ram都可以带来巨大的变化(特别是如果我们确保避免对大表进行表扫描)。

找出浪费了多少时间,然后问他们是否值得$ 1100- $ 2500。如果您仅花费$ 1100并获得64GB内存,请确保避免在大型桌子上进行桌子扫描。使用更多具有索引的磁盘(如果有支持它的延迟),以避免大型扫描转储内存。


5
对于精神错乱说得好。4GB的内存比我最近建议的台式机内存要少。现在,它正在尝试在170gb数据库环境中运行。该死的笑话。但是,嘿,针对beancounters的虚拟化意味着您可以摆脱大型的昂贵服务器;)
TomTom

2
完全同意。至少在OP场景中的bean计数器已经从物理服务器上拔下了爪子(希望如此!)
Ali Razeghi 2013年

1
相信它。我不。典型的服务器将是具有大量RAM和-LAAAAARGE廉价光盘的服务器。因此,您可以在它们上运行很多虚拟机。毕竟,RAM通常是限制因素,不是;)吗?结果将是惊人的IOPS性能-即使没有数据库也是如此。去过那里,看到了。64GB内存,2TB镜像SATA磁盘;)
TomTom

感谢你的回答。我对此表示怀疑,但只是没有数据来证明问题部分是硬件的模仿。我现在正在努力。
RMuesi

2
您可能只想让他们知道SQL Server是内存数据库引擎。从磁盘读取数据,甚至是SSD(我很确定这家商店都没有使用)都非常缓慢。从RAM读取大约需要5ns。通过SET STATISTICSIO ON向他们显示一个执行计划,该计划显示表的扫描和读取。向他们展示物理读取与逻辑读取。物理是从磁盘进行的。
2013年

-1

我正在使用46GB的Ram运行2008 R2。没有虚拟机。SQL Server 2008。

数据库约为300GB。

我最近将数据库放在固态驱动器上,并将数据输出增加了两倍。

该服务器当前正在使用45GB的Ram,并且运行良好。

FC Sata袭击和SAS SCSI袭击。总共26个逻辑驱动器。144个旋转磁盘。

昨天,当我只有50TB的完整硬盘驱动器连接并传输数据时,我仅使用24GB的ram。今天,我有160TB的完整硬盘驱动器,并且正在使用45GB的ram。

我的应用程序未使用超过400MB的内存。

我怀疑您需要快速固态驱动器或ram驱动器上的数据库。基本上,尽管您需要更多的内存。


IBM exFlash 400GB MCS 4400美元。那就是我要去的地方。
大卫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.