我有一个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秒,而当它在远程DB上运行时需要超过4.3秒。
如果任何人有解释或解决此问题的方法,我将感激不尽。驱动程序使用的其他选项代替OCi,这值得进行测试。