PHP Conference Japan 2024

运行时配置

这些函数的行为受 php.ini 中的设置影响。

OCI8 配置选项
名称 默认值 可更改 变更日志
oci8.connection_class "" INI_ALL  
oci8.default_prefetch "100" INI_SYSTEM  
oci8.events Off INI_SYSTEM  
oci8.max_persistent "-1" INI_SYSTEM  
oci8.old_oci_close_semantics Off INI_SYSTEM 自 PHP 8.1.0 起已弃用。
oci8.persistent_timeout "-1" INI_SYSTEM  
oci8.ping_interval "60" INI_SYSTEM  
oci8.prefetch_lob_size "0" INI_SYSTEM 自 PECL OCI8 3.2 起可用。
oci8.privileged_connect Off INI_SYSTEM  
oci8.statement_cache_size "20" INI_SYSTEM  

以下是配置指令的简要说明。

oci8.connection_class 字符串

当使用 Oracle 数据库驻留连接池 (DRCP) 时,应始终设置此用户定义文本。它允许对 DRCP 连接池进行子分区,从而允许应用程序中的 OCI8 持久连接重用先前 PHP 脚本中的数据库会话,从而提高可扩展性。当应用程序使用以前使用不同连接类使用的数据库池化进程时,会话设置(例如默认 Oracle 日期格式)将重置。这可以防止不同应用程序之间意外共享信息。

可以在连接之前使用 ini_set() 在运行时设置该值。

要使用 DRCP,OCI8 必须与 Oracle 11g(或更高版本)库链接,并且数据库必须是 Oracle 11g(或更高版本)。必须在数据库中启用 DRCP 连接池,oci8.connection_class 应为运行相同应用程序的所有 Web 服务器设置为相同的字符串,并且 OCI8 连接字符串必须指定使用池化服务器。应用程序应使用持久连接。

oci8.default_prefetch 整数

此选项设置每次从数据库发出低级数据请求时将自动提取和缓存的额外行的默认数量。将值设置为 0 将关闭预取。

预取值不会更改诸如 oci_fetch_array() 之类的函数返回给用户的行数;行的预取和缓存在 OCI8 内部处理。

可以在语句执行之前使用 oci_set_prefetch() 为每个语句设置该值。

当使用 Oracle 数据库 12c(或更高版本)时,PHP 设置的预取值可以被 Oracle 的客户端 oraaccess.xml 配置文件覆盖。有关更多详细信息,请参阅 Oracle 文档。

注意更大的预取可以提高性能,但会增加一些内存使用量。对于返回大量数据的查询,性能提升可能非常显著。

oci8.events 布尔值

使用 On 允许 PHP 收到数据库快速应用程序通知 (FAN) 事件的通知。

如果没有 FAN,当数据库实例或机器节点意外失败时,PHP 应用程序可能会被阻塞,等待数据库响应,直到 TCP 超时过期。使用 FAN 事件,PHP 应用程序会快速收到影响其已建立数据库连接的故障的通知。OCI8 扩展将在持久连接缓存中清理不可用的连接。

当使用 On 时,数据库也必须配置为发布 FAN 事件。

当 OCI8 与 Oracle 10gR2(或更高版本)库链接并连接到 Oracle 数据库 10gR2(或更高版本)时,可以使用 FAN 支持。

oci8.max_persistent 整数

每个 PHP 进程的最大持久 OCI8 连接数。将此选项设置为 -1 表示没有限制。

oci8.old_oci_close_semantics 布尔值

此选项控制 oci_close() 的行为。启用它意味着 oci_close() 将不执行任何操作;连接将不会在脚本结束之前关闭。这仅用于向后兼容。如果您发现需要启用此设置,则强烈建议您调整应用程序中的 oci_close() 调用,而不是启用此选项。

oci8.persistent_timeout 整数

PHP 进程允许保持空闲持久连接打开的最大秒数。将此选项设置为 -1 表示空闲持久连接将保留,直到 PHP 进程终止或使用 oci_close() 显式关闭连接。

注意在 PHP 中,空闲资源的过期不是基于警报的。它发生在 PHP 完成脚本处理并检查资源的最后使用时间戳时。因此,存在一个悖论,即空闲连接只能在 PHP 进程中存在某些活动(尽管不一定与 OCI8 相关)时才能关闭。如果有多个 PHP 进程,则每个进程都必须单独激活才能触发其空闲资源的过期。Oracle 11g 中引入的数据库驻留连接池 (DRCP) 解决了 oci8.max_persistentoci8.persistent_timeout 以前尝试克服的内存和资源问题。

oci8.ping_interval 整数

oci_pconnect() 期间发出 ping 之前必须经过的秒数。ping 确保数据库连接有效。当设置为 0 时,每次调用 oci_pconnect() 时都会对持久连接进行 ping 操作。要完全禁用 ping,请将此选项设置为 -1。

注意禁用 ping 可以使 oci_pconnect() 以最高的效率运行,但 PHP 可能无法检测到不可用的连接,例如由网络中断引起的连接,或者如果 Oracle 数据库在 PHP 连接后已关闭,直到稍后在脚本中使用该连接。有关更多信息,请参阅 oci_pconnect() 文档。

oci8.prefetch_lob_size 整数

这是一个影响 LOB 数据内部缓冲的调整参数。增加此值可以通过减少 PHP 和数据库之间的往返次数来提高提取较小 LOB 的性能。内存使用量将发生变化。

该值影响作为 OCILob 实例返回的 LOB,以及使用 OCI_RETURN_LOBS 返回的 LOB。

可以在语句执行之前使用 oci_set_prefetch_lob() 为每个语句设置该值。

注意与 Oracle 数据库 12.2 或更高版本一起使用。

oci8.privileged_connect 布尔值

此选项允许连接使用特权外部凭据 OCI_SYSOPEROCI_SYSDBA

注意将此设置为 On 可以允许以适当的 OS 用户权限运行的 Web 服务器上的脚本作为特权数据库用户连接,而无需数据库密码。这可能存在安全风险。

oci8.statement_cache_size 整数

此选项启用语句缓存,并指定要缓存多少个语句。要禁用语句缓存,只需将此选项设置为 0。

语句缓存消除了将语句文本传输到数据库的需要,并消除了将有关语句的任何元数据传输回 PHP 的需要。这可以在应用程序中显着提高整体系统性能,这些应用程序在连接的生命周期内重复使用语句。可能会保持一些额外的数据库“游标”处于打开状态,假设语句将被重复使用。

将此值设置为应用程序使用的语句工作集的大小。设置过小的值会导致语句在重复使用之前从缓存中刷新。

此选项最适用于持久连接。

当使用 Oracle Database 12c(或更高版本)时,Oracle 的客户端 oraaccess.xml 文件可以覆盖此值并自动对其进行调整。请参阅 Oracle 文档以了解更多详细信息。

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top