Oracle:非池化连接和 DRCP 之间的区别

Oracle: Difference between non-pooled connections and DRCP

我实际上正在阅读 Oracle-cx_Oracle 教程。

在那里我遇到了非池化连接和 DRCP,基本上我不是 DBA,所以我用 google 搜索但找不到任何东西。

所以有人可以帮助我了解它们是什么以及它们之间有何不同。

谢谢。

DRCP 代表 Database Resident Connection Pooling 而不是 "non-pooled" 连接

简而言之,使用 DRCP,Oracle 将缓存所有打开的连接,从中创建一个池,并将池中的连接用于将来的请求。

这样做的目的是为了避免在某些现有连接 available/free 时打开新连接,从而保护数据库资源并赢得时间(打开新连接的时间)。

如果池中的所有连接都被使用,则将自动创建一个新连接(由 Oracle)并添加到池中。

在非池化连接中,连接由查询数据库的应用程序创建和(理论上)关闭。

例如,在查询数据库的静态 PHP 页面上,您总是使用相同的方案:

  1. 打开数据库连接
  2. 数据库查询
  3. 关闭数据库连接

你知道你的计划是什么。

现在假设您有一个动态 PHP 页面(带有 AJAX 或其他内容),只有当用户执行某些特定操作时才会查询数据库,该方案变得不可预测。 DRCP 可以使您的数据库变得健康,尤其是当您有很多用户和可能的请求时。

官方文档中的这句话相当概括了这个概念以及何时应该使用它:

Database Resident Connection Pool (DRCP) is a connection pool in the server that is shared across many clients. You should use DRCP in connection pools where the number of active connections is fairly less than the number of open connections. As the number of instances of connection pools that can share the connections from DRCP pool increases, the benefits derived from using DRCP increases. DRCP increases Database server scalability and resolves the resource wastage issue that is associated with middle-tier connection pooling.

Web 层和中间层应用程序通常有许多执行线程,它们轮流使用 RDBMS 资源。目前,多线程应用程序可以有效地共享与数据库的连接,从而实现出色的中间层可伸缩性。从 Oracle 11g 开始,应用程序开发人员和管理员以及 DBA 可以使用数据库驻留连接池通过在跨中间层系统的多进程和多线程应用程序之间共享连接来实现这种可扩展性。

DRCP在数据库服务器中提供了一个连接池,用于典型的Web应用程序使用场景,应用程序获取数据库连接,工作时间相对较短,然后释放它。 DRCP 池 "dedicated" 服务器。共用服务器相当于服务器前台进程和数据库会话的组合。

DRCP 补充了在中间层进程中的线程之间共享连接的中间层连接池。此外,DRCP 还支持在同一中间层主机上,甚至跨中间层主机的中间层进程之间共享数据库连接。这导致支持大量客户端连接所需的关键数据库资源显着减少,从而减少数据库层内存占用并提高中间层和数据库层的可扩展性。拥有一个随时可用的服务器池还有一个额外的好处,即降低创建和拆除客户端连接的成本。

DRCP 特别适用于具有无法执行中间层连接池的多进程单线程应用程序服务器架构(例如 PHP/Apache)。使用 DRCP,数据库仍然可以扩展到数万个同时连接。

DRCP 提高池的 "centralization" 级别:

  • 经典连接池在客户端中间件中进行管理。这意味着如果您有多个独立的 Web 服务器,很可能每个服务器都有自己的服务器管理的连接池。每个服务器有一个池,服务器负责管理它。例如,您可能有 3 个独立的池,每个池限制为 50 个连接。根据使用模式,这可能是一种浪费,因为您最终可能很少使用总共 150 个连接,而另一方面,您可能经常达到 50 个连接的单个限制。
  • DRCP 是由数据库服务器而非客户端服务器管理的单个池。这可以导致更有效的连接分布。在上面的示例中,3 个服务器可能共享同一个池,由数据库管理,少于 150 个连接,比如说 100 个连接。如果有两台服务器空闲,第三台服务器可以根据需要占用所有 100 个连接。

参见Oracle Database 11g: The Top New Features for DBAs and Developers for more details and About Database Resident Connection Pooling

This results in significant reduction in key database resources needed to support a large number of client connections, thereby reducing the database tier memory footprint and boosting the scalability of both middle-tier and database tiers

此外,DRCP 弥补了在某些技术中完全缺少中间件连接池(再次引用自About Database Resident Connection Pooling) :

DRCP is especially relevant for architectures with multi-process single threaded application servers (such as PHP/Apache) that cannot perform middle-tier connection pooling. The database can still scale to tens of thousands of simultaneous connections with DRCP.

作为进一步的参考,例如 Connection pooling in PHP - Stack Overflow