SQL Server 2005标准文件组/文件在SAN上的性能

我提交这个堆栈溢出( 这里 ),但意识到它应该真的在serverfault。 所以不正确的和重复的发布道歉:

好的,我刚刚进入了一个SQL Server课程,我们讨论了在本地RAID和本地磁盘上使用多个文件和文件的使用场景,但是我们没有碰到SAN场景,所以我的问题如下:

我目前有一个运行在SQL Server 2005上的250 gig数据库,其中一些表具有大量的写入,而其他的则相当静态。 数据库和所有对象都驻留在一个文件组中,并且只有一个数据文件。 日志文件也位于同一卷上。 我的解释是应该在不同的磁盘之间使用单独的数据文件来减less磁盘争用,并且应该使用文件组来分区数据。 但是,对于SAN来说,你显然不是真的有一个小小的RAID设置问题(或者至less目前我们不这样做),而标准版不支持分区。

那么为了改善并行性,我应该怎么做?

我对各种Microsoft出版物的理解是,如果我增加数据文件的数量,单独的线程可以分别在每个文件上执行操作。 这导致了我应该有多less个文件的问题。 每个核心一个? 我是否应该将具有高级别活动的表和索引放在单独的文件组中,每个文件组的数据文件数与我们的核心数相同?

谢谢

  • 每个文件组都应该有X个数据和日志文件,其中X是任务pipe理器可见内核的数量 – 这可以实现最佳的IO行为。

  • 这对tempdb尤其重要 – 当分配/释放扩展盘区(8个页面组)时,有时对于SQL Server完全locking文件。 Tempdb分解了大量的对象。

  • 分配给多个光盘只能提供更好的IO。 一个好的SAN – 可能会使驱动程序的IOfunction饱和(队列长度通常最大为256 PER DISC),因此一个好的SAN可能需要多个光盘来保持足够的IO才能充分利用它。

  • 但即使没有一个好的SAN,多个文件也可以避免在插入时遇到单个文件访问的瓶颈。

  • 有超过提到的X是没有意义的 – 因为每个核心最多可以在给定的时间运行一个线程。 ALlocation是primefaces的,所以每个核心在切换时都不会切换线程。 但是X核心可能都想要同时扩展;)

  • 重要的是:正确格式化光盘。 确保(2008年以前的服务器)分区是alignment的,确保您使用64kb节点大小格式化光盘 – 否则可能会浪费高达40%的IO性能。

  • 分区并没有进入这个游戏;)

您应该仔细衡量天气使用多个文件,以避免分配争用(即不分配在多个主轴)或不。 特别是对于tempdb 。 在发布最佳实践之后,发动机工作方式发生了一些变化,对问题的总体了解也有所改善。

简短的版本是,你应该真的做一些testing,看看你是否真的有这样的争用问题。 您可以在这篇文章(和相关链接)中阅读更多内容:

http://www.sqlskills.com/BLOGS/PAUL/post/A-SQL-Server-DBA-myth-a-day-(1230)-tempdb-should-always-have-one-data-file-per-处理器core.aspx