eas*_*eas 15 hard-drive cache sata data-integrity
在用于数据库的单个磁盘上禁用写入缓存的建议很常见,否则某些磁盘将确认尚未写入磁盘表面的写入。
这意味着某些磁盘在写入磁盘表面之前不会确认写入(更新:或者当被要求刷新缓存时它们会准确报告。我在哪里可以找到这样的磁盘,或者我可以在哪里查找权威信息在哪里可以找到这样的磁盘?
我正在设置一些可以从使用写入缓存中真正受益的数据库服务器,但该应用程序对价格敏感,我不想将某些缓存 RAID 控制器的磁盘子系统的成本增加一倍,因为我没有足够的信息知道我是否可以信任每个驱动器中的缓存。
Tal*_*eff 15
一般来说,在直接回答您的问题时,我不知道有任何主要品牌的 SATA 驱动器在启用写入缓存的情况下,驱动器本身存在与正确操作相关的错误。也就是说,仅从驱动器的角度来看,驱动器从缓存的角度来看它应该做的事情。我还要指出的是,即使写入缓存被启用,从对SATA电缆旋转介质的物理更新磁盘写入延迟还很短(约50毫秒至100毫秒典型值)。这不像脏缓存数据会一次只在那里停留几秒钟.....驱动器不断尝试从缓存中获取脏数据尽快转移到物理媒体上。这不仅仅是一个数据安全问题,而是一个随时准备接受未来写入的问题(即:写入发布)。
启用缓存时出现的问题是通过 SATA 电缆对驱动器的写入顺序与对旋转介质的写入顺序不同。这永远不会导致问题,除非您在缓存的所有内容都进入磁盘之前断电或系统崩溃。为什么?->
此处可能出现的问题与文件系统和/或数据库文件内容对这些乱序丢失写入的事务稳健性有关。实际上,那些可能丢失的乱序写入理论上会破坏事务逻辑的完整性,否则本来可以通过磁盘以非常特定的顺序写入介质来保证的。
现在,当然,文件系统、数据库、RAID 控制器等的设计者已经意识到(或者当然应该意识到)这种与写缓存相关的现象。在大多数随机访问类型的 I/O 场景中,从性能的角度来看,写缓存是非常理想的。事实上,拥有可用的写缓存是能够从更高级的本地命令队列 ( NCQ) 中获得任何真正好处的关键因素) 支持较新的 SATA 和最后几代 PATA 实现。因此,为了在这样的某些关键时刻保证物理介质的顺序,文件系统和/或应用程序等可以专门请求将写缓存刷新到介质。在此同步请求完成时,(可能)文件缓冲区、操作系统磁盘缓存、物理磁盘缓存等中的所有内容实际上都在每个事务系统设计的正确关键操作中的媒体上。也就是说,如果程序员在顶部做出正确的调用并且这个软件和硬件层链的每个元素都正确地完成了他们的工作,那么这就会正确地发生。即:在驱动器、RAID 控制器、磁盘驱动程序、操作系统缓存、文件系统、数据库引擎等方面没有这方面的错误。这是很多软件,它们都必须完全正确地工作。此外,验证这方面的正确性非常困难,因为在几乎任何情况下,通常写入顺序都无关紧要......并且电源故障和崩溃场景是难以构建的测试。因此,最终在该术语的一个或多个不同层和/或含义上“关闭写缓存”......具有“修复”某些类型问题的声誉。实际上,关闭 RAID 控制器或操作系统磁盘缓存或驱动器等的写入缓存行为是在避免系统中的一个或多个错误......以及此类知识的来源。断电和碰撞场景是难以构建的测试。因此,最终在该术语的一个或多个不同层和/或含义上“关闭写缓存”......具有“修复”某些类型问题的声誉。实际上,关闭 RAID 控制器或操作系统磁盘缓存或驱动器等的写入缓存行为是在避免系统中的一个或多个错误......以及此类知识的来源。断电和碰撞场景是难以构建的测试。因此,最终在该术语的一个或多个不同层和/或含义上“关闭写缓存”......具有“修复”某些类型问题的声誉。实际上,关闭 RAID 控制器或操作系统磁盘缓存或驱动器等的写入缓存行为是在避免系统中的一个或多个错误......以及此类知识的来源。
无论如何,回到问题的核心:在SATA下,所有磁盘读/写命令和刷新缓存命令的具体处理由SATA规范很好地定义。此外,驱动器制造商应该为每个驱动器型号或驱动器系列提供详细的文档,描述它们对这些规则的实施和合规性,例如希捷 Barracuda驱动器的示例。具体看SATA SET FEATURES的细节控制驱动器操作模式的命令,特别是选项 82h 可用于在驱动器级别禁用磁盘缓存,因为默认设置肯定是在我知道的所有驱动器上启用写缓存。如果您真的想禁用缓存,则必须在每次驱动器重置或启动时执行此命令,并且通常由操作系统的磁盘驱动程序控制。您可以鼓励您的操作系统驱动程序通过 IOCTL 和/或注册表设置类型的东西来设置此模式,但这差别很大。
| 归档时间: |
|
| 查看次数: |
12094 次 |
| 最近记录: |