什么可能导致“BEGIN”语句“事务空闲”

2023-12-20

我们有一个 Node.js 应用程序,它通过 pg-promise 连接到 Postgres 11 服务器 - 所有进程都在 Docker 容器中的单个云服务器上运行。
有时我们会遇到应用程序不再做出反应的情况。

The last time this happened, I had a little time to check the db via pgadmin and it showed that the connections were idle in transaction with statement BEGIN and an exclusive lock of virtualxid
enter image description here enter image description here

我认为情况是这样的:

  1. 应用程序已通过发送BEGINsql命令到数据库
  2. 数据库收到此命令并启动一个新事务,从而获得模式的排他锁virtualxid
  3. 现在数据库等待应用程序发送下一条语句(直到它收到COMMIT or ROLLBACK) - 然后它会释放模式的独占锁virtualxid
  4. 但由于某种原因,它没有得到更多的陈述:
    我认为 node.js 事件循环被阻止 - 因为当时,当我们看到这些锁时,node.js 应用程序不再记录语句。但网络服务器仍然收到请求并报告一些upstream timed out要求。

这有意义吗(我真的不确定2.和3.)?
为什么所有交易一开始都会被阻塞?这只是巧合还是显示的 SQL 可能是错误的?

顺便说一句:在这个answer https://stackoverflow.com/a/44908655/1041641我发现,我们可以设置事务中空闲会话超时 https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT这样这些事务将在超时后被释放 - 这很好,但我尝试了解导致此问题的原因。


交易根本不阻塞。数据库正在等待应用程序发送下一条语句。

事务 ID 上的锁只是事务相互阻塞的一种技术,即使它们没有争用表锁(例如,如果它们正在等待行锁):每个事务都拥有自己的排他锁事务 ID,如果它必须等待并发事务完成,它可以只请求对该事务 ID 的锁定(并被阻止)。

如果所有事务都像这样,那么锁一定位于应用程序中的某个位置;不涉及数据库。

当查找数据库中阻塞的进程时,请查找以下行:pg_locks where granted是假的。

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

什么可能导致“BEGIN”语句“事务空闲” 的相关文章

随机推荐

  • 在构造函数中访问容器子部件尺寸

    假设我的班级有两个人Gtk Containers像这样 class Example public Gtk VBox public Example virtual Example private Gtk HBox m c1 First con
  • Node/Express:会话过期事件?

    在 ASP NET 上 我们有一个会话过期事件 我将 node js 与express js 以及会话的默认内存存储一起使用 每次我重新启动节点时 会话都会丢失 理想情况下 我想将会话保存到数据库 不能使用 redis 是否有会话过期事件
  • ASP.NET:隐藏gridview中的列

    有没有办法可以通过代码控制列 我有一个下拉框 其中选择 每日和周末 网格视图列包含星期一 星期二 星期三 星期四 星期五 星期六 星期日 如果用户选择 每日 我只想显示周一到周五的列 可以通过代码进行控制 哦 我在我的网页中使用这个 gri
  • 如何获取缓存图像 SDWebImage 的数据

    我正在使用 SDWebImage 库在 UICollectionView 中缓存 Web 图像 cell packItemImage sd setImage with URL string smileImageUrl indexPath r
  • Meteor JS:如何为多个选择器创建事件处理程序?

    我试图为多个元素创建相同的事件处理程序 但在文档中找不到执行此操作的任何位置 在下面的示例中 我尝试为所有文本处理创建一个单击处理程序 这适用于h1 但不适用于其余的 Template page events click h1 h2 h3
  • 从正在运行的进程中分离

    我面临着一个有趣的情况 我正在开发一个手电筒 https github com w0lfschild Flashlight插件在将来的某个时刻触发警报 问题是 手电筒会在 30 秒后杀死脚本 因此 我既不能等待足够长的时间来激活闹钟 也不能
  • 休眠 ID 生成器

    有人知道一些关于如何为 hibernate 创建自定义 ID 生成器的好教程吗 在 Google 上粗略搜索 hibernate 自定义 id 生成器教程 发现了以下可能性 我排除了那些看起来没有用的内容 并总结了每个内容的内容 http
  • 将标签添加到反应选择

    I am new to the react js here what I am trying to do is that 现在我尝试过的是 const options value chocolate label Chocolate valu
  • 我正在尝试使用 Stripe 和 NextJS 13.2.3 设置 webhook

    我能够通过内置 Stripe 页面成功结帐我的购物车 并且我会被重定向到我的 successUrl 路线 我的本地测试 webhook 正在按预期被调用 但是 当我包含代码来验证请求是否来自 Stripe 时 我收到一些错误 这是我在 Ne
  • COLLADA:反向绑定姿势在错误的空间?

    我正在编写自己的 COLLADA 导入器 我已经走了很远 加载了网格和材料等 但我在动画方面遇到了障碍 特别是 关节旋转 我用于对网格体进行蒙皮的公式很简单 weighted for i 0 i lt joint influences i
  • iPhone 的 /Documents 目录更改的通知

    我们有一个使用文件共享的应用程序 UIFileSharingEnable 已设置等 一切似乎都工作正常 但我正在寻找某种通知 说明何时在 iPhone 端添加 删除文件 有人可以建议吗 提前干杯 这个线程 https devforums a
  • len() 函数的成本

    费用是多少len https docs python org 2 library functions html lenPython 内置函数 列表 元组 字符串 字典 It s O 1 恒定时间 不取决于元素的实际长度 非常快 您提到的每种
  • 如何在 Firebase 托管上设置私有环境变量?

    由于 Divshot 最近关闭 我已将许多应用程序切换到 Firebase 托管 其中一些应用程序连接到外部 API 因此我需要一种在 Firebase 托管上存储私有环境变量 例如 用于 S3 访问的密钥 的方法 有人有什么想法吗 有这样
  • 如何从命令行调用多个文件到您的应用程序中?

    我正在向 Windows 注册表添加一个上下文菜单项 这样当我单击一个文件时 我可以调用我的应用程序 并将该文件作为参数设置到我的应用程序中 但是我如何才能将多个文件发送到我的应用程序 我选择的所有文件 现在我的命令是 C test dll
  • 解决方案无法在 Visual Studio 中运行/构建/重建

    当尝试在 Visual Studio 中对解决方案运行 生成 重建 时 没有任何反应 我可以使用 MSbuild exe 从命令提示符运行构建 这给了我期望的输出 构建成功 但是当尝试从 Visual Studio 运行它时 没有任何反应
  • geom_boxplot:将 alpha 水平映射到晶须和异常值

    有没有办法制作geom boxplot线条 胡须和离群点继承相同的alpha分配给箱线图fill在下面的情节中 library ggplot2 ggplot iris aes x Species y Sepal Length alpha S
  • C++ 结构模板特化

    我正在尝试开发自己的 3D 渲染器 为此我需要一个 3D 矢量结构 我试图使其尽可能通用 因此我使用模板化结构 我创建了一个Vec
  • 是否可以设置一个 IntelliJ Android 项目来与 Maven 一起使用?

    我想在 IntelliJ Android 项目中使用 Maven 依赖项 有人成功做到这一点吗 我在 Ubuntu 11 10 和 Mac OS X 10 7 3 上使用 IntelliJ IDEA 当前 v11 0 2 内部版本 111
  • 帕塞瓦尔定理对于正弦曲线 + 噪声的 FFT 不成立?

    预先感谢您对此主题的任何帮助 我最近一直在尝试计算包含噪声时离散傅立叶变换的帕塞瓦尔定理 我的代码来自这段代码 https stackoverflow com questions 30073508 parsevals theorem doe
  • 什么可能导致“BEGIN”语句“事务空闲”

    我们有一个 Node js 应用程序 它通过 pg promise 连接到 Postgres 11 服务器 所有进程都在 Docker 容器中的单个云服务器上运行 有时我们会遇到应用程序不再做出反应的情况 The last time thi