优化 SQL 服务器中大型数据集的性能

Optimizing Performance of a Large Dataset in SQL Server

我在带有 8 个 SSD 的 Azure VM 上使用 SQL 服务器 运行。 SSD 在存储空间中组合在一起作为 1 个磁盘 - 为了增加容量并合并 IOPS/Throughput。但是,就我所有的 tests/benchmarks 而言,“结合 IOPS”部分似乎并没有发挥作用(“结合吞吐量”部分正在发挥作用)。事实上,看起来单个磁盘上的 SSD 性能 (IOPS) 比整个 8 物理磁盘虚拟磁盘要好。所以,我正在考虑忘记存储空间并将我的数据拆分到 8 个磁盘上。

但是最好的方法是什么? (我对多个文件、文件组或分区表等没有太多经验。)

只需制作 8 个 mdf 文件(每个磁盘上 1 个)并让 SQL 服务器在所有这些文件中重新分配数据?如果是这样,我想知道 SQL 服务器如何知道给定记录在哪个磁盘上。这样做会加快速度吗?

也许也拆分 ldf 文件?

多个文件组呢?我真的不知道多个文件和文件组之间的实际区别是什么。

使用分区函数以某种方式拆分大表怎么样?这会有帮助吗,因为现在,也许,SQL 服务器将“更好地了解”给定记录的位置(在哪个文件中)——因为它是由分区函数定义的?

请不要试图结束这个问题,因为它看起来很笼统或开放式。生活已经够艰难了。这个问题问得好。而且我敢肯定,有很多人可以对此提供非常有帮助且经验丰富的答案,这将对很多人有所帮助。仅仅因为这个问题可能没有一个确切的答案,并不意味着它是一个糟糕的问题。无论如何,如果您考虑一下,这个问题有一个最佳答案 - 在这种非常常见的情况下,有一种最佳的做事方式。

您在单线程中询问的细节需要进行过多的深入研究。用例因项目而异。

我建议你去 in-depth 上 Storage: Performance best practices for SQL Server on Azure VMs,Microsoft 的官方文档。浏览 核对清单 详细信息。根据 IOPS 参考最适合您的用例的磁盘类型。您将在本文档中获得所有查询的答案。