У меня есть приложение Zend 1.1, которое стало очень медленным при переносе в рабочую локальную сеть. Приложение размещается на виртуальном сервере и через OCI и Instant Client подключается к удаленной схеме Oracle в той же сети.
Чтобы избежать каких-либо особых причин, обусловливающих эту задержку, я создал небольшой скрипт, который подключается и извлекает данные из таблицы БД, как показано ниже:
<?php
$username = "Username";
$password = "Password";
$dbname = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SID = xe) ) )";
$conn = oci_connect($username, $password, $dbname);
$query = 'select * from SCS_SYS_ROLES';
$stid = oci_parse($conn, $query);
$r = oci_execute($stid);
// Fetch each row in an associative array
print '<table border="1">';
while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS+OCI_ASSOC)) {
print '<tr>';
foreach ($row as $item) {
print '<td>'.($item !== null ? htmlentities($item, ENT_QUOTES) : ' ').'</td>';
}
print '</tr>';
}
print '</table>';
// Close the Oracle connection
oci_close($conn);
// Measuring time...
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
echo "<p>".$time."</p>";
?>
Две копии этого скрипта с различной конфигурацией показывают разницу в скорости примерно в 40 раз. Когда скрипт подключен к локальному экземпляру Oracle Express, он занимает около 0,1 секунды, а при запуске на удаленной БД — более 4,3 секунды.
Если у кого-то есть объяснение или способ решить эту проблему, я буду благодарен. Какие есть другие варианты использования драйверов вместо OCi, это стоит проверить.
Задача ещё не решена.
Других решений пока нет …