Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
oci8.connection_class | "" | PHP_INI_ALL | Доступна начиная с версии PHP 5.3 (PECL OCI8 1.3). |
oci8.default_prefetch | "100" | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
oci8.events | Off | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.3 (PECL OCI8 1.3). |
oci8.max_persistent | "-1" | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
oci8.old_oci_close_semantics | Off | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
oci8.persistent_timeout | "-1" | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
oci8.ping_interval | "60" | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
oci8.privileged_connect | Off | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
oci8.statement_cache_size | "20" | PHP_INI_SYSTEM | Доступна начиная с версии PHP 5.1.2 (PECL OCI8 1.1). |
Краткое разъяснение конфигурационных директив.
-
oci8.connection_class
string -
Этот определяемый пользователем текст обязательно должен быть задан при использовании резидентного пула соединений базы данных Oracle (Database Resident Connection Pooling (DRCP)). Это позволяет суб-партиционирование пула соединений DRCP, что позволяет постоянным соединениям OCI8 из приложения заново использовать сессии базы данных от предыдущего PHP-скрипта, улучшая масштабируемость. Если приложение использует процесс из пула базы данных, ранее используемый с другим классом соединений, настройки сессии, такие как формат даты Oracle, будут сброшены. Это предотвращает случайный обмен информацией между различными приложениями.
Значение может быть установлено во время выполнения скрипта с помощью ini_set() до установки соединения.
Для использования DRCP, OCI8 должна быть собрана с библиотеками Oracle 11g или новее и база данных должна быть Oracle 11g или новее. Пул соединений DRCP в базе данных должен быть включен,
oci8.connection_class
должно быть установлено в одно и то же строковое значение для всех веб-серверов, выполняющих одно и то же приложение, а строка соединения OCI8 должна указывать на сервер из пула. Приложение должно использовать постоянные соединения. -
oci8.default_prefetch
int -
Эта опция устанавливает значение по умолчанию для количества экстра рядов, которые будут возвращены и автоматически закэшированы при низкоуровневом запросе данных из базы данных. Установка значения в
0
выключает предварительную выборку (prefetching).Значение предварительной выборки не меняет количество возвращаемых пользователю рядов такими функциями как oci_fetch_array(); OCI8 внутренне обрабатывает предварительную выборку и кэширование рядов.
Значение может быть установлено отдельно для каждого выражения (per-statement) с помощью 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 о событиях Быстрого Уведомления Приложений базы данных (Fast Application Notification (FAN)).Без FAN, если экземпляр базы данных или узел машины неожиданно даст сбой, PHP приложения могут быть заблокированы, ожидая ответа от базы данных до истечения таймаута TCP. С помощью событий FAN PHP приложения быстро будут уведомлены о сбоях, которые влияют на установленные ими соединения к базе данных. Расширение OCI8 подчистит неиспользуемые соединения в кэше постоянных соединений.
При использовании директивы (
On
), база данных также должна быть настроена на отправку FAN событий.Поддержка FAN доступна, если OCI8 была слинкована с библиотеками Oracle 10gR2 (или более поздними) и соединение было осуществлено к Oracle Database 10gR2 (или более поздней версии).
-
oci8.max_persistent
int -
Максимальное количество постоянных соединений OCI8 на один PHP процесс. Установка этой опции в -1 означает отсутствие лимита.
-
oci8.old_oci_close_semantics
bool -
Эта опция контролирует поведение функции oci_close(). Ее включение означает, что oci_close() не делает ничего; соединение не будет закрыто, пока не закончится выполнение скрипта. Это сделано только в целях обратной совместимости. Если вы ощущаете потребность в этой настройке, строго рекомендуется настроить вызовы oci_close() в ваших скриптах вместо включения этой опции.
-
oci8.persistent_timeout
int -
Максимальное количество секунд, которое разрешается PHP-процессу держать неиспользуемое постоянное соединение открытым. Установка этой опции в -1 означает, что неиспользуемые соединения будут удержаны, пока PHP-процесс не завершит свое выполнение или соединение не будет принудительно закрыто с помощью функции oci_close().
Замечание: В PHP истечение срока действия неиспользуемых ресурсов не основано на уведомлениях. Оно случается когда PHP завершает обработку скрипта и проверяет отметку времени последних использованных ресурсов. Отсюда возникает следующий парадокс: неиспользуемые соединения могут быть закрыты только когда есть некоторая активность (хотя и не обязательно связанная с OCI8) в PHP-процессе. Если присутствует более одного PHP-процесса, то каждый из них в отдельности должен быть приведен в действие для того, чтобы инициировать истечение срока действия простаивающих ресурсов. Введение резидентного пула соединений базы данных (DRCP) в Oracle 11g разрешает проблемы с памятью и ресурсами, которые ранее пытались решить
oci8.max_persistent
иoci8.persistent_timeout
.Замечание: В PHP 5.3 (PECL OCI8 1.3), постоянные соединения могут быть закрыты с помощью oci_close().
-
oci8.ping_interval
int -
Количество секунд, которое должно пройти до совершения пинга в течение выполнения oci_pconnect(). Пинг обеспечивает корректность соединения базы данных. Если установлена в 0, постоянные соединения будут пинговаться при каждом вызове oci_pconnect(). Для полного отключения пингов установите эту опцию в -1.
Замечание: Отключение пингов позволяет oci_pconnect() действовать с максимальной эффективностью, но PHP может быть неспособен определить непригодные соединения, например, при обрыве сети или при отключении базы данных Oracle после того, как PHP установил соединение, пока соединение вновь не будет использовано в скрипте. Проконсультируйтесь с документацией функции oci_pconnect() для более подробной информации.
-
oci8.privileged_connect
bool -
Эта опция позволяет соединениям использовать привилегированные внешние учетные записи
OCI_SYSOPER
илиOCI_SYSDBA
.Замечание: Установка этой директивы в
On
позволит скриптам, запущенных с соответствующими пользовательскими привилегиями операционной системы, соединяться с базой данных в качестве привилегированных пользователей базы данных без требования пароля. Это может быть брешью системы безопасности. -
oci8.statement_cache_size
int -
Эта опция включает кэширование выражений, а также указывает сколько выражений необходимо кэшировать. Для отключения кэширования выражений просто установите значение этой опции в 0.
Кэширование выражений убирает необходимость передавать текст выражения к базе данных, а также обратную передачу различных метаданных об этом выражении обратно к PHP. Это может значительно улучшить общую производительность системы в приложениях, повторно использующих выражения в течение жизни одного соединения. Некоторые дополнительные "курсоры" баз данных могут остаться открытыми, подразумевая, что данные выражения будут использованы повторно.
Установите это значение размером рабочего набора выражений, используемых вашим приложением. Установка слишком малого значения может повлечь выброс выражений из кэша до их повторного использования.
Эта опция чаще всего используется с постоянными соединениями.
При использовании Oracle Database 12c или выше, предварительное значение, заданное PHP, может быть переопределено клиентским конфигурационным файлом Oracle
oraaccess.xml
. Обратитесь к документации Oracle.