顺序或并行启动存储过程

2024-03-10

我们有一个每晚运行的存储过程,进而启动许多其他过程。其中一些程序在逻辑上可以与其他一些程序并行运行。

  • 我如何向 SQL Server 指示一个过程应该并行运行还是串行运行——即:异步启动还是阻塞运行?
  • 并行运行它们会产生什么影响,请记住,我已经确定这些进程不会竞争表访问或锁 - 只是总磁盘 io 和内存。在大多数情况下,他们甚至不使用相同的桌子。
  • 如果其中一些程序是same程序,只是参数不同?
  • 如果我异步启动一对或过程,SQL Server 中是否有一个好的系统来等待它们两个完成,或者我是否需要让它们每个在某处设置一个标志,并使用定期检查和轮询标志WAITFOR DELAY?

目前我们仍然使用 SQL Server 2000。

附带说明一下,这很重要,因为主程序是响应从大型机系统将数据转储到服务器的完成而启动的。主机转储每晚大约需要 2 个小时,而且我们无法控制它。因此,我们不断尝试寻找减少处理时间的方法。


我最近不得不研究这个问题,所以发现了这个老问题,需要一个更完整的答案。只是为了完全明确:TSQL 确实not(通过它自己)能够异步启动其他 TSQL 操作.

这并不意味着您仍然没有很多选择(其中一些在其他答案中提到):

  • 定制应用程序:使用异步方法以您选择的语言编写一个简单的自定义应用程序。在每个应用程序线程上调用 SQL 存储过程。
  • SQL 代理职位:创建多个 SQL 作业,并使用以下命令从您的进程异步启动它们sp_start_job。您可以使用未记录的功能检查它们是否已完成xp_sqlagent_enum_jobs如中所述这篇优秀的文章 http://www.databasejournal.com/features/mssql/article.php/10894_3491201_2/Detecting-The-State-of-a-SQL-Server-Agent-Job.htm作者:格雷戈里·A·拉森。 (或者按照 Chris 的建议,让作业本身更新您自己的 JOB_PROGRESS 表。)实际上,您必须为预期运行的每个并行进程创建单独的作业,即使它们正在运行具有不同参数的相同存储过程。
  • 奥莱自动化: Use sp_oacreate and sp_oamethod启动一个调用另一个存储过程的新进程,如中所述本文 http://www.databasejournal.com/features/mssql/article.php/3427581/Submitting-A-Stored-Procedure-Asynchronously.htm,同样由格雷戈里·A·拉森(Gregory A. Larsen)撰写。
  • DTS包:使用简单的分支任务流创建 DTS 或 SSIS 包。 DTS 将在各个 spid 中启动任务。
  • 服务经纪人:如果您使用的是 SQL2005+,请考虑使用服务经纪人 http://technet.microsoft.com/en-us/library/ms166104.aspx
  • CLR 并行执行:使用CLR命令Parallel_AddSql and Parallel_Execute如中所述本文 http://www.codeproject.com/KB/database/asynchronousTSQL.aspx作者:Alan Kaplan(仅限 SQL2005+)。
  • 计划的 Windows 任务:列出是为了完整性,但我不喜欢这个选项。

我对 Service Broker 或 CLR 没有太多经验,因此无法对这些选项发表评论。如果是我,我可能会在更简单的场景中使用多个 Job,在更复杂的场景中使用 DTS/SSIS 包。

最后一条评论:SQL 已经尝试尽可能并行化各个操作*。这意味着同时运行 2 个任务而不是依次运行并不能保证它会更快完成。仔细测试看看它是否真的有所改善。

我们有一位开发人员创建了一个 DTS 包来同时运行 8 个任务。不幸的是,它只是一个 4-CPU 服务器:)

*假设默认设置。可以通过更改服务器的最大并行度或亲和性掩码或使用 MAXDOP 查询提示来修改此值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺序或并行启动存储过程 的相关文章

随机推荐

  • 获得苹果批准后我们可以拒绝应用程序吗?

    我已经上传了新的二进制文件作为我的应用程序的新版本 在上传二进制文件时 我选择 我将发布此版本 选项 意味着我只是将其放入 保留以供开发人员发布 假设我的应用程序获得了 Apple 的批准 并且我不想发布该版本 那么我必须做什么 是否可以拒
  • Yii:将 JavaScript 添加到标头

    I need
  • 在Prolog中,可以按随机顺序选择解决方案吗?

    如果我有以下情况 a X X 1 X 2 X 3 X 4 我可以按确定性顺序生成解决方案 a X X 1 X 2 X 3 X 4 是否有任何方法可以要求系统以非确定性 随机顺序产生解决方案 例如 a X X 4 X 1 X 3 X 2 我知
  • 如何从控制台应用程序打开WPF窗口[重复]

    这个问题在这里已经有答案了 我刚刚制作了一个简单的控制台应用程序 现在我想打开 WPF 窗口 我将 WPF 项目添加到我的应用程序中 P 但我不知道如何从我的 Main 打开这个窗口 我希望 some1 可以帮助我 Application
  • 如何从 Perl 中的外部命令中丢弃 STDERR?

    我想捕获外部命令的退出代码 同时用自定义错误消息替换其标准错误输出 my ret system which mysql if ret 0 say Error If mysql可执行文件不存在 它显示which命令错误消息 这是我不想要的 如
  • 值对象应该保存对实体的引用吗?

    值对象是否应该引用 DDD 方法中的实体 EDIT Dmitry 这大概就是我的情况 这里我附上类图 其中Account保留对集合的引用IInvoiceable项目 我治疗与Tenant作为实体 但它只拥有 1 个帐户 我不认为Accoun
  • 如何在不手动运行 dbt deps 的情况下配置 DBT 依赖项?

    我是 DBT 新手 目前正在尝试构建一个 Docker 容器 我可以在其中直接运行 DBT 命令 我有一个导出环境变量的文件 envs sh 看起来像 export DB HOST secret export DB PWD evenabig
  • 黄瓜、水豚和硒 - 提交不带按钮的表单

    我使用 Cucumber capybara 和 selenium 驱动程序进行了测试 该测试应填写表格并提交 正常的文本是 Scenario Fill form Given I am on the Form page When I fill
  • 为什么 ASP.NET MVC 控制器类需要公开?

    当我更改控制器类的访问修饰符时 会导致错误 如果我将操作方法 的可访问性设置为非公开 那么它也会导致错误 特别是找不到网页错误 为什么会这样呢 默认情况下 如果您没有为类指定任何访问修饰符 那么它将默认为internal在 C 中 只有同一
  • ( ... ) 和 { ... } 如何与 bash 中的管道创建子 shell 交互?

    我试图了解使用圆括号和大括号的 shell 子进程调用之间的区别 我认为大括号不会启动子进程 但它们似乎确实启动了子进程 bin sh a 1 b 1 a 2 a 3 b 2 b 3 echo a a echo b b 该脚本打印 a 1
  • 在任意时区之间转换

    我正在尝试找到一种简单而强大的方法来在任意时区之间转换时间 This http www cpearson com excel TimeZoneAndDaylightTime aspx http www cpearson com excel
  • 有没有一种方法可以在没有用户的情况下访问 LinkedIn API

    我正在构建一个使用 REST API 从 LinkedIn 获取数据的应用程序 当我的用户拥有 LinkedIn 帐户时 我使用 OAuth 代表用户进行身份验证和访问数据 我的问题是当用户没有 LinkedIn 帐户时 在这种情况下 我想
  • C# 和 Word - 用格式替换

    我试图做的最简单的形式是在预先存在的 Word 文档上填写一些信息 我的代码做得很好 它没有做的是按照需要修复格式 替换的文本需要设为黑色并加粗 表格上的总计字段需要右对齐 如果有人能指出我如何在我的代码中做到这一点 我将不胜感激 这是我当
  • UIScrollView 可滚动内容大小不明确

    各位开发者 我在 Interface Builder Xcode 5 iOS 7 中使用 AutoLayout 时遇到问题 这是非常基本和重要的 所以我认为每个人都应该知道它是如何正常工作的 如果这是 Xcode 中的一个错误 那么它是一个
  • TitleView 未覆盖整个工具栏

    我正在开发通知计数Toolbar using TitleView 里面TitleView我用过RelativeLayout这是从顶部裁剪未显示完整计数圆Label 这是我的代码
  • Playstore 展示 Beta 标签床边制作应用

    前几天 我推广了我的测试版 open beta test 应用于生产 一切顺利 我可以在 Playstore 中搜索我的应用程序 但有一个问题 playstore没有删除 beta 我的应用程序名称旁边的标签 我想删除那个标签 我该怎么做或
  • ASP.NET MVC 单点登录和角色

    我使用类似于以下方法的内容跨 2 个 MVC 站点 称为 SiteA 和 SiteB 进行基本的单点登录 http forums asp net p 1023838 2614630 aspx http forums asp net p 10
  • Firefox 单选按钮怪异

    我有一个包含很多无线电组的表格 每个无线电都有一个唯一的 ID 并且与其组中的其他无线电具有相同的名称 该页面验证为 XHTML 过渡页面 在 IE6 和 7 Opera Safari 和 Chrome 中进行了测试 它的工作方式与您想象的
  • 领域驱动设计模式 - 从领域访问存储库

    我一直致力于将领域驱动设计模式应用到我们的 Web 应用程序中 我们遇到的问题之一是避免使用实体内的存储库 例如 我们有一些实体 其方法将触发电子邮件 因此 我们必须有权访问电子邮件模板 存储在数据库中 并在数据库队列表中创建新的电子邮件记
  • 顺序或并行启动存储过程

    我们有一个每晚运行的存储过程 进而启动许多其他过程 其中一些程序在逻辑上可以与其他一些程序并行运行 我如何向 SQL Server 指示一个过程应该并行运行还是串行运行 即 异步启动还是阻塞运行 并行运行它们会产生什么影响 请记住 我已经确