2

我有许多存储的过程,我希望它们都在服务器上同时运行。理想情况下,所有内容都在服务器上,而不依赖与外部客户端的连接。

有哪些选项可以启动所有这些并让它们同时运行(我什至不需要等到所有流程都完成后才能完成额外的工作)?

我曾想过:

  • 从客户端启动多个连接,每个连接都启动相应的 SP。
  • 为每个 SP 设置作业并从 SQL Server 连接或 SP 启动作业。
  • 使用 xp_cmdshell 启动与 osql 或 whetever 等效的附加运行
  • SSIS - 我需要查看是否可以动态编写包以处理更多 SP,因为我不确定我的客户将获得多少访问权限

在工作和 cmdshell 的情况下,我可能会遇到来自 DBA 的权限级别问题......

SSIS 可能是一个不错的选择 - 如果我可以驱动 SP 列表。

这是一个数据仓库的情况,工作很大程度上是独立的,NOLOCK在星星上普遍使用。该系统是一个 8 路 32GB 的机器,所以如果我发现问题,我将加载它并缩小它。

我基本上有三层,第 1 层有少量进程,并且基本上取决于已经加载的所有事实/维度(有效,星星是第 0 层 - 是的,不幸的是它们都需要加载),层2 有许多依赖于第 1 层的部分或全部的进程,第 3 层有许多依赖于第 2 层的部分或全部的进程。我已经在表中有依赖关系,并且只会在最初启动所有procs 同时在特定层中,因为它们在层内是正交的。

4

4 回答 4

2

SSIS 适合您吗?您可以创建一个包含并行执行 SQL 任务的简单包,以同时执行存储的过程。但是,取决于您的存储过程所做的事情,您可能会或可能不会从并行启动中受益(例如,如果它们都访问相同的表记录,则可能必须等待锁被释放等)

于 2008-10-02T15:21:19.280 回答
1

有一次,我在一个名为Acumen Advantage的产品上做了一些架构工作,它有一个仓库经理来做这件事。

基本策略是拥有一个包含存储过程及其依赖项列表的控制数据库。根据依赖关系,您可以进行拓扑排序以给它们一个运行顺序。如果这样做,您需要管理依赖关系 - 存储过程的所有前导都必须在它执行之前完成。仅在多个线程上按顺序启动存储过程本身不会完成此操作。

实现这一点意味着要打破大部分 SSIS 功能并实现另一个调度程序。这对于产品来说是可以的,但对于定制系统来说可能有点过分了。因此,一个更简单的解决方案是:

您可以通过按维度(有时称为面向主题的 ETL)垂直组织 ETL,在更粗粒度的级别上管理依赖关系,其中单个 SSIS 包和一组存储过程将数据从提取到生成维度或事实表。通常,维度大多是孤立的,因此它们的相互依赖性最小。在存在相互依赖关系的情况下,使一维(或事实表)加载过程依赖于上游所需的任何内容。

每个加载器都变得相对模块化,您仍然可以通过并行启动加载过程并让 SSIS 调度程序解决它来获得有用的并行度。依赖项将包含一些冗余。例如,ODS 表可能不依赖于正在完成的维度加载,但上游包本身在完成之前将组件直接带到维度模式。然而,这在实践中不太可能成为问题,原因如下:

  • 加载过程可能有很多其他任务可以同时执行
  • 最需要资源的任务几乎肯定是事实表加载,它们大多不会相互依赖。如果存在依赖关系(例如基于另一个表内容的汇总表),无论如何都无法避免。

您可以构建 SSIS 包,以便它们从 XML 文件中获取所有配置,并且可以在环境变量中外部提供位置。这种事情可以很容易地用像 Control-M 这样的调度系统来实现。这意味着可以部署修改后的 SSIS 包,而手动干预相对较少。生产人员可以将要部署的包与存储过程一起交给生产人员,并且可以在每个环境的基础上维护配置文件,而无需手动调整 SSIS 包中的配置。

于 2008-10-03T16:09:30.727 回答
1

您可能想查看服务代理及其激活存储过程...可能是一种选择...

于 2008-10-05T18:05:54.860 回答
1

最后,我创建了一个 C# 管理控制台程序,该程序启动异步进程,因为它们能够运行并跟踪连接。

于 2010-02-23T21:33:22.930 回答