gpt4 book ai didi

ssis - 数据是否通过SSIS服务器流到目标数据库服务器?

转载 作者:行者123 更新时间:2023-12-02 09:36:49 25 4
gpt4 key购买 nike

也许很傻,但这让我感到困惑。我们有两个服务器盒,一个用于SSIS集成服务(IS),另一个专用于SQL Engine托管数据仓库。我们的工作是在IS框上调用SSIS包,以将数据从另一台远程服务器加载到数据仓库服务器上。

那么,源数据是否首先通过Integration Service Server(在内存中?sis数据库中?),然后又到达目标数据库服务器上?或Integration Service只需调用db服务器的过程即可直接加载源数据,而无需通过IS服务器。如果是以前的话,将IS和数据仓库放在同一台服务器上应该有助于吞吐量?

后续问题。那么什么/如何监视和排除数据流故障?例如,如果我正在加载一张巨大的桌子,它有时会挂起。作业正在正常运行,但很长时间以来我看不到目标服务器上的插入 Activity 。我从哪里开始寻找。观看IS服务器上的网络 Activity ?

最佳答案

在专用服务器上执行的程序包将要求将所有数据传送到该服务器,并将其推送到远程服务器。

取决于您如何配置SQL Server主机,这可能是一件好事。 SQL Server将使用X数量的内存,并一直保留到服务循环为止。 SSIS加速运转,完成工作并释放资源。如果为操作系统分配了8 GB的RAM,而SQL Server获得了剩余的N GB,则集成服务只能使用6ish GB的内存。 SSIS通过大量使用和滥用内存来发挥其强大的变革能力。将一对排序,合并联接和其他一些内存碎片运算符拖到您的数据流中,然后您便迅速将内存降级为零。

如果您改为在ETL框中执行所有转换逻辑,则不必担心会影响SQL Server和主机OS,直到您开始将它们插入目标表中为止。

只要将数据从A序列化到B和将B序列化到C的成本小于直接将数据从A传输到C的成本乘以2,并乘以任意的软化系数来进行最终的内存争用,我就不会发现问题它。一个更具体的例子(从A到C的光纤通道HBA,但B通过10-BaseT连接)。对于任何数据量,往返于B的连接都将对处理造成极大的拖累。

数据流卡住或显示为无响应

首先,我希望只是感觉到它被卡住了,您实际上并没有在VS中打开该程序包并“监视”它的运行。在Visual Studio中运行包会增加调试器的负担。 Shift-F5,使用dtexec从命令行运行它,或通过SQL Agent / Windows Scheduler / Tidal / ActiveBatch / etc调度作业,以获得“真正的”性能。另外,除非需要仅在32位空间中存在的驱动程序,否则请确保使用的是64位版本的dtexec。

至此,我假设您有一个通过非繁琐机制在ETL Server上执行的程序包。它正在运行,但是您不知道发生了什么,只是没有完成。我们可以将其视为黑匣子,我建议您打开本机SSIS日志记录。登录到SQL Server表(该文件可以工作,但是您必须对该文件做些事才能获得任何见解)。默认情况下,我在程序包部署模型/ SQL Server 2012之前的版本中登录OnPreExecute / OnPostExecute / OnWarning / OnError / OnInformation / OnTaskFailed。

记录这些事件后,我可以看到任务何时开始和完成。我将看到它正在使用的配置以及可能遗漏的内容。发生了什么错误(任务Y失败),可以改进的内容(数据流中不需要列X),可能是逻辑错误(在完全缓存模式下,查找Z遇到重复的键)等。

那不会告诉我数据流中各个组件之间发生了什么。为此,我需要记录不同的事件。在2005年的环境中,我唯一的技巧是OnPipelineRowsSent事件。在2008年以后的版本中,我们可以使用一些新事件(Pipeline *),但我还没有完成研究,看看它们是否可以提供与OnPipelineRowsSent相同的信息。

因为我很懒,所以我会使用OnPipelineRowsSent,因为我已经准备好查询来解析该数据并弄清楚我的减速情况在哪里。该事件可能很容易发生,因此仅在需要时才打开。

那是我的黑匣子路线。您不必这样做。您可以看到您的程序包在做什么,并且您知道数据。

是否存在LOB数据类型? SSIS可以完成内存中的所有操作。流水线计算出理论上每行可以占用多少内存,并计算一次可以处理多少数据。大型对象类型(图像/文本/ varX(max))使计算陷入困境,因此在幕后,SSIS可能正在创建一个很小的(或不是那么小的)二进制文件来保存LOB数据并在数据中携带一个指针流任务。所有这些磁盘 Activity 都会降低性能。

您的数据流中是否有asynchronous components?这会使您的转换速度变慢。

您的数据源狗慢吗(就像Web服务一样)?也许您需要减小缓冲区大小。

或者,如果您有SQL Server源,则可能只需要尽快将一些数据放入管道中,因此fast 10000技巧可能会有所帮助。

也许您的OLE DB目标使用Table或View的2005默认数据访问模式。那就是在目标系统上执行单例插入。

同样,您的数据流中是否包含OLE DB Command?这也触发了单例操作。

这些查询怎么样-您是否回退了比查询所需的更多列?那是在浪费记忆。您是否需要拉出所有年份的所有销售额,或者是否还可以按当年/滚动N个月等来筛选这些查询?

目标系统有多忙? SSIS可以在目标上获得表锁吗?

相对于当前大小,您要装载多少数据到目标表?该表上有多少非聚集索引。 SQLCAT有一个经验法则-1个NCI和100%的数据增加;删除并重新创建索引。超过1个NCI和大约10个数据加载,删除和重新创建。切勿丢弃集群密钥。 (这些值是近似值,应根据您的系统进行验证)

最后,安装sp_whoisactive并安装它,从文件中删除创建/更改,然后以“内联”方式运行它,并查看目标服务器和源系统(如果是sql server)发生了什么,否则请找到一个等效的工具来监视并确保您的连接仍然有效,未被阻止等。

关于ssis - 数据是否通过SSIS服务器流到目标数据库服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com