AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 19866
Accepted
Sean Howat
Sean Howat
Asked: 2009-06-05 09:21:03 +0800 CST2009-06-05 09:21:03 +0800 CST 2009-06-05 09:21:03 +0800 CST

推荐的 SQL Server 磁盘/分区设置

  • 772

我正在寻找一些关于为 SQL Server 设置磁盘/分区的最佳方法的建议。以下是我的一些主要担忧:

应该如何分隔 SQL 文件(数据文件、日志、临时文件)?

RAID 大量 HDD 并分区空间或创建多个 RAID,每个 RAID 的磁盘更少?

数据和日志文件是否应该在不同的 RAID 类型上?

默认数据库(master、msdb 等)应该位于 C: 上还是应该与其他数据/日志文件位于同一位置?

sql-server partition raid
  • 4 4 个回答
  • 34918 Views

4 个回答

  • Voted
  1. Best Answer
    SQLChicken
    2009-06-05T09:29:44+08:002009-06-05T09:29:44+08:00

    这是一篇不错的博文: http: //sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html

    关于磁盘对齐的白皮书:http: //msdn.microsoft.com/en-us/library/dd758814.aspx

    简而言之,您的操作系统应该在 RAID 1 上,数据文件在 RAID 10(最好)上,日志文件在 RAID 1 上。

    SQL 性能文章:http ://www.sql-server-performance.com/faq/raid_1_raid_5_p1.aspx

    PDF 上的 10 大最佳性能提示: http: //www.stlssug.org/docs/Best_Practices_for_Performance.pdf

    还记得出于性能原因将您的 TEMPDB 放在单独的磁盘上。我相信 Paul Randal 会来这里并让你大吃一惊。

    MS 说明了 tempdb 的原因:http: //msdn.microsoft.com/en-us/library/ms175527.aspx

    • 14
  2. Paul Randal
    2009-06-05T09:38:04+08:002009-06-05T09:38:04+08:00

    这是一个很大的“取决于”问题。

    我无法回答如何为您创建单个 RAID 阵列的问题,因为我不是存储专家,但我可以帮助您解决剩下的问题。

    您需要考虑的第一件事是各种数据库的工作负载 - OLTP(读/写)或 DSS/DW(主要读)。对于读/写工作负载,您应该考虑 RAID 1 或 RAID 10 (RAID 1+0),因为它们提供冗余和出色的读/写性能。对于以读取为主的工作负载,您可以使用 RAID 5。RAID 5 不应用于读/写工作负载的原因是您在写入时会付出性能损失。

    事务日志本质上是读/写的(或主要写,取决于您是否将事务日志用于任何事情 - 例如日志备份或复制),因此永远不应将其放在 RAID 5 上。

    这意味着对于某些数据库和工作负载,您可能在 RAID 5 上拥有数据文件,在 RAID 1/10 上拥有日志文件,而对于其他数据库,您可能在 RAID 1/10 上拥有一切。更进一步,如果您有一个分区数据库,它可能包含一些以读取为主的数据和一些读/写数据,甚至可能在同一个表中。这可以分成单独的文件组,然后将每个文件组放在适当的 RAID 级别。

    实际数据库的分离再次取决于工作负载和底层 IO 子系统的功能 - 例如,在单个 RAID 阵列上存储内容可能需要比在 SAN 上更高程度的分离。

    Tempdb 本身就是一个特殊情况,因为它通常是一个负载很重的数据库,应该与其他数据库分开存储。系统数据库不应该被大量使用,只要有冗余就可以放在任何地方。

    这是我帮助编写的白皮书的链接,它应该对您有所帮助:物理数据库存储设计。还要确保您的 IO 子系统可以处理预期的工作负载 - 请参阅此白皮书:部署前 I/O 最佳实践。最后,确保使用正确的 RAID 条带大小(在较新的系统上通常为 64K 或更高)、正确的 NTFS 分配单元大小(通常为 64K),并且在 Windows Server 2008 之前的系统上,正确设置磁盘分区偏移量. 有关这些的信息,以及指向更多信息的指针以及为什么要以这种方式配置它们,请参阅此博客文章:您的磁盘分区偏移量、RAID 条带大小和 NTFS 分配单元设置是否正确?.

    底线:了解您的工作负载和您的 IO 子系统功能,然后相应地实施。

    我希望这对你有帮助。

    PS 就 tempdb 而言,您应该如何配置它是一大堆蠕虫,并且存在各种相互冲突的信息。我在Misconceptions around TF 1118上写了一篇关于 tempdb 数据文件配置的综合博文。

    • 12
  3. hellimat
    2009-06-05T10:36:35+08:002009-06-05T10:36:35+08:00

    我设置的服务器的简短答案一直是

    在单独的物理磁盘上记录日志,raid 1 或 10(条带化 + 镜像)

    数据库在自己的磁盘上,取决于性能需求,通常是 RAID5

    RAID 控制器上有大量缓存

    最好将您的操作系统和 Windows 页面文件再次粘贴到单独的阵列上,通常只是一个镜像(Raid 1)。这使所有写操作保持分离,因此重型性能不会拖累一切。

    我过去的经历是,数据库写入 + 日志写入 + 页面文件写入会使 Raid5 阵列陷入困境,并且性能将一败涂地。问题是你在测试、开发等方面的表现会很好。但是当你进入生产和使用猛增时,这个问题会出现“突如其来”并且用户投诉猛增。

    • 1
  4. Chopper3
    2009-06-05T10:54:56+08:002009-06-05T10:54:56+08:00

    这里有比我更好的 MSSQL 人员,但总的来说,我建议以下内容;

    C 上的操作系统和代码: - 这应该是本地磁盘,应该是 RAID1 阵列对 - 我们为此使用 2 个 2.5 英寸 SAS 146GB 10krpm 磁盘,但您可以使用 2 个 SATA 7.2 磁盘。数据应该在一个非常快(10krpm 或更高)的 RAID 1/10、5/50/6/60 阵列上,无论您需要什么大小 - 我们将我们的存储在 FC SAN LUN 上,通常在“第 2 层”/10krpm 磁盘组上. 日志应该在一个单独的非常快(15krpm)小(10GB 或更少?)RAID 1 阵列对上 - 我们将我们的放在 FC SAN LUN 上,通常在一个非常小的“tier1”/15krpm 磁盘组或“tier0”/固态硬盘组。

    无论哪种方式,您都希望将这些中的每一块放在单独的主轴/阵列上以提高性能-当然,它们都可以在单个磁盘上运行,但我想您正在寻找性能和成本的平衡点。

    我们将 master/tempdb 与常规数据库一起存储,但您可以将其分解为单独的数据阵列 LUN。

    希望这可以帮助。

    • 1

相关问题

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

  • 在 SQL Server 中,何时应将 PRIMARY Data FileGroup 拆分为辅助数据文件?

  • RAID 控制器通常是否存在 SATA 驱动器品牌兼容性问题?

  • 如何从 SQL Server 2008 中的备份中排除索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve