Один сеанс PHP / приложения соответствует одному сеансу Oracle / базы данных? - PullRequest
0 голосов
/ 19 июля 2010

У меня такое поведение, которого я не ожидал.У меня есть синхронная процедура, которая запускается через PHP / OCI8.В начале процесса есть SELECT...FOR UPDATE NOWAIT

Я делаю NOWAIT, потому что я хочу, чтобы пользователи немедленно уведомлялись с сообщением об ошибке, что процесс уже запущен, вместо того, чтобы их браузер ждал блокировки.

Когда я запускаю процесс с двух отдельных компьютеров с двумя отдельными сеансами PHP, я получаю ожидаемое поведение: один запускается, а другой получает ORA-00054: resource busy and acquire with NOWAIT specified.

Но когда я открываю две вкладкив том же браузере и запустите процесс, вторая вкладка ожидает более 30 секунд, пока не завершится первая, а затем запускает вторую - как будто я не указал NOWAIT.

IЯ не использую постоянные соединения или пулы соединений любого рода.Я думал, что отдельный HTTP-запрос, выполняющий отдельные соединения PHP => Oracle, даст мне отдельные сеансы БД.Разве это не так?

ОБНОВЛЕНИЕ: Я нашел это: http://wiki.oracle.com/page/PHP+Oracle+FAQ под # 6, Как мне подключиться к Oracle с расширением OCI8? в нем говорится:

PHP будет совместно использовать / повторно использовать соединения, если одни и те же учетные данные пользователя используются более одного раза в сеансе сценария или на сервере httpd.Вы можете использовать функцию oci_new_connect (), чтобы убедиться, что используется новый сеанс.Вызовите функцию oci_pconnect (), чтобы создать постоянное соединение, которое не будет закрыто в конце скрипта (значительно ускоряя повторное соединение в следующем скрипте).

Однако, когда я изменяю на oci_new_connect это не решает проблему.Разные сеансы на разных компьютерах выдают ORA-00054, но две вкладки в одном браузере синхронизируют доступ, но не учитывают NOWAIT.

Ответы [ 2 ]

0 голосов
/ 19 июля 2010

Хорошо, так что это вообще не проблема с базой данных.Вместо этого кажется, что Firefox 3.6.6 поставил в очередь мои одновременные запросы, и это не было проблемой сессии PHP или БД.См. Этот вопрос для изучения этой проблемы: Синхронизирует ли Firefox запросы на ту же страницу?

0 голосов
/ 19 июля 2010

Помните, что есть «loadsession», а затем «savesession»

Возможно, что другой процесс обновит сеанс php в этом интервале в зависимости от того, как работает ваш драйвер сеанса.

...