使用的每个数据库管理员应该知道的 SQL Server 的磁盘驱动器缓存信息

适用于: Microsoft SQL Server 2005 Express EditionMicrosoft SQL Server 2005 Standard EditionMicrosoft SQL 2005 Server Workgroup

概要


数据库系统首当其冲地是负责着准确存储和检索数据,甚至出现了意外的系统故障。

系统必须保证原子性和持久性的交易记录,同时还要考虑当前的执行、 多个事务和各种的故障点。这通常称为 ACID (原子性、 一致性、 隔离,性和持久性) 属性。

本文介绍了磁盘驱动器的含义将缓存。建议您阅读以下文章 Microsoft 知识库中的文章进行缓存的进一步澄清和备用故障模式的论述:
86903 SQL Server 和缓存磁盘控制器

230785 ,SQL Server 7.0 和 SQL Server 2000年的记录和数据存储算法扩展数据的可靠性

此外建议使用以下文档:
注意:这些两个文档适用于所有当前支持的 SQL Server 版本。

详细信息


Microsoft SQL Server 和市场上的许多主流数据库产品目前使用预写日志记录 (WAL) 协议。
预写日志记录 (WAL) 协议
术语协议是极好的方法来描述 WAL。它是特定的定义一组要确保该数据所需的实现步骤是正确存储和交换和的已知状态出现故障时可以恢复。就像网络包含定义的协议,所以以一种一致的和受保护的方式交换数据太 WAL 描述了协议以保护数据。
所有的 SQL Server 版本打开使用 Win32 CreateFile函数的日志和数据文件。DwFlagsAndAttributes成员包括打开 SQL Server 时的FILE_FLAG_WRITE_THROUGH选项。
FILE_FLAG_WRITE_THROUGH
此选项指示系统通过任何中间缓存写入并直接转到磁盘。系统仍然可以缓存写入操作,但无法惰性刷新它们。

FILE_FLAG_WRITE_THROUGH 选项确保写操作返回成功完成的数据正确地存储在稳定存储器。这写前日志记录 (WAL) 协议规范,以确保数据一致。
许多磁盘驱动器 (SATA ATA、 SCSI 和 IDE 基于) 包含板载缓存 512 KB,1 mb 或更多。驱动器缓存通常依赖于电容器,而不是电池供电的解决方案。这些缓存机制无法保证写入在电源重启或类似故障点。他们只能保证扇区写入操作的完成。随着驱动器大小的增长,缓存会变得更大,并且它们可以在故障期间公开更多的数据。


增强的缓存控制器系统禁用磁盘缓存并提供职能备有电池的缓存解决方案。这些缓存可以几天内维护缓存中的数据和甚至允许放在另一台计算机将缓存卡。当电源恢复正常时,未写入的数据被完全刷新才允许访问任何其他数据。其中许多是与写缓存以获得最佳性能建立允许读取的百分比。一些包含较大的内存存储区。事实上,市场的非常特定的部分群体,某些硬件供应商提供电池供电的高端磁盘缓存系统有多个千兆字节的高速缓存。这些可以显著提高数据库的性能。

不使用缓存的情况下执行的 I/O 传输可能会非常长由于硬盘旋转速率、 移动驱动器磁头,以及其他限制因素所需的机械时间。SQL Server 安装针对提供缓存控制器的系统。这些控制器禁用磁盘上缓存并提供稳定的媒体缓存满足 SQL Server I/O 要求。他们避免磁盘搜索和使用各种优化缓存控制器写入次数与相关的性能问题。

有许多类型的子系统实现。RAID 和 SAN 是这些类型的子系统实现的两个示例。通常,这些系统都构建为基于 SCSI 驱动器。有几个原因。下面一节概述了高级驱动器注意事项。

SCSI 驱动器:
  • 通常用于重型制造。
  • 通常面向多用户、 基于服务器的实现。
  • 通常有更好平均无故障时间比其他实现。
  • 包含复杂的启发式技术以帮助预测紧急故障。
如 IDE、 ATA 和 SATA 其他驱动器实现:
  • 通常制造用于轻微和中等程度的关税。
  • 通常以基于用户的单个应用程序为目标。
  • 一些较新的实现包含复杂的启发式技术以帮助预测紧急故障。
非 SCSI、 基于桌面的控制器所需的多个主处理器 (CPU) 带宽,并常常受单个活动的命令。例如,当一个非 SCSI 驱动器正在调整坏块,驱动器需要主机命令等待。ATA 总线提供了另一个例子。ATA 总线支持 2 台设备,但只能有一个命令可以处于活动状态。这样,一个驱动器空闲时另一个驱动器服务挂起的命令。台式机技术构建的 raid 系统,可能会遇到这些症状,并极大地受到慢的响应方。除非这些系统使用高级的设计,其性能不会尽可能高效的基于 SCSI 的系统性能。

在这情况下的基于桌面的驱动器或阵列是一个适当的低成本解决方案。例如,如果您设置了只读的数据库进行报告,则不应将许多 OLTP 数据库的性能因素出现,当磁盘缓存将被禁用。

硬盘容量不断增加。低成本、 高容量的驱动器可以非常吸引人。但是,在 SQL Server 和业务响应时间需求配置驱动器时,您应仔细考虑以下问题:
  • 访问路径设计
  • 要禁用磁盘缓存的要求
下表提供了高级注释。注释信息基于常见的制造配置。

驱动器类型系统基础注释
IDE 和 ATA
  • 转速 7200 RPM。
  • 针对桌面和单用户应用程序。
  • 默认情况下,磁盘缓存处于启用状态。使用磁盘属性,来访问属性,策略选项卡来控制磁盘缓存设置的硬件选项卡。

    注意:某些驱动器不遵守此设置。这些驱动器都需要一个特定制造商实用程序禁用缓存。
  • 若要使用 SQL Server 使用驱动器应禁用磁盘缓存。
  • 在进行的活动,例如坏块调整时 IDE 和基于 ATA 的系统可以推迟主机命令。这会导致 I/O 活动停止。
IDE/笔记本电脑
  • 转速 5200 RPM。
  • 以便携式计算机为目标。
  • 请参见 IDE 和 ATA 的部分中的其他注释。
  • ReadyDrive 和 NAND 闪存存储可以提供稳定的输入/输出功能。
SATA
  • 转速 7200 RPM。
  • 以台式机和中等规模的服务器为目标。
  • 默认情况下,磁盘缓存处于启用状态。使用磁盘属性,来访问属性,策略选项卡来控制磁盘缓存设置的硬件选项卡。

    注意:某些驱动器不遵守此设置。这些驱动器都需要一个特定制造商实用程序禁用缓存。
  • 更大的存储容量和较大缓存不是 IDE 和 ATA 计数器部件。
  • 若要使用 SQL Server 使用驱动器应禁用磁盘缓存。
  • 小型连接和互连。
  • 通过将串行连接 SCSI (SAS) 驱动器,安装简单互连网络。
  • 一些包括故障预测结构。
SCSI
  • 旋转在 10000 和 15000 RPM。
  • 为服务器和多用户应用程序设计。
  • 设计用于重度负载循环和降低的故障率。
  • 默认情况下,磁盘缓存处于启用状态。使用磁盘属性,来访问属性,策略选项卡来控制磁盘缓存设置的硬件选项卡。

    注意:某些驱动器不遵守此设置。这些驱动器都需要一个特定制造商实用程序禁用缓存。
  • 若要使用 SQL Server 使用驱动器应禁用磁盘缓存。
  • 阵列和 SAN 系统通常使用小型连接和互连。
  • 包括故障预测结构。
串行连接 SCSI (SAS) 包含多达 256 层高级排队。SAS 还包括功能,如队列顺序队列的头部。SAS 底板的设计方式,可以使用 SAS 和 SATA 驱动器在同一系统中。SAS 设计的好处是显而易见的。

禁用磁盘缓存并提供稳定的 I/O 高速缓存控制器的能力取决于您的 SQL Server 安装。向各种磁盘写入顺序的数据就不会妨碍到 SQL Server,只要控制器提供正确稳定的媒体缓存功能。控制器设计的复杂性会增加与高级的数据安全技术,如镜像。

要全面保护数据,您应该确保正确处理所有数据缓存。在许多情况下,这意味着您必须禁用磁盘写入缓存。

注意:确保任何替代的缓存机制可以正确处理多种类型的故障。

Microsoft 已执行了在使用 SQLIOSim 实用程序的多个 SCSI 和 IDE 驱动器上进行测试。此实用程序模拟繁重的异步读/写活动到模拟的数据设备和日志设备。测试性能统计显示每秒 50 和 70 之间具有禁用的写入缓存的驱动器和 5200 和 7200 RPM 之间的平均写入操作。

有关其他信息以及有关 SQLIOSim 的详细信息,请参阅以下文章 Microsoft 知识库中相应的文章:
231619如何使用 SQLIOSim 实用程序来模拟在磁盘子系统上的 SQL Server 活动
许多 PC 制造商 (例如,康柏、 戴尔、 网关或 HP) 订购禁用写入缓存的驱动器。但是,测试表明,这不会总是这种情况应始终使其测试完全。

注意:如果您有任何疑问的缓存状态的磁盘驱动器,请与制造商联系,获取合适的实用工具或跳线设置以禁用写入缓存操作。
SQL Server 要求系统按照SQL Server I/O 可靠性程序要求下所述支持保证的传递到稳定的媒体。有关 SQL Server 数据库引擎的输入和输出要求的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

967576 Microsoft SQL Server 数据库引擎的输入/输出要求