Вопрос:
Каковы правила/логика управления постоянным подключением при использовании PDO?
Окружающая среда:
Веб-сервер
- Windows 7 x64
- Двухъядерный процессор с 16 ГБ оперативной памяти
- Apache 2.2.17
- PHP 5.3.5
- Подключение по строке DSN с IP-адресом, портом, именем службы и т.д.
- Нет ODBC для подключения к DB (пытались создать его на 2 часа, спасибо Oracle!)
Сервер БД
- Oracle 10g в Linux
- Многоядерный с 4 ГБ оперативной памяти
- Имя пользователя, специально созданное для моего веб-приложения (да, это подделка)
- пользователь: webuser
Мое понимание/наблюдения:
Непрерывные соединения
<?php
// Open a new connection
// Session created in Oracle
$dbh = new PDO('DSN', 'webuser', 'password');
// webuser is active in v$session with a SID=1
$dbh = NULL;
// webuser removed from v$session
// Manually calling $dbh = NULL; will remove the session from v$session
// OR
// Wait for script EOL so a kill-session command is sent to Oracle?
?>
- Script надежно занимает ~.09 секунд для выполнения с накладными ресурсами фрейма и т.д.
Постоянные соединения
<?php
// Open a new connection and make it persistent
// Session created in Oracle
// Is Apache maintaining some sort of keep-alive with Oracle here?
// because I thought php.exe is only alive for the duration of the script
$dbh = new PDO('DSN', 'webuser', 'password', array(PDO::ATTR_PERSISTENT => TRUE));
// webuser is active in v$session with a SID=1
$dbh = NULL;
// webuser is still active in v$session with a SID=1
$dbh = new PDO('DSN', 'webuser', 'password', array(PDO::ATTR_PERSISTENT => TRUE));
// webuser is still active in v$session with a SID=1
// Manually calling $dbh = NULL; does not kill session
// OR
// Script EOL does not kill session
// ^^ this is good, just as expected
?>
- Script занимает ~.12 секунд для выполнения при первом посещении с использованием служебных данных структуры и т.д.
- Выполняется подсеквенция. ~.04
Проблема:
Я посещаю страницу, а webuser
получает SID=1
Мой коллега посещает страницу и webuser
получает дополнительный SID=2
< - rinse, repeat и increment SID для новых компьютеров, посещающих эту страницу
Не следует ли повторять использование нового посетителя SID=1
?
Приветствуются все ответы, предложения, запросы на альтернативное тестирование, ссылки на материалы для чтения.
У меня есть RTFM'ed какое-то время, и Googling только создавал скудные блоги Advantages of Persistent vs. Non-persistent
.