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 / 问题 / 15404
Accepted
eas
eas
Asked: 2009-05-30 21:40:42 +0800 CST2009-05-30 21:40:42 +0800 CST 2009-05-30 21:40:42 +0800 CST

正确处理写入缓存的 SATA 磁盘?

  • 772

在用于数据库的单个磁盘上禁用写入缓存的建议很常见,因为否则某些磁盘将确认尚未到达磁盘表面的写入。

这意味着某些磁盘在写入磁盘表面之前不会确认写入(更新:或者当被要求刷新缓存时它们会准确报告。我在哪里可以找到这样的磁盘,或者我在哪里可以找到权威信息在哪里可以找到这样的磁盘?

我正在设置一些可以从使用写入缓存中真正受益的数据库服务器,但是该应用程序对价格很敏感,我不希望为某些缓存 RAID 控制器增加磁盘子系统的成本,因为我没有足够的信息来知道我是否可以信任每个驱动器中的缓存。

hard-drive cache sata data-integrity
  • 6 6 个回答
  • 12401 Views

6 个回答

  • Voted
  1. Best Answer
    Tall Jeff
    2009-05-31T04:12:06+08:002009-05-31T04:12:06+08:00

    一般来说,直接回答您的问题,我不知道任何主要品牌的 SATA 驱动器本身在启用写入缓存的情况下存在与正确操作相关的错误。也就是说,仅从驱动器的角度来看,驱动器从缓存的角度来看它应该做的事情。我还要注意,即使启用了写入缓存,从 SATA 电缆上的磁盘写入到物理更新的旋转介质的延迟仍然非常短(通常约为 50 到 100 毫秒)。这并不像脏缓存数据一次只会坐在那里几秒钟......驱动器不断尝试从缓存中获取脏数据尽快放到物理媒体上。这不仅仅是一个数据安全问题,而是一个准备好立即接受未来写入的问题(即:写入发布)。

    启用缓存时出现的问题是通过 SATA 电缆对驱动器的写入顺序与对旋转介质的写入顺序不同。这永远不会导致问题,除非您在缓存的所有内容进入磁盘之前断电或系统崩溃。为什么?->

    这里可能出现的问题与文件系统和/或数据库文件内容的事务稳健性与这些无序丢失的写入有关。实际上,那些可能丢失的乱序写入理论上可能会破坏事务逻辑的完整性,否则这些事务逻辑本来可以通过以非常特定的顺序发生的磁盘写入来保证。

    现在,当然,文件系统、数据库、RAID 控制器等的设计者已经意识到(或者当然应该意识到)这种与写入缓存相关的现象。在大多数随机访问类型的 I/O 场景中,从性能的角度来看,写缓存是非常可取的。事实上,拥有可用的写入缓存是能够对更高级的本机命令队列 ( NCQ ) 产生任何真正好处的关键要素) 支持较新的 SATA 和最后几代 PATA 实现。因此,为了在这样的特定关键时刻保证物理介质的顺序,文件系统和/或应用程序等可以专门请求将写入缓存刷新到介质。在此同步请求完成时 - (可能)文件缓冲区、操作系统磁盘缓存、物理磁盘缓存等的所有待处理内容实际上都已在正确的关键操作中根据事务系统设计出现在媒体上。也就是说,如果程序员在顶部进行了正确的调用,并且这个软件和硬件层链的每个元素都正确地完成了他们的工作,那么这种情况就会正确发生。即:在驱动器、RAID 控制器、磁盘驱动程序、操作系统缓存、文件系统、数据库引擎等方面没有这方面的错误。这是很多软件都必须完全正确地工作。此外,在这方面验证正确性非常困难,因为在几乎任何情况下,通常写入顺序根本不重要……而且电源故障和崩溃场景是难以构建的测试。因此,最终在一个或多个不同层和/或该术语的含义中“关闭写入缓存”......具有“修复”某些类型问题的声誉。实际上,关闭 RAID 控制器或 OS 磁盘缓存或驱动器等的写入缓存行为是避免系统中的一个或多个错误......以及这种传说的来源。电源故障和碰撞场景是难以构建的测试。因此,最终在一个或多个不同层和/或该术语的含义中“关闭写入缓存”......具有“修复”某些类型问题的声誉。实际上,关闭 RAID 控制器或 OS 磁盘缓存或驱动器等的写入缓存行为是避免系统中的一个或多个错误......以及这种传说的来源。电源故障和碰撞场景是难以构建的测试。因此,最终在一个或多个不同层和/或该术语的含义中“关闭写入缓存”......具有“修复”某些类型问题的声誉。实际上,关闭 RAID 控制器或 OS 磁盘缓存或驱动器等的写入缓存行为是避免系统中的一个或多个错误......以及这种传说的来源。

    无论如何,回到问题的核心:在 SATA 下,所有磁盘读/写命令和刷新缓存命令的具体处理由SATA 规范定义。此外,驱动器制造商应该为每个驱动器型号或驱动器系列提供详细的文档,描述它们的实施和对这些规则的遵守情况,例如希捷梭子鱼驱动器的示例。特别是,请参阅 SATA SET FEATURES的详细信息控制驱动器操作模式的命令,特别是选项 82h 可用于在驱动器级别禁用磁盘缓存,因为默认值肯定是在我知道的所有驱动器上启用写入缓存。如果您真的想禁用缓存,则必须在每次驱动器重置或启动时执行此命令,并且通常受操作系统磁盘驱动程序的控制。您可能可以鼓励您的操作系统驱动程序通过 IOCTL 和/或注册表设置类型的东西设置此模式,但这变化很大。

    • 15
  2. kevintechie
    2009-05-30T22:20:01+08:002009-05-30T22:20:01+08:00

    根据我的经验,电池支持的缓存磁盘控制器将禁用驱动器缓存。我不知道禁用磁盘缓存的方法。即使您可以禁用磁盘缓存,性能也会受到很大影响。

    对于低成本的选择,您可以使用廉价的 UPS,它可以向您的系统发出信号以进行有序关机。

    • 3
  3. Jon Brauer
    2013-09-10T22:43:33+08:002013-09-10T22:43:33+08:00

    磁盘回写缓存的误解之一是它们只会在断电时丢失数据。情况并非总是如此,尤其是在 SATA 设备上。如果 SATA 设备出现错误(例如角落案例 FW 错误或控制器错误)并且它在外部重置或重置,则无法保证回写缓存中的数据在挂起后仍然可用。

    这可能会导致设备出现暂时性错误、被重置、在丢失任何脏缓存时发生数据丢失,并且在驱动程序的块级别之上是静默的。

    更糟糕的是,通过操作系统工具禁用驱动器缓存也会在设备重置时丢失,因此即使设备在一天开始时禁用了缓存,如果设备被重置,它将重新启用回写缓存。在另一次重置时,设备将丢失数据。

    SCSI/SAS 驱动器和一些 SATA 驱动器能够保存回写配置文件的状态,以确保在重置期间不会丢失该属性——但实际上这很少使用。

    将块层集成到上层的 RAID 控制器可以注意到驱动器重置并再次禁用回写缓存——但标准 sATA 和 SAS 控制器不会这样做。

    此限制也适用于为性能和可靠性配置的其他 SET FEATURE 和类似参数。

    • 3
  4. Richard Rankin
    2013-02-18T10:10:40+08:002013-02-18T10:10:40+08:00

    我使用带有超级电容器而不是电池的 RAID 系统来维护缓存。电池磨损,必须被监控,必须更换并且在这些方面代表潜在的故障点。电容器在启动时充电,当 UPS 电源出现故障时刷新缓存,几乎永远持续,不需要监控等。但是,除非您在贫困线上开展业务(这些天并不少见),否则您应该拥有 UPS以及在发生故障时彻底关闭系统的软件 - 如果电源恢复正常,我通常会在关机前给它 5-15 分钟(取决于 UPS 负载以及可用的电池)。

    在雷暴期间,您可能(或可能已经 - 电力系统正在变得更好)看到灯光闪烁,有时就在它们熄灭之前。这是一种称为重合器的装置。这是一个断路器,当跳闸时会尝试关闭打开的开关,以防过载是瞬态的,大多数情况下都是瞬态的。如果它在尝试三次后仍未保持关闭状态,则它会保持打开状态。那个可怜的家伙不得不冒着雨出去处理它。不要为他感到太难过,而你和我只做两倍,如果加班,那是危险的工作。

    • 2
  5. John Rennie
    2009-05-31T02:55:41+08:002009-05-31T02:55:41+08:00

    正如你所说,一个合适的电池支持的 RAID 控制器会很昂贵,但你可以在 eBay 上以 100 英镑(150 美元)的价格找到戴尔 Perc5/i 控制器,尤其是使用 RAID5,像 Perc5/i 这样的控制器的速度会让你大吃一惊。我有几台带有 Perc5/is 和六个磁盘 RAID5 阵列的服务器,它们是我见过的最快的磁盘之一。特别是对于数据库应用程序,快速磁盘将真正提高性能。

    我会硬着头皮买一个 RAID 控制器。

    JR

    • 1
  6. Dave Cheney
    2009-05-31T03:47:17+08:002009-05-31T03:47:17+08:00

    据我了解,fsync() 伪造是电池支持的 RAID 控制器的属性,而不是驱动器。RAID 控制器包含一个电池,该电池可以为其写入缓存供电,直到驱动器恢复供电并且写入可以安全地提交到磁盘。这允许控制器立即返回操作系统,因为它在一定程度上保证写入将写入磁盘。

    应该注意的是,如果驱动器写回缓存已满,写入将阻塞,直到缓存被写回驱动器。这意味着缓存在持续写入下通常不那么有效。

    您的应用程序需要多少 IOPS?您确定您受到驱动器写入缓存的限制,或者驱动器上的一小部分(与服务器的内存相比)会受益吗?

    • 1

相关问题

  • 镜像驱动器

  • 您将如何监控 VM 服务器的剩余驱动器空间?

  • 我需要对 MacOSX 文件系统进行碎片整理吗?

  • 笔记本电脑 - RAM 与磁盘的性能

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

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