![]() |
|
Модераторы: skyboy |
![]()
|
|
| witali |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2003 Репутация: нет Всего: нет |
Хостер гнется от базы на 100 тыс. записей!
Есть база на 100 тыс. записей - 40Мб, почти все поля FULLINDEX Хостер говорит: сильно большая нагрузка: Top Process %CPU 11.0 /usr/bin/perl cat.pl скрипт cat.pl - делает: SELECT и UPDATE по основной таблице (100000 записей) и 2 SELECTа по 2-м мелким таблицам. Хостер: Processor: Pentium® 4 CPU 2.40GHz Memory: 1025596k/1040320k Слишком большая база или кривой скрипт? Спасибо за ответ. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
скрипт кривоватый.... это мое мнения, 100000 это не много....
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
А какой формат таблицы? И работает она через драйвера или на прямую? Для FoxPro, например, 100000 записей это не повод материться
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| witali |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 3.7.2003 Репутация: нет Всего: нет |
База MySQL.
Cкрипт top.pl выполняется каждый час. Грузит сервер: Top Process %CPU 10.0 /usr/bin/perl top.pl таблица: url varchar(120) not null, title varchar(80) not null, description varchar(200) not null, keywords varchar(200) not null, dat DATE not null, category TEXT not null, catid TEXT not null, rank INT(5) not null, url2 TEXT not null, FULLTEXT (url), FULLTEXT (title), FULLTEXT (description), FULLTEXT (keywords), UNIQUE (url), UNIQUE (title) Код: #!/usr/bin/perl use DBI; require "/home/metaws/public_html/cgi-bin/main.pl"; push (@INC, "$homedir/"); $step=30; print "content-type:text/html\n\n"; $kritery="SELECT url, title, description, rank FROM urls WHERE rank > '0' ORDER BY rank DESC LIMIT 0, $step"; my $dbh = DBI -> connect("dbi:mysql:database=$dbname;host=$dbhost;port=$dbport", "$dblogin", "$dbpass") or die "Can't connect to sql server. Reason: $DBI::errstr"; if (!$ENV{'MOD_PERL'}) { $dbh->{'Warn'} = 0;} my $result = $dbh->prepare("$kritery") or die "Can't connect to sql server. Reason: $DBI::errstr" ; $result->execute(); while (my $ln = $result->fetchrow_hashref()) { $title=$ln->{'title'}; $rank=$ln->{'rank'}; if (length($title) > 40) { $title=substr($title,0,37); $title.="..."; } $list.="<li><a href=\"http://$ln->{'url'}\">$title</a> ($rank)</li>\n"; } $dbh->disconnect(); $list= "<ol>$list</ol>\n"; open (COUNTER, ">$html/toptext.txt"); print COUNTER "$list"; close (COUNTER); print $list; __________________________________________ И от него гнется Pentium® 4 CPU 2.40GHz! |
|||
|
||||
| TiGR |
|
|||
|
Unregistered |
А чего тут удивляться?
Критерий поиска по rank - столбец, на котором у тебя нет индекса, вот он и лопатит все 40 метров. Потом, при использовании ORDER BY, ему приходится лопатить все результаты (идекс тут особо не помогает) где rank>0. Если таких строк сорок тысяч - это неутешительно. Итак, 1. Добавь индекс на rank. 2. Если резултатов не один десяток тысяч, попробуй как-то ограничить число выводимых строк помимо ORDER BY. И это, хорошо использовать EXPLAIN. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |