我们一直在处理来自 Informatica 的 SQL Server 上的巨大磁盘增长。加载后,数据库增长到 2.4TB。数据库收缩后,它变为 1.05TB。什么可能导致这种情况发生?我们可以在 Informatica 和/或 SQL Server 中检查哪些设置以便下次运行来解决此问题或进行猜测/检查?
编辑:
使用 Informatica 映射移动数据有两种方法。使用 SQL 转换类型或使用具有 Informatica 开箱即用功能的内置数据流来使用 SQL 覆盖(直接运行 SQL)。在这种情况下,我们使用数据流。当使用数据流时,仍然使用直接 SQL,但 Informatica 在幕后创建 SQL 代码。我们以 1,000,000 条记录为增量加载。我想也许 Informatica 可能会告诉 SQL Server 在它加载时分配磁盘空间,但我什至不确定如果它这样做的话要寻找什么命令。
检查以下一些内容:
-备份前产品中数据库的可用空间。您可能只是在预留的产品中有很多可用空间。在引入IFI之前,它曾经是最佳实践。您仍然需要预先分配。
DBCC SQLPERF (LOGSPACE)
- 恢复后的事务日志大小,但通过运行两次进行预缩。也许事务日志在还原后没有打开的事务,而您现在正在检查点/收缩它。这意味着您可能不会进行生产日志备份,并且您的恢复模型是FULL
.-按照恢复后大小的顺序列出所有表的大小,然后按照收缩后的顺序列出所有表的大小,然后进行比较。
我的数字不正确。收缩完成,大小为 0.3TB。所以 SQL Server 有 6 倍的分配存储空间,而不是 2 倍的分配存储空间。在删除目标表上的索引后,我通过创建目标定义(通过在 Informatica 中导入表模式)解决了这个问题。SQL Server 正在分配磁盘空间,即使索引已禁用。可能是因为 Informatica 告诉它这样做。所以现在 Informatica 只是加载数据,甚至不关心是否有索引,即使有。与其在 ETL 前禁用它们并在 ETL 后启用它们,我们现在只是在 ETL 前删除索引,然后在 ETL 后创建它们。