每个数据库管理员都应了解的在 SQL Server 中使用磁盘驱动器缓存的说明

文章编号: 234656 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

数据库系统首当其冲地担负着准确存储和检索数据的重任,即便出现了意外的系统故障也是如此。

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

本文讲述磁盘驱动器缓存的含义。建议您阅读 Microsoft 知识库中的以下文章,以获得有关缓存的进一步说明以及替代故障模式的论述:
86903 在 SQL Server 中缓存磁盘控制器的说明
46091 将硬盘控制器缓存与 SQL Server 一起使用
230785 SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 的日志记录和数据存储算法扩展了数据的可靠性
还建议阅读以下文档:

更多信息

Microsoft SQL Server 2005、SQL Server 2000、SQL Server 7.0、早期版本的 SQL Server 以及当今市面上许多主流数据库产品均使用预写式日志 (WAL) 协议。
预写式日志 (WAL) 协议
术语协议是描述 WAL 的一种极佳的方式。它是定义的一组特定实现步骤,为确保正确存储和交换数据并可在出现故障时将数据恢复为已知状态,必须执行这些步骤。正如网络包含定义的协议以通过受保护的统一方式交换数据一样,WAL 描述了此协议以保护数据。
所有版本的 SQL Server 均使用 Win32 CreateFile 函数打开日志和数据文件。在通过 SQL Server 打开 dwFlagsAndAttributes 成员时,该成员包括 FILE_FLAG_WRITE_THROUGH 选项。
FILE_FLAG_WRITE_THROUGH
此选项指示系统写入任何中间缓存并直接转到磁盘。系统仍然可以缓存写入操作,但是无法对它们进行缓慢转储清除。

FILE_FLAG_WRITE_THROUGH 选项确保在写入操作返回成功完成信号时,正确地将数据存储在稳定的存储中。此选项与预写式日志 (WAL) 协议规范一起,共同为数据提供了保障。
许多磁盘驱动器(基于 SATA、ATA、SCSI 和 IDE)包含 512 KB、1 MB 或更大的板载缓存。但是,驱动器缓存通常依赖于电容器,而不依赖于通过电池提供支持的解决方案。这些缓存机制无法保证能够在电源周期或类似故障点完成写入操作。它们只保证能够完成扇区写入操作。随着驱动器大小的不断增加,缓存也变得越来越大,并且在故障期间可能会影响更大量的数据。

增强型缓存控制器系统可禁用磁盘缓存并提供通过电池提供支持的有效的缓存解决方案。这些缓存解决方案可以将数据在缓存中保留数天,甚至还允许将缓存卡放置在另一台计算机上。当电力完全恢复时,将会先对未写入的数据进行完全的转储清除,然后才允许访问任何其他数据。其中的许多缓存解决方案允许建立读写百分比缓存以获得最佳性能。有些包含很大的内存存储区域。事实上,某些硬件供应商为市场中非常特定的部分群体提供带有好几 GB 缓存的通过电池提供支持的高端磁盘缓存系统。这些磁盘缓存系统可以显著提高数据库性能。

由于硬盘旋转速率、移动驱动器头所需的机械时间以及其他限制因素,不使用缓存执行 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
  • 转速 7,200 RPM。
  • 以台式机和单用户应用为目标。
  • 默认情况下,启用磁盘缓存。使用“磁盘属性”的“硬件”选项卡访问“属性”,使用“策略”选项卡控制磁盘缓存设置。

    注意:某些驱动器不采用此设置。这些驱动器需要特定制造商实用工具才能禁用缓存。
  • 应禁用磁盘缓存以便在 SQL Server 中使用该驱动器。
  • 基于 IDE 和 ATA 的系统在执行操作(例如调整不正确的区块)时可以延迟主机命令。这会导致 I/O 活动停止。
IDE/便携式计算机
  • 转速 5,200 RPM。
  • 以便携式计算机为目标。
  • 请参见 IDE 和 ATA 部分中的其他注释。
  • ReadyDrive 和 NAND 闪存可以提供稳定的 I/O 功能。
SATA
  • 转速 7,200 RPM。
  • 以台式机和中等规模的服务器为目标。
  • 默认情况下,启用磁盘缓存。使用“磁盘属性”的“硬件”选项卡访问“属性”,使用“策略”选项卡控制磁盘缓存设置。

    注意:某些驱动器不采用此设置。这些驱动器需要特定制造商实用工具才能禁用缓存。
  • 比 IDE 和 ATA 对等部分的存储容量和缓存大。
  • 应禁用磁盘缓存以便在 SQL Server 中使用该驱动器。
  • 小型连接和互连。
  • 方便地与串行连接 SCSI (SAS) 驱动器和安装进行互连。
  • 某些驱动器包括故障预测结构。
SCSI
  • 转速 10,000 和 15,000 RPM。
  • 设计用于服务器和多用户应用。
  • 设计用于重度负载循环和降低故障率。
  • 默认情况下,启用磁盘缓存。使用“磁盘属性”的“硬件”选项卡访问“属性”,使用“策略”选项卡控制磁盘缓存设置。

    注意:某些驱动器不采用此设置。这些驱动器需要特定制造商实用工具才能禁用缓存。
  • 应禁用磁盘缓存以便在 SQL Server 中使用该驱动器。
  • 阵列和 SAN 系统通常使用小型连接和互连。
  • 包括故障预测结构。
串行连接 SCSI (SAS) 包括高达 256 级的高级队列。SAS 还包括队列头和颠倒队列顺序等功能。SAS 底板是根据在同一系统中使用 SAS 和 SATA 驱动器的方式而设计的。SAS 设计的优点显而易见。

SQL Server 安装依赖于控制器禁用磁盘缓存并提供稳定 I/O 缓存的功能。只要控制器提供正确稳定的媒体缓存功能,将数据散乱地写入各个磁盘就不会妨碍 SQL Server。随着高级数据安全技术(如镜像)的采用,控制器设计会越来越复杂。

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

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

Microsoft 已使用 SQLIOStress 实用工具对一些 SCSI 和 IDE 驱动器进行了测试。该实用工具针对模拟数据设备和日志设备模拟大规模异步读/写活动。测试性能统计数据显示,对于禁用了写入缓存且 RPM 范围在 5,200 和 7,200 之间的驱动器,每秒钟的平均写入操作次数在 50 到 70 次之间。

有关 SQLIOStress 的附加信息和详细内容,请参见 Microsoft 知识库中的以下文章:
231619 如何使用 SQLIOSim 实用工具在磁盘子系统上模拟 SQL Server 活动
许多 PC 制造商(例如,Compaq、Dell、Gateway 或 HP)均订购禁用了写入缓存的驱动器。但是,测试表明,情况可能并不总是这样的,因此您应该始终对它进行全面测试。

注意:如果有关于磁盘驱动器缓存状态的任何问题,请联系制造商并获得正确的实用工具或跳线设置以禁用写入缓存操作。

参考

有关 SQL Server I/O 要求的完整详细信息,请访问下面的 Microsoft 网站:http://www.microsoft.com/sql/AlwaysOn

属性

文章编号: 234656 - 最后修改: 2007年9月4日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft SQL Server 7.0 标准版
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 2000, Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
关键字:?
kbinfo KB234656
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈