如果我使用 Apache::DBI 的 connect_cached(),我应该断开连接吗?

2024-04-28

我的基于 mod_perl2 的 Intranet 应用程序使用DBI->connect_cached()据推测被覆盖Apache::DBI的版本相同。它通常工作得很好,但就在最近,我们的测试服务器开始出现问题——只有两个用户连接——我们的应用程序有时会(但并非总是)在尝试使用“致命:”重新加载页面时死掉。抱歉,太多客户端已经连接到我们的 postgres 9.0 后端,尽管它们都已连接<IDLE>如果我查看 pgadmin3 中的统计数据。

后端与我们的开发和生产后端是分开的,但它们都配置有max_connections = 100。同样,httpd 服务都是独立的,但配置为

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      99
MaxClients       99
MaxRequestsPerChild  4000
....
PerlModule Apache::DBI

我一直觉得我不应该打电话disconnect()如果我希望它们真正从缓存中受益,则在我的数据库句柄上。难道我错了吗?如果没有,我想我会单独询问上述错误。只是想确定不是这个设置...

Apache::DBI 的文档 http://search.cpan.org/~phred/Apache-DBI/lib/Apache/DBI.pm say:

加载 DBI 模块时(不要将其与 Apache::DBI 混淆) 模块)它检查是否已设置环境变量“MOD_PERL” 如果模块 Apache::DBI 已加载。在这种情况下,每个 连接请求将被转发到 Apache::DBI 模块。 .... 无需从代码中删除断开连接语句。 他们不会做任何事情,因为 Apache::DBI 模块超载了 断开方法。

如果您正在开发严格用于 mod_perl 的新代码, 您可以选择使用 DBI->connect_cached() 代替,但请考虑 在每个请求之后添加自动回滚,如上所述。

所以我想对于我的 mod_perl2-only 应用程序,我不需要 Apache::DBI 因为 Apache::DBI 的开发人员建议使用 DBI->connect_cached。而且我不需要断开连接语句。

但是之后DBI 的文档 http://search.cpan.org/~timb/DBI-1.630/DBI.pm say:

请注意,[ connect_cached ] 的行为在几个方面有所不同 尊重由实现的持久连接的行为 阿帕奇::DBI。但是,如果加载了 Apache::DBI,则 connect_cached 会使用它。

这听起来好像 Apache::DBI 实际上会影响 connect_cached,因为当我调用它时,我不会得到 DBI->connect_cached 行为,而是得到 Apache::DBI->connect 行为。 Apache::DBI 的文档建议不要这样做。

更新:我已将上述配置中的前 5 个参数全部设置为 1,并且当我点击其页面时,我的应用程序仍在使用越来越多的连接。我完全不明白这一点——它应该只有一个进程,并且一个进程应该重用它的连接。


除非您打算放弃 Apache::DBI,否则答案是否定的,因为Apache::DBI 的覆盖 http://cpansearch.perl.org/src/PHRED/Apache-DBI-1.12/lib/Apache/DBI.pm确实什么也没做:

# overload disconnect
{
  package Apache::DBI::db;
  no strict;
  @ISA=qw(DBI::db);
  use strict;
  sub disconnect {
      my $prefix = "$$ Apache::DBI            ";
      Apache::DBI::debug(2, "$prefix disconnect (overloaded)");
      1;
  }
  ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我使用 Apache::DBI 的 connect_cached(),我应该断开连接吗? 的相关文章

随机推荐

  • 如何在 Mongoose 中设置文档创建的 TTL 日期?

    我正在尝试做一个promoCodeMongoose 中的架构 创建时 我需要能够设置促销代码的到期日期 促销代码不一定相同TTL 我在看这个问题 https stackoverflow com questions 14597241 sett
  • 如何将自定义http标头添加到角度模块联合remoteEntry.js加载调用?

    我有一个主机应用程序和一些微前端应用程序都是 Angular 15 我用过 angular architects module federation 15 0 3 一切工作正常 除了我无法拦截加载 mfe 应用程序的 remoteEntry
  • 如何用opengl制作2D地形?

    我想制作一个简单的二维地形 只有一些颠簸和高度变化 我想过只使用随机数来描述某个顶点的高度 但我不知道如何从中制作一个网格 我正在寻找一种方法来查找地形的顶点和索引缓冲区 我该怎么做呢 您可以仅将 GL POLYGON 与所有顶点的列表一起
  • Delphi是否存在无锁队列“多个生产者-单个消费者”?

    我发现了几个针对单个生产者 单个消费者的实现 但没有找到多个生产者 单个消费者的实现 Delphi是否存在 多个生产者 单个消费者 的无锁队列 无锁队列全线程库 http otl 17slon com支持多个生产者 您可以将它与线程库分开使
  • #region 描述编译到.net 中的.exe 中?

    region endregion 指令 描述 是否编译到 NET 中的 EXE 中 我知道注释不是 但我经常在一个区域内对代码组进行分块并给出有用的描述 我想确保这些描述在我编译的代码中不可见 我不是在寻找混淆信息 不过 谢谢 不 他们不是
  • 包括 pandas groupby 聚合中缺失的值组合

    Problem 在 pandas groupby 聚合的输出中包括所有可能的值或值的组合 Example 示例 pandas DataFrame 有三列 User Code and Subtotal import pandas as pd
  • 链接的 ostream 内部行为及其在 MSVC 上的结果(与 Clang 相比)

    MSVC 与 GCC Clang 的流 内部字符串和操作排序问题 大家好 我最近刚刚开始更认真地使用 MSVC 来完成我的一个跨平台项目 同时通过以下方式测试输出chainedSTD 流 IE 一系列的obj foo lt lt endl
  • 让 clang-tidy 修复头文件

    我正在将当前使用 gcc 编译的项目移至 clang 并有一堆 gcc 没有生成的警告 Winconsistent missing override clang tidy致力于修复这些错误 cpp文件 但是它不触及hpp文件 因为在数据库中
  • 本地门控签入失败,并显示“无法找到搁置集...无法签入”

    我在使用新的 TFS 2015 Update 2 门控版本时遇到问题 在尝试签入门控构建队列后 构建的每个部分都会成功 直到到达 签入门控更改 的最后一步 当我查看该步骤的日志时 我得到 Error The shelveset Build
  • 如何在 C++ 中检查文件是否已被另一个应用程序打开?

    我知道 有is open C 中的函数 但我希望一个程序检查文件是否尚未被另一个应用程序打开 有没有办法使用标准库来做到这一点 编辑 在答案中澄清这是针对 Linux 应用程序的 不仅标准库没有这个功能 一般来说也是不可能的 你可以 在li
  • 如何在 CFscript 中指定参数属性? (CF9)

    在 CF9 文档中 在 CFScript 中定义组件和函数 http help adobe com en US ColdFusion 9 0 Developing WSE99A664D 44E3 44d1 92A0 5FDF8D82B55C
  • 如何复制添加到 StoryBoard 中 ViewController 的 UIView 并保持约束?

    我创建了一个视图 CustomView xib 和一个专用类 CustomView swift 我已通过添加视图并将自定义类设置为 CustomView swift 将其添加到 Storyboard 中的 ViewController 中
  • Android 中的 RoboSpice 库是什么

    我正在尝试了解 android 中的 RoboSpice 库 我在这里看到了在线文档 https github com stephanenicolas robospice wiki Starter Guide 我尝试过什么 我之前研究过使用
  • 使用StreamBuilder时,如何在用户离线时显示不同的Widget?

    我正在尝试从互联网上获取一些数据 随着使用FutureBuilder 处理各种情况 如离线 在线 错误很容易 但我正在使用StreamBuilder我无法理解如何处理离线案例 以下是我使用 StreamBuilder 的代码 它可以工作 但
  • mysql连接3个表

    如何连接三个具有一个公共列 id 的mysql表 例如 从表1中选择a b 从表2中选择c d 从表3中选择e f 其中id x 谢谢 SELECT t1 a t1 b t2 c t2 d t3 e t3 f FROM table1 t1
  • 访问 Bookshelf.js 中的嵌套关​​系

    我想你可能会说我正在构建一个 reddit 风格的应用程序 所以我有一个主题 该主题有评论 这些评论有父评论等 这是我的评论模型 var Comment bookshelf Model extend tableName comments t
  • 在 Alpine Docker 容器上安装 OpenSSH

    第一次运行 alpine docker 容器并尝试 openssh 安装时 会发生以下情况 ole T docker run it rm alpine bin ash apk add openssh WARNING Ignoring APK
  • 递归 CTE 中的 TSQL GROUP BY

    是否有解决方法可以在循环 CTE 内使用 GROUP BY 或者有解决方法 我需要对 CTE 表的结果集进行分组 并在具有相同 CTE 的另一个循环中使用它 但出现以下错误 不允许使用 GROUP BY HAVING 或聚合函数 递归公用表
  • Angularjs 和 api 之间的内部服务器错误 500

    我正在尝试从 angularjs 保存数据并将其发送到 api 但出现错误 500 内部服务器错误 控制器是一个数组 包含来自 html 页面的范围 任何帮助 控制器 scope save function scope setup push
  • 如果我使用 Apache::DBI 的 connect_cached(),我应该断开连接吗?

    我的基于 mod perl2 的 Intranet 应用程序使用DBI gt connect cached 据推测被覆盖Apache DBI的版本相同 它通常工作得很好 但就在最近 我们的测试服务器开始出现问题 只有两个用户连接 我们的应用