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

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

我想过:

  • 从 启动多个连接 一个客户端,让每个客户端启动 适当的 SP。
  • 设置作业 每个 SP 并从 SQL Server 连接或 SP。
  • 用 xp_cmdshell开始其他运行 等效于 OSQL 或 WHETEVER
  • SSIS - 我需要查看是否可以动态编写包来处理更多 SP,因为我不确定我的客户将获得多少生产访问权限

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

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

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

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

有帮助吗?

解决方案 4

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

其他提示

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

有一次,我对一种称为“产品”的产品进行了一些架构工作 敏锐的优势 有一位仓库经理负责这项工作。

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

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

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

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

  • 加载过程可能有许多其他任务可以同时执行
  • 最耗资源的任务几乎肯定是事实表加载,它们大多不依赖于彼此。存在依赖性的地方(例如基于另一个表的内容的汇总表)无论如何这是无法避免的。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top