Как закрыть соединение с БД oracle с php на сервере apache? Я имею в виду закрыть мгновенно


Обычно закрытие соединения просто выполняется oci_close($connection); или в худшем случае, когда php-скрипт завершает соединение, соединение прекращается.

Однако в моем случае я сталкиваюсь с другим поведением.

Если я получаю доступ к своему приложению, которое использует PHP 5.2.8, Apache 2.2.11 и oci8 1.2.5, соединение сохраняется в течение нескольких минут.

На самом деле кажется, что: если я запускаю netstat -b, я вижу, что процесс httpd.exe остается в состоянии ESTABLISHED на URL-адресе базы данных в течение некоторого времени (a несколько минут).

Может ли кто-нибудь просветить меня по поводу такого поведения?

P.S. Я не использую постоянные соединения.

P.P.S. Как и было предложено, вот код, используемый для подключения и закрытия (это устаревшее приложение):

Подключение: вызывается функция, код которой связан с подключением $connection = @ocilogon ( "$username", "$password", "$database" );

Заключение: ответственность за каждую страницу, которую мы разрабатываем, но обычно это было бы oci_close($connection)

Author: Valentin Jacquemin, 2010-04-14

1 answers

Из документов на oci_connect() здесь (ocilogon() вызывает ту же функцию):

Http://www.php.net/manual/en/oci8.connection.php

Это означает, что вы можете закрыть соединение явно через oci_close() или что оно автоматически закрывается в конце отображаемой страницы. Я бы предположил, что если вы явно не закрываетесь, то для тайм-аута может потребоваться некоторое время. Возможно ли, что некоторые страницы, на которых нет вызовов oci_close(), вызывают открытые соединения, которые вы видишь?

Если вы создадите отдельную страницу только с oci_connect() и oci_close(), а затем выполните ее несколько раз, увидите ли вы, что количество подключений увеличивается напрямую с тем, сколько раз вы запускали страницу и оставались на ней, прежде чем в конечном итоге вернуться вниз?

Кроме того, на какой индикатор вы смотрите, чтобы убедиться, что соединение остается открытым?

Если вы были на более высоких версиях, то это может быть пул резидентных подключений к базе данных Oracle 11g, но этого не существует в вашем текущем версии, которые вы используете.

 0
Author: Doug Porter, 2010-04-14 15:45:14