Налаштування під час виконання
Поведінка цих функцій залежить від установок у 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 | Оголошена застарілою починаючи з PHP 8.1.0. |
oci8.old_oci_close_semantics | Off | INI_SYSTEM | |
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
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
Ця опція встановлює значення за замовчуванням для кількості екстра рядів, які будуть повернуті та автоматично закешовані за низькорівневого запиту даних з бази даних. Встановлення значення в вимикає попередню вибірку (prefetching).
Значення попередньої вибірки не змінює кількість рядів, що повертаються користувачеві такими функціями як oci_fetch_array(); OCI8 внутрішньо обробляє попередню вибірку та кешування рядів.
Значення може бути встановлене окремо для кожного виразу (per-statement) за допомогою oci_set_prefetch() до виконання самого виразу.
При використанні Oracle Database 12c або нове попереднє значення, задане PHP, може бути перевизначено клієнтським конфігураційним файлом Oracle oraaccess.xml
Обратитесь к документации Oracle.
Зауваження: Велика попередня вибірка може покращити продуктивність за рахунок деякого збільшеного використання пам'яті. Для запитів, що повертають великі масиви даних, вигода у продуктивності буде значною.
oci8.events
bool
Включення (On
) дозволяє повідомити PHP про події Швидкого Повідомлення Додатків бази даних (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
oci8.ping_interval
int
Кількість секунд, що має пройти до пінгу протягом виконання oci_pconnect(). Пінг забезпечує коректність з'єднання бази даних. Якщо встановлено 0, постійні з'єднання будуть пінгуватись при кожному виклику oci_pconnect(). Для повного відключення пінгів встановіть цю опцію -1.
Зауваження: Отключение пингов позволяетoci_pconnect() діяти з максимальною ефективністю, але PHP може бути нездатним визначити непридатні з'єднання, наприклад, при обриві мережі або при відключенні бази даних Oracle після того, як PHP встановив з'єднання, доки з'єднання знову не буде використано в скрипті. Проконсультуйтесь із документацією функції oci_pconnect() для більш детальної інформації.
oci8.prefetch_lob_size
int
Параметр налаштування, що впливає на внутрішню буферизацію даних LOB. Збільшення цього значення може покращити продуктивність вибірки менших LOB за рахунок скорочення кругових обходів між PHP та базою даних. Використання пам'яті зміниться.
Значення впливає на LOB, що повертаються як екземпляри OCILob, а також на ті, що повертаються з використанням OCI_RETURN_LOBS
Значення може бути встановлене для кожного оператора за допомогою функції oci_set_prefetch_lob() до виконання оператора.
Зауваження: Використовуйте з Oracle Database 12.2 або новіше.
oci8.privileged_connect
bool
Ця опція дозволяє з'єднанням використовувати привілейовані зовнішні облікові записи OCI_SYSOPER
або OCI_SYSDBA
Зауваження: Встановлення цієї директиви в
On
дозволить скриптам, запущеним з відповідними користувальницькими привілеями операційної системи, з'єднуватися з базою даних як привілейовані користувачі бази даних без вимог пароля. Це може бути брехнею системи безпеки.
oci8.statement_cache_size
int
Ця опція включає кешування виразів, а також вказує, скільки виразів необхідно кешувати. Для відключення кешування виразів просто встановіть значення цієї опції 0.
Кешування виразів прибирає необхідність передавати текст виразу до бази даних, а також зворотну передачу різних метаданих про це вираз назад до PHP. Це може значно покращити загальну продуктивність системи у додатках, які повторно використовують вирази протягом життя однієї сполуки. Деякі додаткові "курсори" баз даних можуть залишитися відкритими, маючи на увазі, що дані вирази будуть використані повторно.
Встановіть це значення розміром робочого набору виразів, що використовуються вашою програмою. Встановлення занадто малого значення може спричинити викид виразів з кешу до їх повторного використання.
Ця опція найчастіше використовується із постійними з'єднаннями.
При використанні Oracle Database 12c або вище, попереднє значення, задане PHP, може бути перевизначено клієнтським конфігураційним файлом Oracle oraaccess.xml
Обратитесь к документации Oracle.