【问题标题】:SSIS transfer tables between sql servers - slowsql 服务器之间的 SSIS 传输表 - 慢
【发布时间】:2019-12-23 03:27:41
【问题描述】:

我从 sql server A 到 B 中提取了 5 个表。每次提取都是一个连接多个表的查询。

我通常在 sql server 导入向导中运行这些提取。我现在将它们放在 SSIS(5 个并行提取)中,我注意到它要慢得多(至少慢 50 倍)。

我想知道我是否在这里执行流行/最佳实践?并知道为什么它很慢?谢谢


感谢大家的讨论

我按照JodyT的思路,从导入向导生成了SSIS,发现了不同:

在目标中我应该使用Table or view - fast load - 当我从Table or view 更改为此时,我的速度类似于导入向导。

【问题讨论】:

  • 所有表是否都位于同一个数据库中(源?目标?),表是否存储在一个文件组中?如果有很多文件组,它们是否位于同一个硬盘上?源服务器和目标服务器的规格是什么?
  • 导入和导出向导创建并执行一个 SSIS 包。您可以保存此包并检查它以查看数据是如何导入的。
  • 您是在测量挂钟时间还是 CPU(包括 I/O)时间?

标签: sql-server optimization ssis etl sql-import-wizard


【解决方案1】:

与几乎任何此类问题一样,您所做的是否是“最佳实践”取决于。您收集数据的查询并不是考虑性能的唯一组件。其他需要考虑的因素是:

  1. 正如其他人所暗示的那样 - 您的硬件(目标、源、中间网络等...)
  2. 您的数据(整体大小、深度、宽度)
  3. 您的日程安排(这是唯一运行的事情吗?必须在给定的窗口内完成吗?等等...)

例如,如果目标或源或网络硬件被其他人大量使用,您可能根本不想使用线程来最小化并发使用量。相反,如果硬件专门用于计划的批处理活动,那么您可能确实希望将数据移动拆分为线程并尽可能多地使用硬件来减少执行此任务所花费的总时间。

无法了解所有这些信息并做出您可以做出的最佳决定,也只能尝试逐步增加线程数。首先,评估“快”和“慢”对您的环境意味着什么。当您只运行一个线程时,传输速率是多少(如果您还没有从了解硬件中知道这一点)。然后添加另一个线程,重新评估传输率。然后是另一个,依此类推,直到您发现移动数据的总时间减少。增加,直到您知道您正在为您的硬件、您的网络、您的数据计划使用最佳线程数。

你不会在这里得到明确的答案(或者至少,你不应该:))关于什么对你来说是“最好的”。太多的分享和考虑。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多