我们的一台服务器出现了问题。当我们复制较大的文件(在这种情况下,大文件是指 50MB 或更大)时,复制操作(从 C:\ 到 C:)可以正常启动,但随后开始延迟,降至 100kb/s 并导致整个服务器挂起(我们的应用程序无法再从 SQL Server 返回结果,因此应用程序对用户挂起)。
Intel RST 在 SMART 上显示全部绿色。以下是系统规格:
- 服务器:HPE ML10
- 贮存:3x HP 3TB,采用 RAID5 配置
- 操作系统:Windows Server 2012 R2
- 服务器角色:域控制器、应用程序服务器(SQL Server 和 .NET 应用程序)
- 存储设置:条带大小:128KB,写缓存缓冲区刷新:已启用,缓存模式:关闭,物理和逻辑扇区的大小:512 字节
我不是服务器专家,所以我不确定我是否正确设置了这些内容。这里可能是什么问题?
编辑:我不是这方面的专家(开发人员)。所以也许我做错了一些简单的事情。
编辑2:https://i.stack.imgur.com/3FyMU.jpg磁盘写入性能极差。但是没有像使用 Windows 资源管理器复制时那样完全挂起。我猜挂起的资源管理器会堵塞消息泵,从而堵塞系统。您认为迁移到 RAID1/10 可以解决此问题吗?
答案1
如果我正确理解了“Cache-Mode: Off”,那么写入性能很差是完全可以理解的。检查复制/读取是否来自 RAID(到网络或 NUL)是我的问题还是复制/写入进入 RAID- 我的猜测是正确的,只有写入 RAID 很麻烦。
RAID5 是分布式的 - 每个条带由(就您而言)三个段组成:数据 1、数据 2 和奇偶校验 12。现在,当将某些数据写入阵列时,它不能仅写入数据段,因为奇偶校验不再匹配。
如果 data1 被写入或更改,则控制器需要执行以下任一操作:
- 读取数据2,重新计算奇偶校验12,写入数据1,写入奇偶校验12(适用于小数组)
- 读取旧数据 1,读取奇偶校验 12,从奇偶校验 12 中删除旧数据 1 奇偶校验,使用新数据 1 重新计算奇偶校验 12,写入数据 1,写入奇偶校验 12(对于较大的数组)
因此,每当发生更改时,控制器操作就会放大三倍!如果无法缓存这些操作,则每次写入都将导致执行三项操作,您的应用程序需要等待。使用缓存,可以省略许多读写操作,性能损失将大大减少。
此写入操作放大的唯一例外是当您一次写入整个条带时:只需从缓冲区中取出数据 1 和数据 2,计算奇偶校验 12 并写入所有三个段。这只是 1.5 倍的放大。但是,为了能够将所有传入数据组合成完整的条带,您需要能够对数据进行排队。猜猜怎么着,您又需要缓存了。
简而言之:如果您使用 RAID5 或 RAID6,则绝对需要缓存- 这不是奢侈。缓存太少甚至没有缓存都会影响性能。如果是具有可配置缓存的软件或托管 RAID,请留出至少 512 MB,最好留出 1 或 2 GB,这样它就会“飞起来”。带有三个驱动器的 RAID5 不会带来性能奇迹,但它可以正常工作。
编辑:HP ML10 G9 具有集成芯片组的 Intel RST SATA RAID 控制器 - 主机 RAID。根据所使用的确切型号和控制器,缓存应该可以在某处配置。