Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis SSI在非链接服务器上插入不匹配的数据_Ssis - Fatal编程技术网

Ssis SSI在非链接服务器上插入不匹配的数据

Ssis SSI在非链接服务器上插入不匹配的数据,ssis,Ssis,这是关于SQL Server 2008 R2和SSI的 我需要用另一台服务器上的生产表中的新数据更新一台服务器上的几十个历史表 这两台服务器没有也不会链接 一些历史表有1亿行,一些生产表有数千万行 我目前为使用以下数据流组件的每个表准备了一个流程: OLEDB源任务以提取适当的生产数据 查找任务,检查生产数据的键是否已存在于历史记录表中,并使用“重定向到错误输出”—— 将丢失的数据传输到OLEDB目标历史记录表 这个过程对于大型表来说太慢了。一定有更好的办法。有人能帮忙吗 我知道如果服务器被链接

这是关于SQL Server 2008 R2和SSI的

我需要用另一台服务器上的生产表中的新数据更新一台服务器上的几十个历史表

这两台服务器没有也不会链接

一些历史表有1亿行,一些生产表有数千万行

我目前为使用以下数据流组件的每个表准备了一个流程:

  • OLEDB源任务以提取适当的生产数据
  • 查找任务,检查生产数据的键是否已存在于历史记录表中,并使用“重定向到错误输出”——
  • 将丢失的数据传输到OLEDB目标历史记录表
  • 这个过程对于大型表来说太慢了。一定有更好的办法。有人能帮忙吗


    我知道如果服务器被链接,一个基于集合的查询可以轻松高效地完成任务,但是服务器没有链接

    第1步。向新服务器增量批量导入适当的生产数据。 Ref:将数据从单个客户端(或流)导入非空表

    第二步。使用Merge语句标识新记录/现有记录并对其进行操作


    我意识到这将在新服务器上占用大量的磁盘空间,但该过程会运行得更快。

    将您的问题细分为更小的问题。这是你解决这个问题的唯一办法

    让我们检查一下问题

  • 您正在插入和/或更新现有数据。在数据库级别,行被打包到页面中。它很少是完全合适的,而且通常在一个页面中还有一定数量的可用空间。更新行时,假设名称字段从“bob”变为“Robert Michael Stuckenschneider III”。那一排需要更多的空间居住,虽然页面上还有一些空间,但空间不够。其他行可能会被拖到下一页,只是为了给这一行留出一些空间。这将导致大量磁盘活动。是的,考虑到您正在添加更多的数据,这是不可避免的,但了解您的数据将如何增长并确保您的数据库本身为这种增长做好准备是很重要的。也许,目标表上有一些非聚集索引。禁用/删除它们可以提高插入/更新性能。如果仍将数据库和日志设置为以10%或1MB的速度增长,或者无论默认值是什么,存储引擎将花费所有时间尝试增长文件,而没有时间实际写入数据。外卖:确保您的系统能够接收大量数据。与您的DBA、LAN和SAN团队合作

  • OLTP系统中有数千万行,归档系统中有数亿行。从OLTP数据开始,您需要确定历史系统中不存在的内容。考虑到您的数据量,我将计划此包在处理过程中出现问题,并且需要“可重启”。我将有一个包,该包的数据流中仅包含从OLTP中选择的业务键,用于与目标表进行匹配。将这些键写入OLTP服务器上的表(ToBeTransfered)。让第二个包使用这些键的子集(N行)连接回原始表作为源。它直接连接到目的地,因此不需要查找。该fat数据行仅在网络上流动一次。然后让执行SQL任务进入并删除刚刚发送到归档服务器的批处理。此批处理方法允许您在多台服务器上运行第二个包。SSIS团队在其论文中对此进行了更好的描述:

  • 确保查找是一个形式为
    SELECT key1,key2 FROM MyTable
    的查询更好的是,您能为查找提供一个过滤器吗
    其中ProcessingYear=2013
    ,因为如果OLTP仅包含2013年数据,则2012年无需浪费缓存

  • 您可能需要在连接管理器上修改连接,并让网络人员设置巨型帧

  • 看看你的疑问。你有什么好计划吗?您的表是否索引过度?请记住,每个索引都会导致执行的写入次数增加。如果您可以在处理完成后转储它们并重新创建,您会认为您的SAN管理员为您购买了一些Fusiono驱动器。我知道当我从一个只有10个列的十亿行表中删除14个NC索引时我做了


  • 如果您仍然存在性能问题,请建立一个理论基线(在现实世界中永远不会出现的理想条件下,我可以在N个时间单位内将1GB从a推到B),然后按照您的实际情况进行操作。您必须有一个限制因素(IO、CPU、内存或网络)。找到罪魁祸首并投入更多资金,或者重新构建解决方案,直到它不再是滞后指标。

    在OLEDB源代码中,您是否使用SQL命令作为数据访问模式?一个常见的性能提示是使用SQL命令并编写一个select语句,只获取所需的列。