PHP сообщество

любители кода :)

Производительность PHP+IIS+Oracle

Bloged in Без рубрики от admin Пятница Май 18, 2007 at about 11:35 дп

Установлено следующее:
На машине1 (3ГГц Dual Core, 1GB RAM) с Windows XP SP2:
- IIS
- PHP Version 5.1.2 как ISAPI модуль к IIS
- Oracle 9 Client, подружен с PHP
На машине2 (2.8ГГц, 512Mb RAM) с Windows 2003 Server Enterprise Edition SP1:
- Oracle 9 Enterprise Edition

На машине1 выполняется весьма ресурсоёмкий PHP скрипт вывода графика, который открывает курсор в Oracle, последовательно вытягивает около 10000 строк данных при помощи ocifetchinto.


Собственно, кусок кода вот, если нужно:

while($ARow = db_fetch_row($result))
{
if ($direction == 0) // forward direction
{
$from_value = $ARow[0];
$to_value = $ARow[1];
}
else // reverse direction
{
$from_value = $ARow[1];
$to_value = $ARow[0];
}

if ($from_value == $from_menuid && in_array($to_value, $c_menuid))
{
$event_val = $ARow[2];
$color = DBColor2RGBArray($plot_colours[$to_value]);

$s_time = $ARow[3];
// convert sql time to unix
$time_parts = explode(”-”, $s_time);
$event_time = mktime((integer)$time_parts[3], (integer)$time_parts[4], (integer)$time_parts[5], (integer)$time_parts[1], (integer)$time_parts[2], (integer)$time_parts[0]);

$shift1 = (integer)array_search($to_value, $c_menuid);

$event_time = date_adjust_DST($from_time, $event_time);
//calc the difference in days (event_time - from_time)

$diff_hours=hours_diff($from_time, $event_time);
//calc the difference in days (event_time - from_time)
$diff_hours=hours_diff($from_time, $event_time);
$bar_x = ($diff_hours * $c_menuid_count + $shift1) * $LgX;
// calc bar height
$bar_y = $plot_Ln * $event_val;

imagefilledrectangle($im, $plot_Ox + $bar_x, $plot_Oy, $plot_Ox+$bar_x+$LgX, $plot_Oy - $bar_y, imagecolorallocatealpha($im, $color[0], $color[1], $color[2], C_GFX_FILLTRANSPARENCY));
imagerectangle ($im, $plot_Ox + $bar_x, $plot_Oy, $plot_Ox+$bar_x+$LgX, $plot_Oy - $bar_y, $black);

}
}

Скрипт выполняется довольно долгое время: 10-15 секунд. Хотя, если ставить метки в начале и в конце скрипта, PHP на его выполнение тратит всего 4 секунды.
Я проанализировал трафик при помощи WireShark (Ethereal), и увидел, что все 10 секунд по сети передаются данные с машины2 на машину1. Скрипт просто медленно вытягивает данные из БД, при том, что средняя загрузка ЦП на обеих машинах не превышает 10%, память почти не растёт, и занята на уровне 40-50% RAM. Загрузка сети - 8%. Как только график заканчивает строиться, загрузка падает. Это данные из Task Manager.
Во время выполнения, на машине1, процессорное время максимальное у inetinfo (процесс IIS).

Подскажите пожалуйста, где здесь может быть узкое место. Возможно ли связке PHP+ISS выделить больше системных ресурсов с целью ускорения выполнения скрипта? Скрипт выполняется на небольшом объеме тестовых данных, а в реальной жизни время выполнения может быть порядка 2х минут. :(

Комментариев нет

Комментариев нет.

Извините, комментирование на данный момент закрыто.

изменить ; бытовая термоса техника ; скачать lego ; 6128 11 5481 Прокладка Komatsu ; про мобильное мошенничество