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

时间:2016-11-02 06:20:38

标签: oracle database-connection connection-pooling

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

在那里我遇到了非汇集的连接和DRCP,基本上我不是DBA所以我用谷歌搜索但是找不到任何东西。

有人可以帮助我理解他们是什么以及他们彼此之间的差异。

谢谢。

3 个答案:

答案 0 :(得分:1)

DRCP代表Database Resident Connection Pooling而非“非汇集”连接

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

这样做的目的是避免在某些现有连接可用/免费的情况下打开新连接,从而避免安全数据库资源和获取时间(打开新连接的时间)。

如果正在使用池中的所有连接,则会自动创建一个新连接(由Oracle提供)并添加到池中。

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

例如,在查询数据库的静态PHP页面上,您始终采用相同的方案:

  1. 打开数据库连接
  2. 对数据库的查询
  3. 关闭数据库连接
  4. 你知道你的计划是什么。

    现在假设您有一个动态PHP页面(使用AJAX或其他东西),只有当用户做出一些特定的操作时才会查询数据库,该方案变得不可预测。 DRCP可以使您的数据库变得健康,特别是如果您有大量用户和可能的请求。

    官方文件中的这句引用公平地总结了这个概念以及何时应该使用它:

      

    数据库驻留连接池(DRCP)是一个连接池   在许多客户端共享的服务器。您应该使用DRCP   连接池,其中活动连接的数量相当少   比打开连接的数量多。作为实例的数量   可以共享DRCP池连接的连接池   增加,使用DRCP带来的好处增加。 DRCP   增加数据库服务器的可伸缩性并解析资源   与中间层连接池相关的浪费问题。

答案 1 :(得分:1)

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

DRCP 在数据库服务器中为典型的Web应用程序使用方案提供了一个连接池,其中应用程序获取数据库连接,在相对较短的时间内处理它,然后释放它。 DRCP池“专用”服务器。池化服务器相当于服务器前台进程和数据库会话的组合。

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

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

答案 2 :(得分:1)

DRCP提高了游泳池的集中度 水平:

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

有关详细信息,请参阅Oracle Database 11g: The Top New Features for DBAs and DevelopersAbout Database Resident Connection Pooling

  

这样可以显着减少支持大量客户端连接所需的关键数据库资源,从而减少数据库层内存占用并提高中间层和数据库层的可伸缩性

此外, DRCP会补偿某些技术中完全缺乏中间件连接池 (再次引自About Database Resident Connection Pooling):

  

DRCP尤其适用于无法执行中间层连接池的多进程单线程应用程序服务器(如PHP / Apache)的体系结构。数据库仍然可以扩展到数万个与DRCP的同时连接。

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