oci_set_prefetch
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_set_prefetch — Встановлює кількість рядків, які будуть автоматично вибрані в буфер
Опис
oci_set_prefetch(resource $statement, int $rows): bool
Встановлює кількість рядків, які будуть вибрані в буфер клієнтськими бібліотеками Oracle відразу після успішного виклику oci_execute() і кожного наступного внутрішнього запиту даних до базі. Продуктивність може бути значно збільшена для запитів, що повертають велику кількість рядків, за допомогою встановлення значення попередньої вибірки більше значення за замовчуванням oci8.default_prefetch
Попередня вибірка - це ефективний механізм Oracle, що дозволяє повертати більше одного рядка результату бази даних за кожен мережевий запит. Це дає більш раціональне використання мережі та процесора. Буферизація рядків відбувається всередині OCI8, тому поведінка функцій вибірки OCI8 не залежить від розміру попередньої вибірки. Наприклад, oci_fetch_row() завжди повертає один рядок. Буфер попередньої вибірки резервується окремо на кожен запит і не використовується вдруге у повторно запущених запитах або інших з'єднаннях.
Перед викликом oci_execute() викличте oci_set_prefetch()
Сенс налаштування розміру попередньої вибірки полягає у підборі зручного значення передачі у мережі і обробки базі даних. Для запитів, що повертають дуже велику кількість рядків, загальна продуктивність системи може бути кращою, якщо рядки повертатимуться в кілька прийомів (тобто встановити розмір попередньої вибірки менше кількості рядків). Це дозволить базі даних обробляти запити інших користувачів протягом обробки PHP-скриптом поточного результату запиту.
Попередня вибірка запитів з'явилася у Oracle 8i. Попередня вибірка REF CURSOR з'явилася у Oracle 11gR2 і може бути застосована у випадку, якщо PHP злінковано з клієнтськими бібліотеками Oracle 11gR2 та старше. Попередня вибірка вкладених курсорів була додана до Oracle 11gR2 та вимагає наявності версії 11gR2 і старше як для клієнтських бібліотек Oracle, так і для бази даних, що використовується.
Попередня вибірка не підтримується якщо запити містять LONG або LOB стовпці. Значення попередньої вибірки ігнорується і, у всіх ситуаціях, що не підтримують попередню вибірку, буде використана рядкова вибірка.
При використанні Oracle Database 12c, попередня вибірка задана PHP може бути змінена конфігураційним файлом oraaccess.xml
клієнта Oracle. Для отримання додаткових відомостей зверніться до документації Oracle.
Список параметрів
statement
Коректний ідентифікатор виразу OCI8, отриманий з oci_parse() та виконаний функцією oci_execute(), або ідентифікатор виразу REF CURSOR
rows
Кількість рядків попередньої вибірки >= 0
Значення, що повертаються
Повертає true
у разі успішного виконання або **false
**в случае возникновения ошибки.
Приклади
Приклад #1 Зміна попередньої вибірки за замовчуванням для запиту
Loading...
Приклад #2 Зміна значення попередньої вибірки за промовчанням для вибірки REF CURSOR
Loading...
Якщо PHP OCI8 робить вибірку з REF CURSOR, а потім передає REF CURSOR назад в іншу PL/SQL-процедуру для подальшої обробки, необхідно встановити розмір попередньої вибірки REF CURSOR щоб уникнути "втрати" рядів з результату. Значення попередньої вибірки - це кількість "зайвих" рядів, отриманих кожним внутрішнім запитом OCI8 до бази даних, тому встановлення його в означає вибірку лише одного ряду за один раз.
Приклад #3 Встановлення значення попередньої вибірки під час передачі REF CURSOR назад у Oracle
Loading...
Дивіться також
- Директиваoci8.default_prefetch