为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle 数据库连接总是错过 DRCP 缓存

Oracle 数据库连接总是错过 DRCP 缓存

PHP
慕田峪7331174 2022-07-29 10:20:24
我已将 Oracle 配置为使用 DRCP 并设置 PHP 以连接到池连接,但是当我拉取连接统计信息时,命中率始终为零,而请求数和未命中数继续攀升。CCLASS_NAME             NUM_REQUESTS NUM_HITS NUM_MISSES NUM_WAITS  WAIT_TIME CLIENT_REQ_TIMEOUTS   BIGTUNACAN.drcp_pooling_test    9828        0       9828         6     0     0我在 tnsnames.ora 中的连接使用 SERVER = POOLED 并且我的 php.ini 设置了 drcp_pooling_test。我现在不知道为什么永远不会使用缓存的连接。下面的 TNS 条目TESTPOOL.WORLD =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = test-db.bigtunacan.com)(PORT = 1521))     )     (CONNECT_DATA =       (SID = TEST)       (SERVER = POOLED)     ))
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

问题不在于 SID 的使用(尽管您仍然应该更改它,因为您可能会丢失一堆固有功能),而是您使用的是oci_connect(). 改为使用oci_pconnect()。这是一个猜测,因为您错过了提供测试用例。

NUM_HITS是“客户端请求在池中找到匹配的池服务器和会话的总次数。”,但oci_connect()必须重新创建会话,因此它不会给出“命中”。请参阅The Underground PHP and Oracle Manual第 261 页的表 11,其中说oci_connect()“从 DRCP 池获取一个池化服务器并创建一个全新的会话。”。您将从重用池化服务器中获得一些好处,但不会oci_pconnect()为您带来全部好处。

但是,您应该退后一步,真正回顾一下您为什么需要 DRCP。如果您还没有使用,oci_pconnect()那么您的 PHP 连接调用会很慢。改用oci_pconnect()。然后,您可能能够减少所需的 Apache 进程数,这将减少所需的并发连接数。实施其他最佳实践,例如使用绑定变量。只有当您的数据库主机没有足够的内存来同时处理所有打开的连接时,您才会转而使用共享服务器或 DRCP。DRCP 是一种池解决方案,因此存在一些开销(以及少量的额外管理)。


查看完整回答
反对 回复 2022-07-29
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号