PHP Conference Japan 2024

執行時期設定

這些函式的行為受 php.ini 中的設定影響。

OCI8 設定選項
名稱 預設值 可變更性 更新日誌
oci8.connection_class "" INI_ALL  
oci8.default_prefetch "100" INI_SYSTEM  
oci8.events 關閉 INI_SYSTEM  
oci8.max_persistent "-1" INI_SYSTEM  
oci8.old_oci_close_semantics 關閉 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 關閉 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 設定為相同的字串,且 OCI8 連線字串必須指定使用池化伺服器。應用程式應使用永續連線。

oci8.default_prefetch 整數

此選項設定每當從資料庫發出低階資料請求時,將自動擷取和快取的額外資料列的預設數量。設定值為 0 會關閉預先擷取。

預先擷取值不會改變 oci_fetch_array() 等函式傳回給使用者的資料列數量;資料列的預先擷取和快取由 OCI8 內部處理。

可以在執行陳述式之前使用 oci_set_prefetch() 針對每個陳述式設定此值。

使用 Oracle Database 12c(或更高版本)時,PHP 設定的預先擷取值可能會被 Oracle 的用戶端 oraaccess.xml 設定檔覆寫。詳情請參閱 Oracle 文件。

注意較大的預先擷取值可以提高效能,但會增加一些記憶體使用量。對於傳回大量資料的查詢,效能提升可能相當顯著。

oci8.events 布林值

使用 On 可讓 PHP 收到資料庫快速應用程式通知 (FAN) 事件的通知。

如果沒有 FAN,當資料庫執行個體或機器節點意外故障時,PHP 應用程式可能會被封鎖,等待資料庫回應,直到 TCP 超時到期。透過 FAN 事件,PHP 應用程式可以快速收到影響其已建立資料庫連線的故障通知。 OCI8 擴充功能將清除永續連線快取中無法使用的連線。

使用 On 時,也必須將資料庫設定為發佈 FAN 事件。

當 OCI8 與 Oracle 10gR2(或更高版本)程式庫連結並連線到 Oracle Database 10gR2(或更高版本)時,可以使用 FAN 支援。

oci8.max_persistent 整數

每個 PHP 程序的最大永續 OCI8 連線數。將此選項設定為 -1 表示沒有限制。

oci8.old_oci_close_semantics 布林值

此選項控制 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_persistentoci8.persistent_timeout 之前嘗試克服的記憶體和資源問題。

oci8.ping_interval int

oci_pconnect() 期間發出 ping 之前必須經過的秒數。ping 可確保資料庫連線有效。設定為 0 時,每次呼叫 oci_pconnect() 時都會發出 ping。要完全停用 ping,請將此選項設定為 -1。

注意 停用 ping 可讓 oci_pconnect() 以最高效率運作,但 PHP 可能無法偵測到無法使用的連線,例如網路斷線造成的連線,或者自 PHP 連線以來 Oracle 資料庫已關閉,直到腳本稍後使用該連線。詳情請參閱 oci_pconnect() 文件。

oci8.prefetch_lob_size int

這是一個影響 LOB 資料內部緩衝的調整參數。增加此值可以透過減少 PHP 與資料庫之間的往返次數來提高擷取較小 LOB 的效能。記憶體使用量將會改變。

此值會影響以 OCILob 實例形式返回的 LOB,以及使用 OCI_RETURN_LOBS 返回的 LOB。

可以在語句執行之前使用 oci_set_prefetch_lob() 為每個語句設定此值。

注意 與 Oracle Database 12.2 或更高版本一起使用。

oci8.privileged_connect bool

此選項允許連線使用特殊外部憑證 OCI_SYSOPEROCI_SYSDBA

注意事項 將此設定為 On 可允許在具有適當作業系統使用者權限的網路伺服器上執行的腳本以具備權限的資料庫使用者身分連線,而無需資料庫密碼。這可能會有安全風險。

oci8.statement_cache_size int

此選項啟用敘述快取,並指定要快取多少敘述。若要停用敘述快取,只需將此選項設定為 0 即可。

敘述快取免除了將敘述文字傳輸到資料庫的需求,也免除了將任何關於敘述的詮釋資料傳回 PHP 的需求。這可以顯著提升在連線期間重複使用敘述的應用程式的整體系統效能。基於敘述將被重複使用的假設,一些額外的資料庫「游標」可能會保持開啟狀態。

將此值設定為應用程式所使用的敘述工作集的大小。設定太小的值可能會導致敘述在重複使用之前從快取中被清除。

此選項在持續性連線中最有用。

使用 Oracle Database 12c(或更高版本)時,此值可以被覆寫,並由 Oracle 的用戶端 oraaccess.xml 檔案自動調整。詳情請參閱 Oracle 文件。

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top