首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS软件包的优化

SSIS软件包的优化
EN

Stack Overflow用户
提问于 2021-05-28 09:07:16
回答 1查看 1.7K关注 0票数 0

我正在寻找一些关于优化SSIS包的技巧。我运行了很多,但执行时间很长。一些包裹运行在数千或毫升(2-15)的记录上。由于晚上的时间还不够,他们重叠,有时运行3-4,这使它更加困难。我做了些测试。我发现在SSIS里,vievs真的很糟糕.当我运行一个SQL查询时,它们运行得更快,然后选择到表中的视图中,然后执行OleDB源/目标工作。在执行过程中,源行是在5-10分钟内选择的,记录超过5milin,但是将数据插入目标表需要花费10倍的时间。据我所知我得到了这些信息。

SSIS.Pipeline信息:缓冲区管理器检测到系统缺乏虚拟内存,但无法交换任何缓冲区。4个缓冲器被考虑,4个被锁定。要么由于未安装足够的内存,其他进程正在使用它,要么太多缓冲区被锁定,从而使管道无法使用足够的内存。信息:缓冲区管理器在0物理缓冲区中分配了0兆字节。

有什么办法可以让事情发展得更快吗?我需要同时入侵DefaultBufferSize和DefaultBufferMaxRows吗?它会出现10k和1000万美元的违约。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-28 14:15:57

一些笔记可以让你朝着正确的方向前进:

下面是关于此错误的

  • ,这表示运行ssis包的服务器内存不足。正如所建议的那样,这可能是因为您有其他处理程序在消耗该内存,即其他包同时运行。

SSIS.Pipeline信息:缓冲区管理器检测到系统缺乏虚拟内存,但无法交换任何缓冲区。4个缓冲器被考虑,4个被锁定。要么由于未安装足够的内存,其他进程正在使用它,要么太多缓冲区被锁定,从而使管道无法使用足够的内存。

  • SSIS使用内存缓冲区通过数据流处理数据。在任何给定的时间内,最多使用5次。在这种情况下,SSIS无法分配运行数据流所需的缓冲区,因为没有足够的可用内存。如果服务器内存不足,增加内存缓冲区的大小只会使情况变得更糟。
  • ,以下是有关SSIS如何运行内存的更多详细信息,以便您可以考虑如何使用内存。如果在同一个包中并行运行多个数据流,默认情况下SSIS将运行服务器+2上的处理器数。因此,如果您有4个核心,则同时运行6个数据流。在数据流中,并行执行由EngineThreads属性管理。这里要注意的是,数据流在源和转换之间所做的事情的数量是有限的。因此,数据流越不复杂,它的运行效率就越高。在内存受限的系统中,这对您意味着什么:
    • Limit在同一个time
    • Limit上运行的包数量,以及在package
    • As中并发运行的数据流的数量--这是最好的实践,只有在dataflow
    • Keep中有一个源和目的地--数据流很简单。使用它们将数据从一个服务器移动到另一个服务器。使用SQL执行转换工作。使用暂存表来登陆数据,然后在将数据加载到最终表之前对其进行操作。即使您没有进行任何转换,使用SQL和WHERE NOT EXISTS子句加载表仍然会更有效。
    • 一旦简化了数据流,但是性能仍然很差,隔离了瓶颈。只使用源运行数据流,并查看需要多长时间。如果速度慢,请调优源查询。将后续任务添加到数据流中,并测量性能。如果您只是慢的步骤是目标,调优that.
    • For调优目标,尝试使用没有索引的暂存表。使用TABLOCK,这将告诉SQL使用最小日志记录。一旦实现了暂存模式,就调优SQL以将数据加载到最终的table.
    • For中,优化源,避免视图,因为它们可能包含不必要的连接和列,而您没有使用它们,或者使用专门用于流程的视图,这样就可以为您所需的内容编写它。总的来说,如果涉及很多表,proc可能是一个更好的选择--在将临时表加入到生产中不使用select.
    • Do WITH (NOLOCK) 提示的最终最大表之前,可以通过使用临时表来提高性能。,如果在读取数据时确实正在更新数据,则需要在加载数据之前对数据进行更新,别管幻影读取和其他可以happen.

的可怕事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67735987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档