运行时配置¶
php.ini 中的设置¶
| 名称 | 默认 | 可修改范围 |
|---|---|---|
| oci8.connection_class | "" | PHP_INI_ALL |
| oci8.default_prefetch | "100" | PHP_INI_SYSTEM |
| oci8.events | Off | PHP_INI_SYSTEM |
| oci8.max_persistent | "-1" | PHP_INI_SYSTEM |
| oci8.old_oci_close_semantics | Off | PHP_INI_SYSTEM |
| oci8.persistent_timeout | "-1" | PHP_INI_SYSTEM |
| oci8.ping_interval | "60" | PHP_INI_SYSTEM |
| oci8.prefetch_lob_size | "0" | PHP_INI_SYSTEM |
| oci8.privileged_connect | Off | PHP_INI_SYSTEM |
| oci8.statement_cache_size | "20" | PHP_INI_SYSTEM |
配置指令的简短说明¶
oci8.connection_class string
使用 Oracle 数据库驻留连接池 (DRCP) 时,应始终设置此用户定义的文本。
它允许对 DRCP 连接池进行子分区,允许来自应用程序的 OCI8 持久连接重用以前 PHP 脚本中的数据库会话,从而提供更好的可伸缩性。
当应用程序使用以前用于不同连接类的数据库池化进程时,将重置会话设置,如默认的 Oracle 日期格式。这可以防止在不同应用程序之间意外共享信息。
该值可以在连接之前使用ini_set()在运行时设置。
要使用DRCP,OCI8必须与Oracle 11g(或更高版本)库链接,并且数据库必须是Oracle 11g或更高版。
必须在数据库中启用DRCP连接池,对于运行相同应用程序的所有web服务器,oci8.connection_class应设置为相同的字符串,
并且oci8连接字符串必须指定使用池服务器。应用程序应使用持久连接。
oci8.default_prefetch int
此选项设置了当从数据库发出低级数据请求时自动获取和缓存的默认额外行数。将值设置为0将关闭预取。
预取值不会改变返回给用户的oci_fetch_array()函数的行数;行的预取和缓存在OCI8中内部处理。
在语句执行之前,可以使用oci_set_prefetch()为每条语句设置该值。
在PHP 5.3(PECL OCI8 1.3.4)中,默认值从10增加到100。
在PHP 5.3.2(PECL OCI8 1.4)中,可设置的最小值从1减少到0,允许关闭预取。
当使用Oracle Database 12c(或更高版本)时,PHP设置的预取值可以被Oracle的客户端oraaccess覆盖。xml配置文件。有关详细信息,请参阅Oracle文档。
警告
注意:更大的预取可以提高性能,但代价是增加内存使用。对于返回大量数据的查询,性能优势可能非常显著。
oci8.events bool
使用On可以通知PHP数据库快速应用程序通知(FAN)事件。
如果没有FAN,当数据库实例或机器节点意外失败时,PHP应用程序可能会被阻止,等待数据库响应,直到TCP超时过期。
通过FAN事件,PHP应用程序可以快速收到影响其已建立数据库连接的故障通知。OCI8扩展将清除持久连接缓存中不可用的连接。
使用On时,还必须将数据库配置为发布FAN事件。
当OCI8与Oracle 10gR2(或更高版本)库链接并连接到Oracle Database 10gR2或更高版时,FAN支持可用。
oci8.max_persistent int
每个PHP进程的最大持久OCI8连接数。将此选项设置为-1表示没有限制。
oci8.old_oci_close_semantics bool
此选项控制oci_close()行为。启用它意味着oci_close()将什么也不做;直到脚本结束,连接才会关闭。这仅用于向后兼容。
如果您发现需要启用此设置,强烈建议您调整应用程序中的oci_close()调用,而不是启用此选项。
oci8.persistent_timeout int
允许PHP进程保持空闲持久连接打开的最大秒数。
将此选项设置为-1意味着将保留空闲的持久连接,直到PHP进程终止或使用oci_close()显式关闭连接。
警告
注意: 在PHP中,空闲资源的到期不是基于警报的。当PHP完成处理脚本并检查上次使用的资源时间戳时,就会发生这种情况。 因此,存在一个悖论,即只有在PHP进程中存在一些活动(尽管不一定与OCI8相关)时,才能关闭空闲连接。 如果有多个PHP进程,则必须单独激活每个进程,以触发其空闲资源的到期。 Oracle 11g中引入的数据库驻留连接池(DRCP)解决了oci8.max_persistent和oci8.persistent_timeout之前试图解决的内存和资源问题。 在PHP 5.3(PECL OCI8 1.3)中,可以使用oci_close()关闭持久连接。
oci8.ping_interval int
在oci_pconnect()期间发出ping之前必须经过的秒数。ping可确保数据库连接有效。
当设置为0时,每次调用oci_pconnect()时都会ping持久连接。要完全禁用ping,请将此选项设置为-1。
警告
注意: 禁用ping允许oci_pconnect()以最高的效率运行,但PHP可能无法检测不可用的连接,例如由于网络中断造成的连接, 或者如果Oracle数据库在PHP连接后已关闭,直到在脚本中稍后使用该连接。有关详细信息,请参阅oci_pconnect()文档。
oci8.prefetch_lob_size int
这是一个影响LOB数据内部缓冲的调优参数。增加该值可以通过减少PHP和数据库之间的往返来提高获取较小LOB的性能。内存使用将发生变化。
该值影响作为OCILob实例返回的LOB以及使用OCI_RETURN_LOBs返回的LOBs。
在执行语句之前,可以使用oci_set_prefetch_lob()为每条语句设置该值。
警告
与Oracle Database 12.2或更高版本一起使用。
oci8.privileged_connect bool
此选项允许连接使用外部凭据OCI_SYSOPER或OCI_SSYSDBA。
警告
注意: 将此设置为“开”可以允许以适当的OS用户权限运行的web服务器上的脚本有权限连接数据库。
oci8.statement_cache_size int
此选项启用语句缓存,并指定要缓存的语句数。要禁用语句缓存,只需将此选项设置为0。
语句缓存不需要将语句文本传输到数据库,也不需要将关于语句的任何元数据传输回PHP。
这可以显著提高在连接生命周期内重用语句的应用程序的总体系统性能。假设语句将被重用,一些额外的数据库“游标”可能会保持打开状态。
将此值设置为应用程序使用的语句工作集的大小。设置太小的值可能会导致语句在重用之前从缓存中刷新。此选项对持久连接最有用。
使用Oracle Database 12c(或更高版本)时,此值可以被Oracle的客户端oraaccess覆盖并自动调整。xml文件。有关详细信息,请参阅Oracle文档。