1

我有一个 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) : '&nbsp').'</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,这值得测试。

4

0 回答 0