我目前有一个数据库服务器有很多小的写入和一些比较大的读取数据库服务器的问题。 阅读performance更重要,因为人们参与,写作由自动化客户端执行。 这个数据库目前是30GB,并会长到一百个左右。
目前糟糕而丑陋的设置performance不佳
所以,由于它的许多丑陋的点(performance不佳,没有RAID,备份的外部USB驱动器),我打算build立一个新的数据库服务器。
我想过:
所以,三个问题:
这是最好的性价比组合吗? 这是否过度杀伤? 有更好的组合吗? 是否需要更多信息?
你知道一个价格合理的单机可以容纳10个磁盘,还是我现在必须去外部本地连接的存储?
任何build议以合理的价格/质量得到这样的东西?
对于大多数服务器CPU而言,32GB内存是一个不错的典型圆形数字,但是如果您正在查看至强5500(Nehalem)CPU,那么请记住,它们在每个CPU 3个DIMM的存储区中configuration最佳,并且双插槽服务器的多个6个DIMM你会看到更好的性能与24 \ 48GB RAM而不是32GB。
有很多服务器,将需要10个磁盘,但是否你会认为他们价格合理或不我不能说。 我怀疑你会发现任何一个像R300这样的1U硬盘都需要10个硬盘 – 惠普的360 G6可以把8个2.5英寸的SFF硬盘装入1U,基本的价格只有2K多块,而戴尔的R610基本相当于1U双插槽至强5500系统),但内部只能获得6个驱动器即使遇到DL380 \ R710 2U类服务器
像HP ML370 G6这样的可拆卸式塔架的价格大约为2.5万美元,但最多可以容纳24个驱动器。 戴尔的T710运行到了16点左右。
以上价格是1个CPU,没有磁盘和几乎没有RAM的底盘的最低价格价格。 configuration了这些驱动器的HP ML370,24 GB内存和双至强E5540 CPU将拥有约1万美元的清单价格。 其中大部分来自您的驱动器select – 通过select单插槽型号,您可能节省大约1500美元和2千美元,但随着4GB DDR3 DIMM每GB的价格比2GB贵50%左右,RAM的边际成本可能会增加模块。
编辑添加一些性能比较的想法。
与现有CPU相比,至强5540 2.53Ghz CPU的时钟频率将提高约50%。 使用SQL 2005的双套接字设置应该可以合理高效地扩展,所以在纯CPU中,上面列出的双套接字系统的CPU功率大约是R300的3倍。
设置平衡的DDR3 RAM @ 1066Mhz你应该看到约3倍的内存带宽,可能更多,因为我怀疑你目前的R300设置是不是最佳的。
就磁盘性能而言,如果增加一个体面的高级RAID控制器并正确地分离function,则可以将有效的随机IO容量至less提高一个因子(显然是足够的),否则可能会看到性能提高那。
目前基于至强5500系统的Tylersburg芯片组也将内存IO和其他内存分开,这些内存很难量化,但总是会带来一些好处。
这些系统比现有的系统要快很多倍,但这是否能够为您的用户提高性能取决于您当前的瓶颈。 如果这是一个devise不佳的应用程序或networking拥堵加强服务器本身并不会导致如此明显的收益。
如果你有很多的磁盘,比如某种forms的SAN,那么RAID10是一个明显的select,因为它兼有速度和容错能力。 但是,在大多数情况下,服务器上可以安装的磁盘数量是有限制的,在这种情况下,您需要考虑使用RAID5。
你的4个磁盘RAID10arrays的速度与2个磁盘RAID0的速度差不多,或者比不加速的磁盘速度快两倍,所以速度不会那么快。 使用4个磁盘的RAID5可以提供更快的数据stream读写速度,但随机访问写入速度稍慢(我已经在Dell Perc5 / i控制器上testing过,我认为其他控制器也是如此)。
我会考虑使用10个磁盘作为6个磁盘RAID10和4个磁盘RAID5。 将RAID5拆分成操作系统的小C:分区,其余部分作为日志文件的D:分区。 日志往往是顺序写入,所以较慢的随机访问速度不是这样的问题。 把数据放在RAID10的地方,随机存取速度高,尤其是高随机存取速度。
NB我不build议你把磁盘组织成RAID10和RAID5,但是我build议你使用这种格式的磁盘进行testing,并将速度与你对RAID1 + RAID10 + RAID10的build议进行比较。
JR
在我开始购买硬件之前,我会用性能监视器进行一些调查,以确保磁盘是滞后的。 如果性能问题是由这些“自动化客户端”阻塞导致的,则可能会发现新服务器上的性能与现在的性能没有太大差别。
编辑#1:我喜欢看平均。 磁盘秒/转移号码。 这实质上是驱动器延迟的一种度量。 我曾经使用队列号,但是你应该把它们分成RAIDarrays中的主轴数量。 你并不总是知道这个数字,特别是在SAN存储方面,微软Ninjas告诉我放弃队列深度数字,早在2002年左右。
(通常,我观察秒/转移数字,每秒读写数量(它们给出了磁盘如何进行的良好感觉)以及逻辑和物理页面读取值(有助于在发现其他一些非 – SQLServer的事情是使用磁盘,当SQL只是从RAM中扫描大量的数据)。最后一个值是在SQL计数器,而不是磁盘计数器。当然,旧的处理器利用,每个可用的核心(而不是“总”)。
平均 磁盘sec / tranfer值,我只是寻找平均值低于50毫秒的数据驱动器和20毫秒的日志驱动器。 请注意,您当前的设置具有相同的主轴上的操作系统和日志,这意味着他们将争夺驱动器头的控制权,这将导致您的延迟。
请注意,数据库的高读取率可能仅仅意味着糟糕的索引。 在networking论坛上编制索引问题很难。 有了这么多的RAM在新的盒子里,你可能会把几乎所有的数据存储在RAM中。 这将减less磁盘上的负载,但是您可能发现自己的处理器利用率很高,因为SQL仍然需要扫描所有的数据; 它只是在RAM中,而不是在磁盘上。 在RAM中使用它将比在磁盘上更快,但它仍然会比索引良好的数据库慢。
此外,我会尽量保持我的数据和临时数据库在不同的主轴上,因为当你正在大量写入tempdb时,它通常意味着你正在从数据中进行大量读取(例如select * into #report from huge_table,或者对于大的结果集可能使用不同或分组)。 如果您的应用程序不使用tempdb太多,可能无关紧要。
对于调整良好的SQL Server,您不需要将整个数据库存储在RAM中。 我有服务器与12 GB的RAM服务器100 GB的数据。
另外,通过使用10KRPM驱动器可以节省一点钱。 一旦SQL启动并运行,它就不应该触摸启动驱动器。
如果我处在这个位置,那么我最担心的是,在当前设置下缺lessRAID冗余,然后在该USB驱动器上进行(可能)很长的备份时间。
如果我被这个USB驱动器困住了一段时间,我可能会考虑每周做一次完全备份,然后每天进行一次差异备份。 根据您的数据在特定的一天内真正发生了多less变化,应该减less您必须移动到USB驱动器的数据量。
这么多的问题…
这是一个专用的SQL Server吗? (应该是!)32GB的RAM是好的,CPU似乎很好…
这台服务器是只托pipe这个单一的数据库还是被许多不同的数据库应用程序使用?
服务器的工作量是多less? 每秒多less个事务(读/写)?
数据有多关键? 如果这是非常重要的(即 – 不能失去它),然后偏向构build冗余。 如果它必须是100%可用的(没有停机时间),那么偏向于弹性(并获得更大的预算)。 如果只是一个性能数据库(即数据仓库),那么你可以优化性能。
你必须看性能计数器来找出当前的瓶颈。 高磁盘I / O和磁盘队列? 高CPU? (通常由有限的RAM和上下文垃圾引起)
SQL代码是否正确写入? 我见过大型机器(而且你的机器相当大)被糟糕的SQL代码和微小的机器(1个CPU,1GB RAM)带到了他们的脚下,这些机器运行的是写好和繁忙的数据库的负载。
一般来说,远离RAID 5(你的数据库大小足够小,不需要额外的容量),RAID10是最好的。
在不同的驱动器arrays上分开DATA和TEMP。
你应该避免使用双驱动器RAID 1作为LOGS,双驱动器TEMP(在两个驱动器上创build与CPU相同数量的TEMP数据文件),然后DATA可以在更大的4到6 RAID10arrays上。