我有一个大的解决方案,目前在一个大的包。我已经开始将包拆分为更小的包,但注意到在运行解决方案时,SQL Server上使用了更多的内存。
还有没有人在使用多个包的时候看到过这种情况?
发布于 2020-06-11 23:08:46
SQL Server,sqlservr.exe,通常作为一项服务运行,当您使用它时,它将继续消耗内存,直到它耗尽所有内存,并且windows强制它返回。这是设计上的,因为当数据库在内存中有尽可能多的数据时,它的性能最好,而不是必须从磁盘读取。您应该对实例执行configure your SQL Server操作以获得最大内存,以便操作系统可以有喘息的空间。How much memory should you reserve?
SQL Server Integration Services,SSIS,在它自己的地址空间中运行-即使您可以从SQL Server启动它,您也会看到它,dtexec.exe,处理内存请求,并且在进程崩溃的情况下,它不会关闭SQL Server。这是一件非常好的事情,分离。从实际的角度来看,这意味着如果你要在一台机器上运行SSIS包,你需要为SSIS留下足够的内存来运行,猜猜会发生什么,SSIS是一个非常快的in-memory ETL解决方案。SSIS数据流任务将尽可能多地将数据保存在其内存中,以便在将数据写入目标之前可以在一次大遍历中对其进行操作(更改数据类型、查找等),因为IO是ETL中开销最大的部分。
但是,当您开发这些包时,您将从Visual Studio,devenv.exe运行它们。VS/SSDT需要内存才能完成任务。而且,当您从Visual Studio运行SSIS包时,它被封装在调试器调用中(无法回想起进程名称),这也会占用大量内存,无法提供调试功能。
遗憾的是,为开发人员机器分配4 is的RAM是不够的。如果这是一台服务器,仅许可成本就会使其在内存上的最大成本相形见绌。
如果是我,我会将SQL Server的容量限制在1.5 GB左右。对于SQL Server来说,通常情况下,gig不足以做很多事情。假设Visual Studio和调试器将在事情变得紧张和繁重时正常工作大约2 get。这就使得.5的工作留给了操作系统(以及Outlook、Excel、Windows Explorer、指向StackOverflow的网络浏览器和MSDN文档之类的废话,我们的内存已经用完)
以解决SSIS的内存使用问题。我认为,但还没有测试,1个包有10个数据流串行连接,而10个包每个有1个数据流,单片软件包将消耗更多的内存,因为它将在启动时验证所有数据流。是的,整体式方法会分担启动开销,这些开销将被分配给每个单独的包,但我无法想象这会有什么意义。另外,一旦dtexec进程完成,该内存就会返回给操作系统。它与SQL Server不同,SQL Server会在进程循环之前一直占用内存。
https://stackoverflow.com/questions/62326813
复制相似问题