数据是否通过SSIS服务器流向目标数据库服务器?

Joy*_*ker 2 ssis

也许很傻但这对我来说相当混乱.我们有两个服务器盒,一个用于SSIS集成服务(IS),另一个用于SQL Engine来托管数据仓库.我们有一个在IS框上调用SSIS包的作业,用于将数据从另一个远程服务器加载到数据仓库服务器上.

那么,源数据首先通过Integration Service Server(在内存?ssis数据库中?)然后降落在目标数据库服务器上?或者Integration Service只是调用db服务器的进程直接加载源数据而不通过IS服务器.如果是前者,将IS和数据仓库放在同一台服务器上应该有助于吞吐量?

跟进问题.那么什么/如何监控和排除数据流故障呢?例如,如果我正在加载一个巨大的表,它似乎有时挂起.作业正在运行,没有错误,但我很长时间没有在目标服务器上看到插入活动.我从哪里开始寻找.在IS服务器上观看网络活动?

bil*_*nkc 5

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

我拍了一张照片

根据SQL Server主机的配置方式,这可能是件好事.SQL Server将使用X量的内存并保持它直到服务循环.SSIS旋转,完成其工作并释放其资源.如果为操作系统分配了8 GB的RAM,而SQL Server获得了剩余的N GB,则集成服务只能使用6 GB的内存.SSIS通过大量使用和滥用内存来获得变革的力量.拖动一对排序,将连接和其他一些内存碎片操作符合并到您的数据流中,然后您可以快速将内存减少到零.

如果您改为在ETL框上执行所有转换逻辑,则在开始插入目标表之前,不必担心会影响SQL Server和主机操作系统.

只要将数据从A到B和B到C序列化的成本小于直接从A到C的流成本两倍,并且由于产生的内存争用而有一些任意的软糖因素,我看不出有什么问题.它.一个更具体的例子,它没有意义 - 光纤通道HBA从A到C但B通过10-BaseT连接.对于任何数据量,进出B的连接将导致处理的相当大的拖累.

数据流卡住或显示无响应

首先,我希望它只是感觉它被卡住而你实际上并没有在VS中打开包并正在"观察"它运行.从Visual Studio中运行包会增加调试器的不小的负担.Shift-F5,使用dtexec从命令行运行它,或通过SQL Agent/Windows Scheduler/Tidal/ActiveBatch/etc安排作业以获得"真实"性能.此外,请确保您使用64位版本的dtexec,除非您需要仅存在于32位空间的驱动程序.

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

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

这不会告诉我数据流中组件之间发生了什么.为此,我需要记录不同的事件.在2005环境中,我唯一的技巧是OnPipelineRowsSent事件.在2008年以后,我们可以获得一些新的事件(管道*),但我还没有完成研究,看看他们是否可以提供与OnPipelineRowsSent相同的信息.

因为我很懒,所以我会使用OnPipelineRowsSent,因为我已经有了查询准备解析数据并找出我的减速点.这个事件可能很健谈,所以只能根据需要转.

这是我的blackbox路线.你不必那样做.您可以看到您的包正在做什么,并且您知道您的数据.

是否有LOB数据类型?SSIS在内存中做了一切.管道计算出理论上每行可以占用多少内存,并计算出它可以同时处理多少数据.大型对象类型(图像/文本/ varX(最大值))将其投入计算到地狱,所以在封面下,SSIS 可能会创建一个微小的,或者不那么小的二进制文件来保存LOB数据并在数据中携带指针流程任务.所有磁盘活动都会影响您的性能.

您的数据流中是否有异步组件?这可能会减慢你的转变速度.

您的数据源狗是否很慢(如Web服务)?也许你需要降低缓冲区大小.

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

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

沿着同样的路线,您是否拥有OLE DB Command数据流中的坐标?这也会扼杀单身人士的行动.

那些查找怎么样 - 你是否在查找中删除了比你需要的更多的列?这是在浪费记忆力.您是否需要提取所有年份的所有销售额,或者您是否也可以按当年/滚动N个月/等来过滤这些查询?

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

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

最后,阻止sp_whoisactive并安装它从文件中剥离create/alter,然后"在线"运行它,看看你的目标和源系统发生了什么,如果sql server,否则找到一个等效的工具来监控并确保你的连接仍然存在,没有被阻止等