我们即将启动一个项目,将大型 DWH 迁移到新数据中心的新物理服务器上。当前的服务器规范是在 Windows 2012 R2 上运行的 SQL Server Enterprise 2016 SP2。新服务器将是在 Windows 2019 上运行的 MSSQL 2019 Enterprise。
当前和新服务器的 SAN 存储是全闪存存储阵列。在当前环境中,除了将数据和日志文件分离到不同的逻辑驱动器上外,不同的数据库(仅数据文件)也分布在不同的逻辑驱动器上。
- 本地 SSD - TempDb
- 逻辑驱动器 1 - 日志文件
- 逻辑驱动器 2 - 用于暂存数据库的数据文件
- 逻辑驱动器 3 - 面向用户的数据库的数据文件
- 逻辑驱动器 4 - 支持数据库的数据文件(ReportServer、MDS 数据库)
作为服务器迁移的一部分,我正在考虑将所有数据文件合并到一个逻辑驱动器上。
- 本地 SSD - TempDb
- 逻辑驱动器 1 - 日志文件
- 逻辑驱动器 2 - 数据文件
除了数据库文件管理之外,将数据文件分散在不同的逻辑驱动器上是否有任何性能优势?即使最终是同一个物理存储阵列,多个逻辑驱动器是否会提供更好的 IO?
如果所有卷都映射到 SAN 上的同一组物理磁盘,则通常没有区别。
但是,如果每个卷映射到不同的 SAN LUN,则 SAN 可能会以不同的方式为卷分配存储资源。例如,即使 LUN 共享相同的底层存储,它们也可以跨不同的 SAN 控制器托管、具有不同的缓存策略、单独监控等。
如果每个卷都映射到一组单独的物理磁盘,那么将它们拆分会非常昂贵,因为您无法在卷之间汇集和共享 IO 资源。由于大多数数据库文件 IO 是后台 IO,您通常应该将所有数据库文件的所有 IO 资源集中在一起,以最大限度地提高效率、共享和每个数据库的峰值 IO 吞吐量。
因此,这取决于您,您需要与您的 SAN 专家一起选择,并适当地配置 SAN 和服务器(例如 IO 队列深度)。
我认为对数据文件的写入不是“实时”完成的。通常,当日志文件位于“较慢”的存储上时,您会对性能产生影响(因为 SQL 需要在提交事务之前写入日志(*如果您没有将其配置为不这样做))。
我想将数据文件放在不同的驱动器上不会有真正的好处。
我想如果是我,我会将所有数据文件放在同一个驱动器上,然后检查 SQL 等待统计信息或与基线进行比较以检查性能。如果您遇到问题,您仍然可以选择添加新驱动器和移动一些数据库文件。
如果您有问题,您还可以检查是否没有其他“帮助”选项,例如添加 RAM(因为当 SQL 使用数据页时,数据页存储在 RAM 中),调整您最大的 IO 请求,以免必须在 RAM 中加载太多页面(迫使 SQL 更频繁地刷新最旧的页面),检查填充因子等。
我 2007 年的文章仍然与这个问题非常相关。是的,当使用多个物理卷时,您会获得速度提升。它适用于 SSD,就像适用于硬盘一样。事实上,根据我的测试,跨物理卷拆分 SQL 数据库比使用 RAID 更快。 https://www.zdnet.com/article/comprehensive-raid-performance-report/