如何创建作业以将 MDF 文件拆分为多个 ndf 文件

Posted

技术标签:

【中文标题】如何创建作业以将 MDF 文件拆分为多个 ndf 文件【英文标题】:how to create a job to split the MDF file into many ndf files 【发布时间】:2014-07-07 09:41:52 【问题描述】:

我是一名开发人员,并且以某种方式设法让自己参与其中。 数据库很多,每个数据库只有一个mdf,到现在还没有ndf。

现在这些数据库正在增长,我必须创建一个作业来找出哪个 MDf 文件正在接近或已经超过 100 gig 的大小,并且 然后我必须将 MDF 拆分为更多的 ndf 文件以分担负载并提高性能。

建议我在需要时在同一个主文件组中创建新的 ndf 文件(mdf 超出限制),然后收缩 mdf 以强制将数据移动到新的 ndf。然后重建索引,任务就完成了。

经过一番研究,我确信我可以通过将新文件添加到新文件组并将索引从大表移动到新的 ndf 文件来做得更好。 没有。数据库中的大表很少,大约 80% 的数据驻留在这些表中。

现在的问题是,有很多数据库,它必须通过在后台运行的作业来完成。它应该适用于所有数据库。

您能否建议,我应该如何实现这一目标? 这意味着一旦第一次完成拆分并创建新的文件组和 ndf 并且索引移动到ndf文件。下次mdf接近极限时应该怎么办?

或者这种方法有什么缺点,我应该坚持在同一个文件组中创建一个新的 ndf 并在达到限制时清空 mdf?

如果有人能建议我如何动态地做到这一点,那就太好了? 非常感谢您!

【问题讨论】:

【参考方案1】:

link 提供了一些关于如何获得所需结果的详细信息。您可以使用 sp_MSforeachdb 命令扩展它以在每个数据库上执行您的脚本。然而,此时这确实变得非常危险。

您可能需要考虑的一件事是研究预期的增长和其他增长,并计划一些东西来适应未来 6 到 12 个月的情况,并且每年只需手动执行一次或两次。如果这是不可能的,那么您可以在中间地带编写仅为大型表移动数据的脚本。

【讨论】:

非常感谢! ..我为大型表的非聚集索引创建一个新的文件组作为一次性活动是否有意义(以后可能需要一些维护)并创建一个脚本以在主文件组中添加另一个 ndf 文件以清空达到极限时来自 mdf 的数据? 我对此有一个问题,为什么是新文件组?你具体想达到什么目的?如果您考虑将实际文件放在不同的物理驱动器上,则需要它,否则我看不到增加的价值超过增加的复杂性。这似乎是一件小事,但考虑一下您在这些更改之前和之后的恢复计划,您会明白我的意思;)另外,如果答案是完整的并且符合您的喜好,则标记为已回答:D 我试图通过将索引分别存储在不同的文件组中来提高性能(可能在不同的磁盘上)......我也担心如果我继续创建 ndf 文件同一个组,主组很快就满了……

以上是关于如何创建作业以将 MDF 文件拆分为多个 ndf 文件的主要内容,如果未能解决你的问题,请参考以下文章

附加“mdf”文件时显示 ndf 文件丢失错误

如何将一个事件拆分为多个事件以将它们发送到多路复用扇出流

用友软件只有mdf.ldf 文件如何恢复

数据库复习总结-创建数据库表

数据库的创建和操作

在 SQL Server 中创建数据文件 - 数据/表将如何分布?