PHP的大多数本机非PDO数据库驱动程序包括两个不同的连接函数。一个用于打开连接,另一个用于打开持久连接。例如,Oracle / OCI函数库具有oci_connect
和oci_pconnect
函数。
PHP手册有following warning about persistent connections。
但请注意,如果您使用的是持久子连接超出连接限制的数据库,则可能会有一些缺点。如果您的数据库有16个并发连接的限制,并且在繁忙的服务器会话过程中,有17个子线程尝试连接,一个将无法连接。
虽然这非常简单,但不太清楚的是当 PHP将打开一个新连接时。也就是说,持久连接背后的理想是“第一个请求打开一个连接,未来的请求使用相同的连接”。但是,上面的警告使得听起来好像PHP会知道某个持久连接已经饱和,并打开第二个连接。
PHP如何知道何时执行此操作?什么时候会发生什么规则?它是mod_php
/ FastCGI吗? Apache线程模型依赖?都不是?都?等专门针对Oracle / OCI驱动程序,但对整个系统的工作原理感到好奇。