Могу ли я улучшить производительность oci8 с помощью PHP7?
Мои инструменты следующие
- Ubuntu сервер 16
- PHP7
- oci8
- CodeIgniter
- БД Oracle
У меня есть php7 с oci8, успешно работающий, установив файлы Basic и devel.rpm с сайта oracle.
Я могу успешно подключиться к своей базе данных Oracle и вернуть данные через мою веб-страницу.
Проблема, с которой я сталкиваюсь, заключается в том, что время выполнения запроса примерно вдвое больше, чем на моем сервере PRD, использующем соединение ODBC и драйвер реального оракула на OS X (Mac). Я не уверен, почему производительность будет в два раза медленнее. Особенно учитывая, что аппаратные возможности этого сервера гораздо более мощные.
Любая помощь с благодарностью.
Спасибо
РЕДАКТИРОВАТЬ: После фактического измерения только времени выполнения, похоже, что они действительно быстрее на новом сервере. Я думаю, что загрузка страницы, кажется, медленнее из-за драйвера oci8 codeigniter.
1 ответ
Пул соединений DRCP
PHP от 5.3 (PECL OCI8 1.3) поддерживает пул резидентных соединений с базами данных Oracle (DRCP). DRCP позволяет более эффективно использовать машинную память базы данных и обеспечивает высокую масштабируемость. Нет или минимальные изменения приложения необходимы для использования DRCP.
DRCP подходит для приложений, которые подключаются с использованием нескольких схем базы данных и поддерживают соединения с базой данных открытыми в течение короткого периода времени. Другие приложения должны использовать процессы сервера выделенных баз данных Oracle по умолчанию или использовать общие серверы.
DRCP поддерживает все три функции подключения, но обеспечивает максимальную масштабируемость при создании соединений с помощью oci_pconnect().
Чтобы DRCP был доступен в OCI8, клиентские библиотеки Oracle, используемые PHP, и версия базы данных Oracle должны быть 11g или более.
Документация по DRCP содержится в нескольких руководствах Oracle. Например, см. "Настройка пула резидентных соединений с базой данных в документации Oracle для получения информации об использовании. A "Технический документ DRCP содержит справочную информацию о DRCP.
Чтобы использовать DRCP, соберите PHP с расширением OCI8 1.3 (или более поздней версии) и библиотеками Oracle 11g (или более поздней версии), а затем выполните следующие действия:
As a privileged database administrator, use a program like SQL*Plus to start the connection pool in the database:
SQL> execute dbms_connection_pool.start_pool;
Optionally use dbms_connection_pool.alter_param() to configure DRCP settings. The current pool settings can be queried from the DBA_CPOOL_INFO view.
Update the connection strings used. For PHP applications that currently connect using a Network Connect Name like MYDB:
$c = oci_pconnect("myuser", "mypassword", "MYDB");
modify the tnsnames.ora file and add a (SERVER=POOLED) clause, for example:
MYDB = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myhost.dom.com)
(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales)
(SERVER=POOLED)))
Alternatively, modify the Easy Connect syntax in PHP and add :POOLED after the service name:
$c = oci_pconnect("myuser", "mypassword", "myhost.dom.com:1521/sales:POOLED");
Edit php.ini and choose a connection class name. This name indicates a logical division of the connection pool and can be used to isolate pooling for separate applications. Any PHP applications with the same user name and connection class value will be able to share connections in the pool, giving greater scalability.
oci8.connection_class = "MY_APPLICATION_NAME"
Run the application, connecting to the 11g (or later) database.