Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Время выполнения запроса к БД 3 сек. (!)


Автор: forumuser 24.3.2003, 19:04
Есть скрипт, который выдает сумму скачанного трафика ориентируясь по IP посетителя. Так вот если выполнять запрос даже лишь по одной дате, время выполнения составляет 3,минимум 2, секунды! Это нормально или я что-то криво сделал.

#!/usr/bin/perl
use DBI;
use CGI qw(:all);
###########################################################
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$hour="0".$hour if length($hour)==1;
$min="0".$min if length($min)==1;
$sec="0".$sec if length($sec)==1;
$first_time = $hour.$min.$sec;
###########################################################
my $dbh = DBI->connect("DBI:mysql:database=name;host=xxx.xxx.xxx.xxx","user", "pass") || die $DBI::errstr;
###########################################################
my $ip=$ENV{'REMOTE_ADDR'};#определение ip адреса
$date1=param('date1');#присвоение переменной первой даты из формы
$date2=param('date2');#присвоение переменной второй даты из формы
###########################################################
my $ID=$dbh->prepare("SELECT * FROM filter_ip WHERE IP_address='$ip'");
$ID->execute;
my $viv=$ID->fetchrow_hashref();
my $id=$viv->{"Filter_ID"};
###########################################################
my $IB=$dbh->prepare("SELECT * FROM traffic WHERE ts BETWEEN '$date1' AND '$date2' AND filterid='$id'");
$IB->execute;
my $iv=$IB->fetchrow_hashref();
my $summa=$iv->{"recv"};
###########################################################
$shotsumma=($summa/1024)/1024;
$shotsumma=sprintf "%.3f",$shotsumma;
###########################################################
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$hour="0".$hour if length($hour)==1;
$min="0".$min if length($min)==1;
$sec="0".$sec if length($sec)==1;
$second_time = $hour.$min.$sec;
$end_time = $second_time - $first_time;
###########################################################
print "<html><head><title>Результат подсчета</title></head><body>";
print "<table align=center border=1>";
print "<tr><td><font size=4>За период с <b>$date1</b> по <b>$date2</b> скачано <b>$shotsumma</b> Мб (=$summa байт) </font></tr></td>";
print "<tr align=center><td><font size=4>Ваш IP адрес <b>$ip</b></font></td></tr>";
print "<tr align=center><td>Время выполнения запроса $end_time секунд</td></tr>";
print "</table>";
print "<table align=center border=0>";
print "<tr><td>";
print "<FORM ACTION='/cgi-bin/forma_traffic.pl' align=center>";
print "<INPUT TYPE=submit VALUE='Назад'>";
print "</tr></td>";
print "</table>";
print "</body></html>";
###########################################################
$dbh-> disconnect();
###########################################################
Ось на которой стоит MySQL NT4.

Автор: kronon 25.3.2003, 04:43
Вряд ли это ускорит, просто бросилось в глаза:
вместо

print " html code ";
print " html code ";
...........................
print " html code ";

лучше пиши для уменьшения кода

print <<"abc";
html code
.....
....
html code
abc; # abc - любое сочетание букв

ещё
ты не забыл сделать индексы по используемым в запросах полям, особенно по датам?

Автор: forumuser 25.3.2003, 18:08
Ну ка, ну ка, поподробнее по поводу индексов, может я ничего об этом не знаю! Что это такое?

Автор: HalkaR 31.3.2003, 07:23
1)Если это сервер, то возможно он перегружен и скрипт действительно тормозит.
2)Попробуй поставить dissconnect сразу после fetch
3)Ns грузишь весь! модуль CGI и не где им не пользуешься?! Не понял...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)