SQL Server - SSD 上的表分区

6 sql-server-2008 sql-server

我的数据库中有一个表,大约有 250m 行。我是数据库的新手,但我已经阅读了有关对表进行分区以提高性能的信息。我似乎注意到的重点之一是分区应该放在不同驱动器的不同文件组中。但是我的服务器有一个分区的 ssd。将文件放在存储设备的各个分区中是否有任何优势,即使它在物理上只是一个分区。如果所有文件组都在同一个物理驱动器中,分区是否仍然有用?

提前致谢。

Mik*_*Fal 10

性能只是可以从分区中获得的几个好处之一。分区的好处通常通过分区消除来实现,其中查询引擎可以快速缩小您查询的数据集的范围。这允许 SQL Server 仅读取和操作数据的特定部分,从而大大减少工作时间和 I/O。但是,正如链接帖子中所讨论的,这在很大程度上取决于您如何编写查询以及它使用的索引是否可以利用您现有的分区方案。

分区消除还允许您利用将分区放置在不同磁盘系统上的好处。这个想法相当简单:如果您可以将查询更活跃的分区放在更快的磁盘上,您可以更好地帮助您的查询,因为可以更快地检索它正在访问的数据子集。但是,核心概念保持不变。您提高查询性能的原因是因为您正在帮助引擎减少它正在处理的数据量。

分区的另外两个好处包括能够快速地将数据移入和移出表,SWITCH并通过按分区重建索引来减少索引重建时间。第一个是非常具体的东西,只有在设计得当的情况下才能使用,但在极大的数据集上非常有用。第二个实际上是我通常会利用分区的主要原因之一,因为从资源和时间的角度来看,维护大表上的索引可能非常耗时。

话虽如此,2.5 亿行通常不被视为大型数据集。SQL Server 可以轻松处理这种大小和更大的表。当我考虑分区时,我尝试更多地考虑数据量。在我的表超过 250 GB 之前,我通常不会考虑分区。这并不是说如果您的行很宽,您的表格不适合此配置文件,但您可能不在该阈值附近。您可能需要考虑其他选项来提高性能。通常这意味着适当的索引。如果您使用的是企业版,一个快速的胜利可能是改为使用数据压缩,这将减少您对磁盘的 I/O,并且可以很好地提高性能。

  • ...一个相关的好处是,您可以更快地将较旧/较冷的数据滚动到较慢的存储中,这样您就可以将热数据保存在快速存储上,而中断时间最少。一位[智者](http://sqlblog.com/blogs/paul_white/)曾经说过[你可以通过良好的索引策略恢复分区消除的好处](https://answers.sqlperformance.com/questions/ 1509/trying-to-understand-why-partition-elimination-is.html)。 (4认同)

Tom*_*Tom 6

不。实际上分区不是你想的那样,应该重新阅读 - 删除数据比其他任何事情都更有帮助。分区(sql server,仅限企业)是一个非常具体的问题解决者。顺便说一句,2.5 亿行非常小——想看看在虚拟机中运行的 100 亿行系统吗?实际上 - 这取决于你做什么。分区可能对查询有所帮助(就像 bascialyl 索引一样),但允许快速删除分区。

对于纯 IO,您需要纯 IO,如果您有一个 SSD,它已经是一个很好的解决方案 - 并且您无法优化。只要您使用相同的磁盘子系统,操作系统级别的分区就根本无济于事。


Rod*_*ion 1

是的,它可以提供帮助。但问题在于以特定方式重写查询的成本。 设计分区以提高查询性能

分区的含义相当于您按日期或其他值存储数据的部分。

SCRUD会快得多,因为只会使用相关的数据块。

微软软件定义网络

分区使大型表或索引更易于管理,因为分区使您能够快速有效地管理和访问数据子集,同时保持数据集合的完整性。通过使用分区,将数据从 OLTP 加载到 OLAP 系统等操作只需几秒钟,而不是早期版本的 SQL Server 中需要几分钟和几小时的时间。对数据子集执行的维护操作也可以更有效地执行,因为这些操作仅针对所需的数据,而不是整个表。