减少标准版 500 Gb 数据库的大小

Fei*_*vel 2 sql-server sql-server-2008-r2

我的一位客户要求找到任何选项来减少这个 500 GB 数据库中某些表的大小,这些表的大小很大,并导致读取性能出现问题。我的客户很快就会迁移到 SQL 2016。有没有一种方法或方法可以减少它并提高读取性能。

Bre*_*zar 5

以下是我的答案,按照我做的顺序:

1. 删除不再需要的表。进入 SSMS,对象资源管理器,单击数据库的表文件夹,然后通过单击查看、对象资源管理器详细信息打开对象资源管理器详细信息。从那里,您可以右键单击列以显示数据大小和索引大小,您可以按其中之一进行排序。我发现人们经常留下他们不知道的备份表。 SSMS 2016 显示

2. 删除未使用的索引。First Responder Kit 中使用sp_BlitzIndex(免责声明:我是作者之一)删除未使用的非聚集索引。删除重复和接近重复的索引的奖励积分。

3. 检查服务器的瓶颈。再次从 First Responder Kit,运行sp_BlitzFirst @SinceStartup = 1 以获取自启动以来的等待统计信息。如果顶部等待是 PAGEIOLATCH,则表示从数据文件中读取数据页。在这种情况下,请尝试最大化您的内存。2008R2 标准版仅用于缓冲池就占用了 64GB,并且可以使用比其他用途更多的内存。确保您的服务器至少有 96GB RAM。(我并不是说将硬件放在问题上总是一个好主意,但我的台式机有 64GB 的 RAM,其余的这些更改将越来越具有破坏性。)

如果您的顶部等待统计信息不是 PAGEIOLATCH,那么请关注顶部等待类型,因为减少数据库大小可能无助于提高性能。

4. 实施急需的索引。当您的数据库不适合 RAM 时,索引设计变得更加重要。您将在上一步中看到 sp_BlitzIndex 中迫切需要的缺失索引列表,但也可以考虑运行sp_BlitzCache @SortOrder = 'reads'(同样来自我们的 First Responder Kit)来识别执行最多逻辑读取的查询。通常,他们的计划会缺少索引,同样,您可以实施这些以减少需要从磁盘读取的数据量。

5. 仔细检查存储速度。在前面的步骤中,我建议运行 sp_BlitzFirst @SinceStartup = 1。现在您已经修剪了索引、调整了查询​​和大小合适的 RAM,是时候再次回到相同的命令 - 只是这一次,而不是查看您的等待统计信息,请查看“物理读取”部分。这可以识别您正在读取哪些数据文件,以及它们的平均延迟是多少。如果您的平均读取延迟超过 100 毫秒,那么是时候开始询问有关存储性能的问题了。