SQL Server 2005 巨大的数据库问题

Olg*_*aya 7 sql-server-2005 sql-server maintenance

我的数据库文件增长非常快(设计者不是我,只是每周报告使 7 GB 增长)。最后,我的磁盘空间不足。以及计数的未报告周数。

我有一些选择可以执行,但需要您的建议:

  1. 缩小数据库(缩小是否为操作系统提供了空间?)

  2. 从外部磁盘或网络存储分离和附加 DB。(SQL Server 2005 是否支持网络存储?)

  3. 将 RAID 配置从 1 更改为 5 以将磁盘大小增加一倍。(这是最安全的选择,但也有 RAID 配置更改的危险。)

感谢这些关于我的问题的伟大而有用的答案。我检查了日志文件,99% 的空间未使用。所以,我缩小了它。由于 DB 仅在我们需要一些报告时使用(按时间请求,并不总是需要访问 db )我认为性能对我来说不是问题。

SQL*_*tar 6

收缩数据库将允许您将一些空间返还给 O/S,但由于收缩活动会破坏数据库,因此该空间会以性能为代价。您可以通过重建索引来解决此问题,但这通常会导致空间被回收。并且认为收缩将是解决方案的想法是错误的,因为您没有解决增长问题本身,您只是试图在胸部吸吮伤口上缠上绷带。

将文件放在可以轻松扩展的磁盘上是最好的选择。外部存储运行良好(或 SAN,如果可能)。您不能为您的数据库文件使用 UNC 路径,但您可以使用 DFS 安装驱动器并指向网络位置,一切都会正常工作。

HTH


Dav*_*ett 5

如果您有相关的备份计划,您的日志文件将不会无限增长。您可能会发现其中的空间主要是未分配的 - 随着日志中的页面块得到备份(当然取决于您的备份/恢复模型,如果您不熟悉这些选项,请阅读它们)它们被标记为以后可以免费再次使用,但不会发布到操作系统。下次您的大进程运行时,会导致许多插入/更新,因此需要几 Gb 的日志空间 MSSQL 不需要从操作系统请求更多空间,因为它可以只使用已经分配给日志文件的块,但是目前没有任何不能被覆盖的东西。

如果您在每次运行每周进程时都看到日志文件中有额外的 GBytes 增长,那么您需要检查您的备份计划,因为这意味着 SQLServer 没有将日志页视为可重用,因为您的备份制度对数据不正确和活动(或者它可能很简单,因为您根本没有经常进行备份)。

数据文件的增长是类似的:如果文件中有大量可用空间,那么下次需要一些额外空间时就会使用这些空间,而不是要求操作系统分配更多空间。如果您的数据意外大,需要注意的一件事是过度索引 - 您可能会发现大型表具有从未真正使用过的索引(要么根本不需要它们,要么与另一个索引相比没有提供太多好处展示)。这个典型的例子是找到每一个在很宽的表列有它自己的指标(通常是,但并非总是坏表/索引设计的标志),或结论“的索引列1列2 ”并一个COLUMN1就其本身而言:查询计划器和运行器将能够像基于 column1 的查询一样使用复合索引,因此不需要使用额外索引的空间。维护无用的索引也会影响写入性能。如果您想更多地了解该问题,本书有几个部分涵盖了常见的索引问题,并且无论如何 IMO 都值得所有开发人员和 DBA 阅读。

不必要地缩小文件可能会导致文件内出现过多碎片,这会损害性能,因此如果您采用这种方式,请务必小心。

关于从 RAID1 到 RAID5 的切换:我不建议这样做。RAID5 通常在写入繁重的数据库工作时存在性能问题(它可能会显着减慢生成 GBytes 数据和事务日志条目的巨大进程),因为在任何写入更新之前进行额外读取 -校验和问题。而不是添加一个驱动器从 R1 到 R5,我会选择两个额外的驱动器并使用 R10 - 仍然是两倍的空间,但没有写入性能问题(当然,假设服务器中有两个额外驱动器的空间!)。无论您在该领域做什么,从一种 RAID 配置转换到另一种 RAID 配置都可能会在您备份数据、重建阵列、并重新复制数据(除非您购买一整套新驱动器并且可以同时运行新旧阵列,这将大大减少停机时间)。另一种选择是添加两个驱动器作为新的 RAID1 阵列,然后使用 Windows 的动态卷跨越这两个阵列(为您提供 RAID10 的大小,但没有可以从条带化中获得的一些性能增益)。或者,您可以将两个数组分开,并将数据文件放在一个上,将事务日志放在另一个上——通过这种方式将数据和日志保存在不同的轴上,可以通过减少更新所需的磁头移动来显着提高写入操作的性能日志和数据文件。最后一个选项也具有最少的停机时间,因为一旦驱动器处于其余状态,就可以“实时”完成: