从存储过程 catch 块处理死锁重试是个好主意吗

2024-01-05

据我了解,不可能完全防止事务死锁。

从应用程序代码的角度来看,我希望事务永远不会失败。 我已经看到这种模式用于 Microsoft SQL,我想知道这是否是一个好主意?




    DECLARE @retry  tinyint
    SET @retry  = 5
    WHILE @retry >0
    BEGIN
      BEGIN TRANSACTION
      BEGIN TRY
        // do transaction her
        COMMIT
        BREAK
      END TRY
      BEGIN CATCH
        ROLLBACK

        if (ERROR_NUMBER() = 1205 OR ERROR_NUMBER() = 1222)
        BEGIN
          SET @retry = @retry - 1
          IF @retry = 0
             RAISEERROR('Could not complete transaction',16,1);
          WAITFOR DELAY '00:00:00.05' -- Wait for 50 ms
          CONTINUE
        END
        ELSE
        BEGIN
          RAISEERROR('Non-deadlock condition encountered',16,1);
          BREAK;
        END
      END CATCH;
    END
  

可恢复错误的重试逻辑应位于客户端代码中。

对于死锁,MSDN 规定在那里做 http://msdn.microsoft.com/en-us/library/ms177453%28SQL.90%29.aspx

如果您在 SQL 中重试,那么最终可能会遇到 CommandTimeout。

还有其他错误,所以你可以编写一个通用处理程序 https://stackoverflow.com/questions/4821668/what-is-good-c-coding-style-for-catching-sqlexception-and-retrying/4821684#4821684

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

从存储过程 catch 块处理死锁重试是个好主意吗 的相关文章

  • 什么是时序数据库?

    What is 时间序列数据库例如InfluxDB 我应该何时 何地使用它 请给我它的业务场景示例 检查wiki https en wikipedia org wiki Time series database 时间序列数据库 TSDB 是
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 在 C# 中读取/写入大型 XML 文件

    我正在开发一个带有 XML 数据库的应用程序 我有很大的 XML 文件 我必须在其中读取和写入数据 问题是我不想将整个 XML 文件加载到内存中 也不想因为性能问题而循环遍历整个文件 因为如果我将整个文件加载到内存中 这将影响应用程序性能
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • 尝试从 Linux 通过 ODBC 连接到 SQL Server 2014 时出现错误代码 0x2746 (10054)

    Ubuntu 22 04 1 LTS pyodbc 4 0 35 OpenSSL 3 0 2 15 Mar 2022 Library OpenSSL 3 0 2 15 Mar 2022 遵循的步骤安装适用于 SQL Server Linux
  • SQL Server:应用正则表达式替换

    这是我的 SQL 查询 select codi nivell from anc documents 示例数据是 06080100000000 06080100000000 06080100000000 06080100000000 0608
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • Big Query - 将数组/json 对象转置为列

    这个问题是这两个问题的延续 Bigquery 将数组转置为列 https stackoverflow com q 64346504 7463780 大查询 将特定字段转置为列 https stackoverflow com q 643983
  • 查询和扫描多行性能缓慢

    下面的查询一行的执行时间为 6 18 分钟 Exception type 1 的基数值为 3 我不知道如何提高性能 Query select count 1 as rage tap from summary funnel 1066 s jo
  • 如何将逗号分隔的列值与另一个表作为行连接

    我试图通过首先转换我正在成功执行的 SupplierId 列中的逗号分隔值来连接两个表 然而 当我尝试通过外键 DCLink 加入另一个带有供应商名称的表 Vendors 时 问题就出现了 这就是我的意思 原始表的 select 语句 SE
  • 可空数据类型与非空 varchar 数据类型 - 哪个查询速度更快?

    我们通常更愿意拥有我们所有的varchar nvarchar列不可为空使用空字符串 作为默认值 团队中有人建议nullable更好 因为 像这样的查询 Select From MyTable Where MyColumn IS NOT NU
  • 使用 order by 和 limit 从多个表中删除

    我试图从使用 ORDER BY DESC 和 LIMIT 有关系的两个表中删除 DELETE FROM my rel table AS t1 LEFT JOIN my photo table AS t2 ON t2 typeid t1 ty
  • 如何使用单个查询对从另一个表检索的表列表进行 UNION?

    我有一个表 其中包含 PostgreSQL 中的表列表 id table 1 table1 2 table2 3 table3 我想从所有这些表的联合中进行选择 例如 伪代码 select from union select table f
  • cmd 和 workbench mysql 查询性能差异

    我有两个问题 正如我的标题 哪一个对于对大量数据运行大型查询更有效 我查看了 MySQL 文档 其中解释了工作台的性能https www mysql com products workbench performance https www
  • 如果字符串包含数字,则仅返回字符串中的数字

    例如 字符串是abc123CD需要找到一种只读方法numbers在字符串中i e select a postgres function abc123CD Result 123 My try select substring abc123CD
  • SQL Server 选择所需存储过程的查询帮助

    我正在努力解决在存储过程中构造 sql select 查询所需的逻辑 我的数据库使用股票市场数据 我有一个 2012 年交易日期表 一个股票代码表以及一个通过网络服务列出这些代码和交易日期的每日定价数据表 我正在尝试从我正在处理的选择查询中
  • MySQL - 连接 a 或 b

    假设我有一个TABLE a其中一个COLUMN data是一个join其他 2 张桌子 TABLE b and TABLE c 因为我想得到一个COLUMN info in b or c 事情是a data将匹配only with b da
  • SQL Server 列的默认随机 10 个字符串值

    我有一个专栏rndm在我的桌子上 客人 现在 对于领域Default value or Binding对于表 每当插入新行时 我想自动将 10 个字符的随机字符串插入到该列中作为默认值 该随机字符串不能包含特殊字符 只能包含以下字符a zA

随机推荐

  • 在 SQL SERVER 2008 中执行 SQL Server 代理作业的服务器角色

    其他部门的用户要求我授予他们在 SQL Server Agent 中执行 Schedule Jobs SSIS 的权限 目前 他们无法在 ManagmentStudio 中看到 SQL Server 代理树 我认为 这是因为他们没有权利执行
  • 有没有办法在 C++11 中取消/分离 future ?

    我有以下代码 include
  • SetWindowPos() 跨进程 DPI 感知

    我正在创建一个程序 可以从另一个进程移动 调整窗口大小SetWindowPos 我自己的程序是PROCESS PER MONITOR DPI AWARE 其他程序可以是以下任何内容PROCESS DPI UNAWARE PROCESS SY
  • 需要API进行货币转换[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请建议返回 JSON 或小尺寸 html 的货币转换 API 我用返回 11 kb 的 HTML 我在
  • Javascript快捷方式,将字符串附加到数组的所有值中?

    我有一个array a b c 我想要的是我有一个字符串让我们说 Hello 我想将其附加到该数组的每个值 我的预期输出是这样的 Hello a Hello b Hello c javascript中是否有任何快捷方式可以执行此操作 而不使
  • 递归数据类型(如 Avro 架构中的树)

    Reading https avro apache org docs current spec html https avro apache org docs current spec html它说模式必须是以下之一 一个 JSON 字符串
  • 由json私钥文件(ServiceAccount)创建的GoogleCredential - 如何设置用户来模拟?

    刚刚开始使用 Google API 在我的 Google Cloud Platform 帐户中 我创建了一个用于域范围委派的服务帐户 我为此服务帐户保存了 json 格式的私钥文件 在我的测试应用程序中 我正在创建一个 GoogleCred
  • 如何获取magento2中的当前类别?

    我怎样才能获得当前类别magento2 我想在自定义 phtml 文件中获取类别名称和类别 id 上面的内容似乎是正确的 但我认为直接跳到注册表并不是最好的方法 Magento 提供了一个已经封装了该功能的图层解析器 请参阅目录插件中的 T
  • @AspectJ。 scala(也可能是 java)lambda 的切入点

    是否可以为 scala lambda 提供 poitcut 如果我没有记错的话 scala lambdas 现在的编译方式与 java lambdas 相同 所以我认为我的问题也适用于 java lambdas 但我不确定 这是代码 基本上
  • 画笔范围未按预期工作

    由于某种原因 我的图表没有像我希望的那样被刷掉 Brush extent 的域似乎正常工作 但条形图都飞出了页面 有人可以告诉我这里出了什么问题吗 function doBrush x domain brush empty x2 domai
  • 如何改变UINavigationBar的颜色?

    我想改变颜色UINavigationBar 将从图像中获取颜色 尝试将对象设置为导航栏的子视图 设置色调颜色属性或使用图像 UINavigationController controller UINavigationController a
  • 从根部高效计算多项式系数

    我有一个单调多项式的根 即 p x x x 1 x x n 我需要系数 a n a 0 p x x n a n 1 x n 1 a 0 有谁知道一个计算效率高这样做的方法 如果有人知道 C C 实现 这实际上是最好的 我已经看过 GSL 但
  • 如何为html中的多个图像创建搜索功能

    我是构建 html 网站的新手 我的文件夹中有很多 gif 动画 我想在javascript中创建一个搜索功能 以便它可以搜索图像的关键字 如果图像存在 则可以显示图像 如果不存在 则显示请输入另一个关键字
  • 在 tsibble 中设置索引

    您是否曾经回顾过自己的旧问题并感到有点尴尬 我刚刚做到了 现在我也做到了 在某些时候我可能会对这个有同样的感觉 我正在尝试将我的预测工作转移到fable 在此过程中我尝试使用tsibble 以前与一个ts对象我只是设置了开始年份和频率 现在
  • 我可以使用自动布局为横向和纵向方向提供不同的约束吗?

    当设备旋转时是否可以改变约束 如何实现这一目标 一个简单的例子可能是两张图像 在纵向时 一张放在另一张上面 但在横向时 它们并排 如果这是不可能的 我还能如何完成这个布局 我正在代码中构建我的视图和约束 而不是使用界面生成器 Edit 运用
  • 您可以在 ASP.NET-MVC 中的每个操作上应用 ActionFilter

    我想申请一个动作过滤器 http weblogs asp net rashid archive 2008 03 28 asp net mvc action filter caching and compression aspx在 ASP N
  • Nodejs - .node_libraries/ 用于 www-data

    我想在我的 PHP 应用程序中使用 uglifyjs https github com mishoo UglifyJS UglifyJS 是使用 Nodejs 构建的 因此我的 homedir home peppe 中需要一个 node l
  • 成为一名合格的 Scala 程序员是否需要成为一名合格的 Java 程序员? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • URL 的 Path.Combine 吗?

    路径组合 https msdn microsoft com en us library system io path combine 28v vs 110 29 aspx很方便 但是 NET 框架中有类似的功能吗URLs http en w
  • 从存储过程 catch 块处理死锁重试是个好主意吗

    据我了解 不可能完全防止事务死锁 从应用程序代码的角度来看 我希望事务永远不会失败 我已经看到这种模式用于 Microsoft SQL 我想知道这是否是一个好主意 DECLARE retry tinyint SET retry 5 WHIL