MS SQL布局以获得最佳性能

我们购买了一台新的服务器作为MS SQL后端。 我很想知道最好的设置是什么。

服务器是戴尔R710它有6个硬盘驱动器2个74GB 15k和4x 146GB 15k

这是目前安装在RAID 1 / Raid 10configuration。

我的问题是哪里(哪个数组)以下应该去?

TEMPDB(还有多less,大小和增长)系统数据库(主模型,模型等)应用程序MDF应用程序LDF系统页面文件

OS已经安装在RAID1上。

我把OS,分页文件和LDF(s)放在RAID1arrays上。 RAID10arrays上的其他所有内容。

如果您不使用Windows 2008,请确保您的分区正确alignment:

http://msdn.microsoft.com/en-us/library/dd758814.aspx

正如已经解释的,为每个CPU核心添加1个TEMPDB文件 – 使它们全部相同的大小。

适当调整日志文件的大小,并一步创build它们。

如果可能的话,考虑通过networking共享将数据库备份到不同的服务器上 – 以减轻arrays完全失效的风险,并将数据库和备份带入其中。

的TempDB

我前段时间做了一些关于tempdb优化的研究,并在Stackoverflow上回答了我自己的问题 。 这是我发现的。

为了优化tempdb性能,请注意物理磁盘configuration,文件configuration以及数据库内的一些设置。

物理磁盘configuration

tempdb应驻留在其自己的专用物理磁盘上 。 这允许它从SQL Server的其余卷上分割I / O事务。

要将tempdb移动到新的磁盘驱动器,请使用ALTER DATABASE 。 这是执行此操作的关键T-SQL命令。 Microsoft在SQL Server 2005联机丛书中提供了一个很好的示例。 文章名称是ALTER DATABASE(Transact-SQL),具体部分是“G. 将tempdb移到新的位置。

tempdb是一个非常高写入的数据库。 所以,RAID 5arrays并不适合它。 您应该将tempdb 放在RAID 1或RAID 10arrays上,因为它们针对高写入应用程序进行了优化。 如果您可以为tempdb的每个物理数据库文件购买额外的RAID 1或RAID 10arrays,则可以获得更高的性能。

数据库文件

您应该在服务器中每个CPU核心一个物理文件 。 因此,如果您有双核双核服务器,则应该有四个用于tempdb数据库的物理数据库文件。 添加更多数据库文件时,重要的是configuration相同的初始大小和相同的增长设置的文件 。 这样,SQL Server将尽可能均匀地在文件中写入数据。

数据库文件大小

tempdb数据库的大小可能会影响系统的性能。 例如,如果为tempdb定义的大小太小, 则每次重新启动SQL Server实例时 ,部分系统处理负载可能会被自动增长tempdb占用,以达到支持工作负载所需的大小 。 您可以通过增加tempdb数据和日志文件的大小来避免这种开销。

确定生产环境中tempdb的适当大小取决于许多因素,包括现有工作负载和所使用的SQL Serverfunction。 Microsoftbuild议您通过在SQL Server testing环境中执行以下任务来分析现有工作负载:

  1. 为tempdb设置自动增长(在testing环境中!)
  2. 执行单个查询或工作负载跟踪文件并监视tempdb空间使用情况。
  3. 执行索引维护操作,例如重build索引和监视tempdb空间。
  4. 使用前面步骤中的空间使用值来预测您的总工作量使用情况; 为预计的并发活动调整此值,然后相应地设置tempdb的大小。

tempdb的最小大小build议如下:

   ENVIR。 大小DB大小(MB)日志大小(MB)
   ----------- ------------ -----------
  小1024 256
  中等5120 1024
  大10024 2048

数据库设置

您可以通过禁用自动更新统计信息来进一步提高tempdb性能,这将会保存tempdb的一些工作。 您也可以将auto create statistics选项设置为false

免责声明:设置应该小心改变。 根据您放置在tempdb上的加载types,更改设置可能会对系统性能产生负面影响。

要获得最佳tempdb性能,请遵循Optimizing tempdb Performance中提供的指导原则和build议。

如何监视tempdb的使用情况?

tempdb中的磁盘空间不足可能会导致 SQL Server生产环境出现严重中断 ,并可能阻止正在运行的应用程序完成操作。

您可以使用sys.dm_db_file_space_usagedynamicpipe理视图来监视这些function在tempdb文件中使用的磁盘空间。 此外,要在会话或任务级别监视tempdb中的页面分配或取消分配活动,可以使用sys.dm_db_session_space_usagesys.dm_db_task_space_usagedynamicpipe理视图。

这些视图可用于标识大量查询,临时表或使用大量tempdb磁盘空间的表variables。 还有几个计数器可用于监视tempdb中可用的可用空间以及使用tempdb的资源。

链接:

  • Microsoft Technet: 在SQL Server 2005中使用tempdb
  • SearchSQLServer.com:SQL Server tempdb最佳实践可提高性能
  • MSDN库: 优化tempdb性能
  • SearchSQLServer.com: configurationSQL Server 2005的TempDB的性能
  • MSDN库: tempdb的容量规划
  • MSDN库: 解决tempdb中磁盘空间不足的问题

简单的通用答案是涉及到高IO的任何事情都应该进入RAID 10磁盘组。 你有没有决定你的分区策略还是问题的一部分?

所以在第一个磁盘组中,我可能会创build一个单独的分区(大约70GB可用),我会把操作系统和MSSQL应用程序放在这个上面。

在第二个我会创build以下分区

1)页面文件的分区(依赖于你有很多内存,但大约10-20GB 2)事务日志文件分区100GB 3)数据文件分区100GB

这会给你留下大约50GB的空闲空间,我将放弃未分配的空间,以便随着需求的变化,增加日志分区或数据分区。

有趣的是,我目前正在使用只有我使用Linux和Oracle的相同规格的机器,你是否来自并行宇宙?

詹姆士

到目前为止,已经有了一些很好的答案,所以我不打算放一个,但是我会向你提出一个问题。

为什么在购买服务器之前你不问这个问题? 为什么你想把一个系统塞进一个已经购买的服务器,而不是购买一台服务器来满足系统的需求呢?

对不起,我问这个问题作为一个未注册的用户,现在不能标记为答复。 我正在等待pipe理员回来,看他们是否可以再次将我的帐户附加到问题上。

为了更深入的了解这个服务器将不会承受巨大的负载,它实际上是一个源控制后端。 购买一台服务器和一个DAS或一个iSCSI SAN或其他什么东西本来会被杀死,而这个成本将会压倒这个项目的机会。 我为大约100人的中小型企业工作,所以我们的IT预算目前非常紧张。

@mrdenny

我们向提出这种configuration的软件供应商提出了问题。 我们买了它然后当我们提出的任务,我问他们说,把日志,数据库和tempdbs所有的RAID 10分区。 我不是一个大数据库的人(真的?),但这听起来很可怕,因为几乎每个人都知道不要在同一主轴上混合使用ldf和mdf。

@splattne – 感谢您对tempdb的深入了解,这对于今后的SQL安装将派上用场。

@SuperCoolMoss – 我曾在自己的IT消防networking中与一些人交谈过,他们也同意这一点。 操作系统,RAID1上的Pagefile和LDF以及RAID10上的tempdb和MDF

感谢所有其他人评论。

从我的阅读中,这些是我认为在涉及到磁盘的情况下部署SQL时应遵循的基本规则。 在我看来,他们应该遵循这个顺序,让我知道如果你同意或不同意。

  1. 使用冗余磁盘(非常明显)
  2. 使用快速磁盘(如果可能的话,SCSI / SAS,15k)
  3. 在不同的主轴上分离你的ldf和mdf文件
  4. 不要将RAID5用于ldfs或tempdbs(使用RAID10或RAID1)
  5. 把你的tempdb放在最快的主轴上; 如果可能的话,分别来自ldf和mdf纺锤体的tempdbs。

请随意分享您的此列表的修改版本。

你需要多less性能? 基于“这是某个磁盘”的答案很难得出答案。 如果你可以把所有的数据放到caching中,那么SQL性能要好得多,所以要确保你有足够的内存。

我会去你的2x74Gb卷上的操作系统和页面文件。 如果你正处于一个日志stream量很大的情况,你可以把你的raid 10分成一对raid 1,然后把日志放在那里。

很显然,在“最佳”布局上有很多宗教战争,但是你并没有足够的磁盘来移动。 对数据驱动器进行分区是没有意义的,因为您真正关心的是主轴的数量,而且受限于服务器所能容纳的内容。

你可能会更好地获得一个PowerVault或者其他类似的东西,并且将146Gb驱动器(和其他适合的驱动器)一起回收,并将其拆分为数据/日志/系统+ tempdb卷。

我将开始从旧系统收集一些IO统计数据。 例如,从性能Dahsboard报告开始: http : //www.microsoft.com/downloads/details.aspx? FamilyId=1d3a4a0d-7e0c-4730-8204-e419218c1efc&displaylang=en这将为您提供您的数据库的IO统计,然后你可以做出明智的决定,而不是“一刀切”的通用build议。 当然,旧服务器每个数据库的IO特性可能与新的不同,特别是如果有不同数量的RAM可用的话。 还是比纯粹的猜测更好。

理想情况下,我们希望将更高负载的I / O文件分离到自己的设备中,也不希望将MDF访问的随机I / O与LDF访问的线性写入混合在一起。 在你的情况下,没有太多的组合,你真的只有2个位置(2个磁盘在RAID1和4个在RAID10)。 您可以总结从旧服务器收集的每个数据库的IO,然后拆分文件位置,以便在两个目标之间分配IO,RAID1和RAID10之间的比率可能是1/5(对于帐户对于RAID1上的OS和页面文件IO)。 希望你没有任何写密集型应用程序(高序列LDF写入负载)…

TempDB布局通常build议每个调度程序(CPU核心没有被屏蔽掉)都是1 NDF,所有的都具有相同的大小,推理在这里解释: http : //blogs.msdn.com/sqlserverstorageengine/archive/2009/01/04 /managing-tempdb-in-sql-server-tempdb-configuration.aspx 。 这解决了页面分配争用,在SQL 2K的高负载下可能是一个严重的问题,在2k5以下更less,而在2k8以下则更less。 但是考虑到configuration它基本上没有成本,所以你应该这样做。

这不是一个非常快的磁盘系统。 完全的信用splattne一个真棒的答案,但真的这不是一个非常快的磁盘设置,所以我不知道这是多么的麻烦值得去。

两个磁盘RAID1在单个未配对的磁盘上几乎没有性能提升。 四个磁盘RAID10给你提供了两个磁盘RAID0的速度,这是快速的,但并不惊人。 这不是一个缓慢的服务器,但它不是一个明显的候选人运行一个真正苛刻的SQL数据库。

如果是我的服务器,我会find两个146GB的磁盘,并把它做成六个磁盘的RAID5。 好吧,我会尖叫起来把临时数据库放在与数据文件相同的主轴上,但是Perc控制器非常擅长RAID5,而且六个磁盘的RAID5会非常快,比在RAID1上具有tempdb和在RAID5中只有4个磁盘更好的性能。 我说“可能”,因为一切取决于你如何加载它。

JR