我们正在开发的系统包括一个Web应用程序前端和一个使用SQL Server 2008 R2中的存储过程进行大量数据处理的后端(请不要问为什么…)。 这些存储过程大量使用临时表(创build,插入,连接),以便写入和读取中的tempdb I / O率很高。 我们的客户需要速度,所以我们要推荐以下内容:
一些上下文数据:
我们在一台笔记本电脑上testing了ramdisk方法,内存很大。 至less加速是显着的(存储过程执行时间减less到1/3)。
我需要帮助,以确定这是否是一个好的解决scheme,并发现任何缺陷(明显或不太明显),我可能会失踪。
编辑:感谢迄今为止的答案! 我忘了明确提到使用应用程序的并发用户,所以会有多个临时表操作在运行。 另外,混合Web服务器和数据库服务器不是我们的select,我们已经知道它不是最佳的;)
这不只是速度,而是等待。 正确的基准。 检查IOPS,加上磁盘队列长度。 使用Perfmon和SQL分析。 继续 – 我会等的。
你已经知道操作系统应该在一组主轴上,另一个是MDF,另一个是LDF,另一个是临时数据库文件,如果你有实际的性能问题的话。 如果你不能做到这一点,请进行基准testing,找出你的优先事项。 而且,不同的读取和写入模式可以为每一个指定不同的RAID级别。
您可能会发现,具有正确的RAIDconfiguration的标准磁盘可以让您在需要的地方,而不是企业SSD的丰满。 虽然,如果tempdb已经足够受到重视,单个SSD可能非常适合它。 对于性能可能不需要RAID,尽pipe冗余可能是一个好主意。 取决于你的预算,当然可以多久。
你也知道SQL服务器应该与Web服务器分开,对吧? 如果performance是一个问题? 即使你现在没有问题,但是如果你长大了,你将很难确定哪个问题更困难,什么是合适的解决方法。
RAID是为了冗余 ,性能走出了窗口。 对于例如RAID 5来读取一段数据,必须读取所有组件盘,并且检查奇偶校验(这比从单个盘读取更慢,头部移动不会必须同步,因此您等待最长的时间而不仅仅是平均),写意味着读全部,计算奇偶校验,写新数据和奇偶校验,明显比写作慢。
是的,一个好的RAID实施和智能操作系统可以缓解这一点(必须做到,即使单个磁盘在内存方面的速度非常慢,所以任何值得使用的操作系统都会在磁盘上进行大量caching)。
是的,一个聪明的数据库pipe理系统也会尽可能地将数据caching在内存中(考虑到数据一致性,失败阻力等方面的要求,在需要的时候会明确等待数据在磁盘上安全地存储)。
对于任何DB,RAMdisk是纯粹的毒药(“明确写入磁盘的数据,因此安全”不是)。
感谢所有的答案。 他们一直很有帮助。 经过一些后续的研究,我发现I / O速度并不是这个特例中的主要瓶颈,尽pipe这一点在一般情况下很重要。 tempdbpipe理中的最佳实践包括至less有4个数据文件。 微软还build议每个CPU核心有1个数据文件。 拥有更多文件有助于减less某些争用问题的风险。
关于这个的一些链接:
所以临时写入和读取的tempdb I / O率很高
内存太less tempdb只有在IO溢出时 – 否则SQL Server不会将tempdb页面转储到光盘。
所以,RAM光盘不会帮助 – 而是放入更多的内存。