gpt4 book ai didi

node.js - 我如何检测和记录我的 KnexJS 交易?

转载 作者:行者123 更新时间:2023-11-29 13:14:07 26 4
gpt4 key购买 nike

我在生产中遇到严重问题,导致应用程序无响应并输出以下错误:

Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?

一个正在运行的假设是一些操作正在持有长期运行的 Knex 交易。基本上,它们中的数量足以达到池大小。

  1. 有没有一种方法可以查询 KnexJS API 在任何时候有多少池连接在使用中?不幸的是,由于 KnexJS 占用了配置中的最大池设置,因此很难知道实际使用了多少。从 postgres 端看,KnexJS 似乎在所有连接未使用时都处于空闲状态。
  2. 是否有一种好的方法来使用某种中间件或 Hook 来检测 Knex transactiontransacting另一个有用的方法是记录任何事务的调用堆栈(或任何超过 7 秒的时间)。一个挑战是我在整个项目中调用了 Knex transactiontransacting。也许这是一个远景。

非常感谢任何建议。


系统信息

  • KnexJS 版本:0.12.6 (我们将在下个月更新)
  • 数据库+版本:Postgres 9.6
  • 操作系统:Heroku Linux(Ubuntu?)

最佳答案

最简单的方法是在连接池级别上运行 knex 并设置 DEBUG=knex:* 环境变量,这将打印出相当多的调试信息 knex 内部发生的情况。例如,这些日志显示了何时从池中获取连接并返回到那里以及每个运行的查询。

有几个全局事件可用于连接到每个查询,但没有任何事件可用于连接到事务。这是一个相关的问题,我在其中编写了一些示例代码如何使用查询 Hook 实际测量事务持续时间:Tracking DB querying time - Bookshelf/knex它可能会泄漏一些内存,因此它不是非常适合生产的解决方案,但对于您的调试目的它可能会有所帮助。

关于node.js - 我如何检测和记录我的 KnexJS 交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51307355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com