Сотворил систему для мониторинга локальных сетевых ресурсов (50 FTPD-ов), в сумме 300.000 файлов, 1.5ТБ данных. Сервер - cel1466/320MB, gentoo распоследний, postgresql из portage (7.4.5, но потом попробовал и 8.0.0b3). Беда такая: "текучка" достаточно большая +-20.000 файлов в сутки, то есть 20.000 записей в день надо удалять. Причём добавляется всё практически мгновенно, выборка тоже, а вот с UPDATE (аттрибут erased делаем true) ЖУТЧАЙШИЕ тормоза. Пробовал заменить на DELETE, то же самое. Жутчайшие - это удаление 100 (сто!!) записей за 15 минут. Удаление производится из perl-скрипта, autocommit вЫключен. Доки по оптимизации прочитал, sync вЫключил, sharedbuffer-ы и больше делал и меньше, остальные параметры тоже. Не влияет! :-( Во время этого удаления загрузка CPU 99% postmaster-ом, дисковая активность никакая (35КВ/сек). Удаляю вроде б как надо, один раз $d->begin_work;$h->prepare, в цикле $h->execute с параметрами, после цикла $d->commit. Так же пробовал, в пределах одной транзакции: одним запросом удаляем все записи на этого пользователя, потом добавляем все те, которые удалять не надо было. Но не помогает.... Подскажите, плиз, что не так?! :-(((
да! общий список файлов лежит в одной таблице (есть ещё десяток других, но они уже с другими данными), то есть табличка на 250.000-350.000 записей(9 столбцов). Многовато, но в документации обещали 1млн запросто! %-(
p.s. Индексов, конечно же, никаких нет! :-(p.p.s. ОЗУ тоже хватает, своппнга не происходит!
> Причём добавляется всё практически мгновенно, выборка тоже, а вот с
> UPDATE (аттрибут erased делаем true) ЖУТЧАЙШИЕ тормоза.Попробуй VACUUM ANALYZE из crontab раз в час и VACUUM FULL раз в день в самое ненагруженное время.
> 250.000-350.000 записей (9 столбцов)
Какая структура таблицы, varchar и text есть ? Какая интенсивность добавления данных, попробуй прекратить INSERT'ы и удалить что-нибудь одним запросом без begin/commit, на спящей базе.
И самое гравное, для ключа который фигурирует в условии DELETE, есть индекс ? Если нет, то добавь, иначе он у тебя перебирает все записи в базе на каждое удаление.
VACUUM ANALYZE и VACUUM FULL совсем не помогали ни грамма, а вот INDEX - это именно оно! Миллионы спасибов от тёмного, считавшего, что индексы ускоряют только SELECT-ы, а всё остальное гарантированно тормозят! %-(