Частые подключения к БД Oracle напрямую из PHP-скриптов могут вызывать высокую нагрузку на систему: каждое соединение порождает строки в текстовых и XML-логах, добавление строк системного аудита СУБД в служебных таблицах, расходуются одновременные подключения к БД в пределах установленного лимита.
Примеры:
- Мобильные приложения абонентов и монтажников интегрированы с Гидрой при помощи PHP-скрипта, получающего набор оперативных данных. Несколько тысяч новых соединений в сутки быстро привели к исчерпанию табличного пространства аудита Oracle.
- CRM на PHP выполняет функцию упрощенного интерфейса для операторов, ограничивая полный доступ к информации в Гидре. Рост числа звонков, а также привычка операторов закреплять вкладки в браузере (автообновление ежеминутно) расходует табличное пространство аудита Oracle.
- В сложной инфраструктуре оператора связи используется единый PHP-сервис преобразования API систем в универсальный. При подключении его к Гидре ощутимо вырос ежедневный объем архивных логов, отражающих изменения в таблицах аудита Oracle.
- PHP-сервис обеспечивает предзагрузку данных из Гидры при входе сотрудника на внутренний сайт. При активной работе полного состава сотрудников на стыке расчетных периодов лимит соединений с БД Oracle превышается и пользователи теряют доступ к веб-приложениям Гидры.
Для снижения нагрузки и объёма служебных данных следует перейти от стандартной функции oci_connect()
// Establish the database connection $dbh = oci_connect($login, $password, $dsn); if (!$dbh) { $e = oci_error(); exit(1); } <...> // Free prepared statement oci_free_statement($sth); // Close the database connection oci_close($dbh);
к установлению постоянного соединения функцией oci_pconnect()
// Establish the persistent database connection $dbh = oci_pconnect($login, $password, $dsn); if (!$dbh) { $e = oci_error(); exit(1); } <...> // Free prepared statement oci_free_statement($sth); // Note: No need to close the persistent connection explicitly
Документация: