繁体   English   中英

SSIS包应该在数据库SQL Server还是单独的应用程序服务器上运行?

[英]Should SSIS Packages run on a database SQL Server or a separate app server?

在我公司看来,将应用程序代码放置在与数据库不同的服务器上是一项政策。

我们是一个数据仓库,主要使用SSIS和T-SQL将数据转换和加载到SQL Server中。 我们想使用C#.NET应用程序执行一些步骤

例如,要遍历文件并调用Web服务。

鉴于SQL Server 2008现在可以自动安装.NET 3.5并支持.NET存储过程,是否有理由禁止以.NET编写的.ETL代码在数据库服务器上运行? 在同一个盒子上同时运行SSIS和.NET代码将有助于简化我们的工作流程,因此我们不必担心调度应用程序必须控制服务器之间的流。

我确实知道,例如在Web应用程序中,将业务逻辑层与数据库层分开是合适的。

一种可能的故障:在我的公司中,DBA不是App Server的管理员,并且无权将db Client工具安装到App Server,并且App Serve管理员可能与安装数据库客户端工具没有任何关系。 如果他们这样做,则必须在App服务器管理员与DB服务器管理员之间进行协调。 也许DBA可以共享App Server的所有权。 公司通常如何处理?

最佳做法是完全不使用SQL Server。 SQL Server使用用户模式的协作多任务和资源控制,该系统假定100%拥有系统所有权,并且如果其他进程正在窃取内存或CPU,则不能很好地发挥作用。 请参阅动态内存管理SQL Server批处理或任务计划

至于.NET从SQLCLR内部进行ETL Web调用:甚至不要考虑它。 除非从SQLCLR执行任何类型的阻止操作,否则您都会饿死SQL调度程序。

通常,您应该将SSIS服务器与SQL Server分开,因为SSIS是应用程序层。 接下来,您的应用程序代码应在单独的服务器上运行(可以与SSIS服务器相同)。

分开扩展您的关注点。

这取决于代码,数据库所需的可用性以及包装盒的大小。 如果您在SSIS管道或C#应用程序中占用大量内存,那么我建议将其放在单独的盒子中(所有ETL,而不仅仅是其中的一部分)。 如果您仅使用SSIS来调用数据库中存储的proc,最好将其保留在同一系统上。

话虽如此,除非有绝对的理由,否则我将避免将ETL分散在各个框内。 它增加了很多复杂性,却没有带来太多好处(通常)。

话虽如此,如果您需要C#东西来运行,则可以始终使用SSIS中的脚本任务来控制其执行。

我们通过将DTS程序包与SSIS服务器放置在同一服务器上来实现SSIS,并且有保留在另一台服务器上的winservice并远程执行DTS程序包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM