在 SQL Server 2005 中生成多个 SQL 任务
Posted
技术标签:
【中文标题】在 SQL Server 2005 中生成多个 SQL 任务【英文标题】:Spawning multiple SQL tasks in SQL Server 2005 【发布时间】:2008-10-02 15:15:59 【问题描述】:我有许多存储过程,我希望它们都在服务器上同时运行。理想情况下,所有内容都在服务器上,不依赖与外部客户端的连接。
有哪些选项可以启动所有这些并让它们同时运行(我什至不需要等到所有进程都完成后才能完成额外的工作)?
我想到了:
启动多个连接 一个客户,每个人都开始 合适的 SP。 为 每个 SP 并从 SQL Server 连接或 SP。 使用 xp_cmdshell 开始额外的运行 等同于 osql 或其他 SSIS - 我需要查看是否可以动态编写包以处理更多 SP,因为我不确定我的客户将获得多少访问权限在作业和 cmdshell 的情况下,我可能会遇到来自 DBA 的权限级别问题...
SSIS 可能是一个不错的选择 - 如果我可以驱动 SP 列表。
这是一个数据仓库的情况,工作很大程度上是独立的,NOLOCK在星星上普遍使用。该系统是一个 8 路 32GB 的机器,所以如果我发现问题,我将加载它并缩小它。
我基本上有三层,第 1 层有少量进程,并且基本上取决于已经加载的所有事实/维度(有效,星星是第 0 层 - 是的,不幸的是,它们都需要加载),第 2 层有许多依赖于第 1 层的部分或全部的进程,第 3 层有许多依赖于第 2 层的部分或全部的进程。我已经在表中有依赖关系,并且只会在最初同时启动特定层中的所有 proc,因为它们在层内是正交的。
【问题讨论】:
如果没有在 C# 中动态构建包,您可能必须执行某种表配置技巧,包括提前确定并行度并在您的 pckg 中强制某些 proc 在您的一个上运行SQL 执行任务“线程”...希望有意义..如果没有,请给我发电子邮件... 是的,很多架构将由银行的惯例决定,我可以动态构建包(有一些来之不易的经验),但我们只需要看看。我什至不确定他们是否会启用 CLR。 【参考方案1】:SSIS 适合您吗?您可以创建一个包含并行执行 SQL 任务的简单包,以同时执行存储的过程。但是,根据您的存储过程所做的事情,您可能会或可能不会从并行启动中受益(例如,如果它们都访问相同的表记录,则可能必须等待锁被释放等)
【讨论】:
SSIS 可能是一个不错的选择 - 如果我可以驱动 SP 列表,因为我不确定我的客户将获得多少访问权限。这是一个数据仓库的情况,工作很大程度上是独立的,NOLOCK在星星上普遍使用。系统为8路32GB机器【参考方案2】:有一次,我在一个名为 Acumen Advantage 的产品上做了一些架构工作,该产品有一名仓库经理负责。
对此的基本策略是拥有一个包含存储过程及其依赖项列表的控制数据库。根据依赖关系,您可以使用Topological Sort 给它们运行命令。如果这样做,您需要管理依赖关系——存储过程的所有前身都必须在执行之前完成。仅在多个线程上按顺序启动存储过程本身不会完成此操作。
实现这意味着要彻底解决 SSIS 的大部分功能并实现另一个调度程序。这对于产品来说是可以的,但对于定制系统来说可能有点过分了。因此,一个更简单的解决方案是:
您可以通过按维度垂直组织 ETL(有时称为面向主题的 ETL)在更粗粒度的级别管理依赖关系,其中单个 SSIS 包和一组存储过程从提取到生成维度或事实表。通常,维度大多是孤立的,因此它们的相互依赖性最小。在存在相互依赖关系的情况下,使一个维度(或事实表)加载过程依赖于上游所需的任何内容。
每个加载程序都变得相对模块化,您仍然可以通过并行启动加载过程并让 SSIS 调度程序解决它来获得有用的并行度。依赖项将包含一些冗余。例如,ODS 表可能不依赖于正在完成的维度加载,但上游包本身在完成之前将组件直接带到维度模式。然而,这在实践中不太可能成为问题,原因如下:
加载过程中可能还有很多其他任务可以同时执行 最需要资源的任务几乎肯定是事实表加载,它们大多不会相互依赖。如果存在依赖关系(例如基于另一个表内容的汇总表),无论如何都无法避免。您可以构建 SSIS 包,以便它们从 XML 文件中获取所有配置,并且可以在环境变量中外部提供位置。这种事情可以很容易地用像 Control-M 这样的调度系统来实现。 这意味着可以部署修改后的 SSIS 包,而手动干预相对较少。生产人员可以将要部署的包与存储过程一起交给生产人员,并且可以在每个环境的基础上维护配置文件,而无需手动修改 SSIS 包中的配置。
【讨论】:
如果您可能拥有多个开发人员和多个源系统,您也可能会从面向主题的 ETL 架构中获得维护胜利。【参考方案3】:您可能想查看服务代理及其激活存储过程...可能是一个选项...
【讨论】:
我肯定会添加它作为一个选项。【参考方案4】:最后,我创建了一个 C# 管理控制台程序,该程序启动异步进程,因为它们能够运行并跟踪连接。
【讨论】:
以上是关于在 SQL Server 2005 中生成多个 SQL 任务的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER 2008 R2 数据库附加到 SQL server 2005,怎么整