Интересно кто как оптимизирует свои базы ? Например, я знаю про необходимость частых VACUUM и выгоду от создания INDEX, но у каждого свои секреты и тонкости, может поделимся опытом друг с другом ?Например, давно подметил, что вместо вложенных SELECT .... WHERE IN (SELECT ...) и JOIN лучше использовать конструкцию WHERE EXISTS (SELECT...) и ... JOIN tab USING вместо JOIN tab ON, производительность запроса на порядок выше.
Предлагаю также обсудить проблему борьбы с deadlock в PostgreSQL которая уже мной раньше поднималась в одним из форумов https://www.opennet.ru/openforum/vsluhforumID3/1121.html
--------
Интересно почему в PostgreSQL (7.2.3 FreeBSD 4.7 SMP) постоянно возникают deadlock. Причем для простейших таблиц (5 int полей с int ключем, 60 записей) с достаточно интенсивным UPDATE (примерно от 5 раз в минуту до 3 раз в сек.)- dead lock выскакивают регулярно, несмотря на ежедневный VACUUM ANALYZE и еженедельный VACUUM FULL базы. Запросы простейшие, даже транзакций нет. Просто постоянные SELECT и UPDATE, гораздо реже INSERT.
Раньше грешил на транзакции, dead lock вываливались на совершенно других базах, порядок следования доступа к таблицам был одинаковым.
>Скорее всего у Вас алгоритм работы программы не проработан.
Я тоже так думал, пока deadlock не стали вылазить на ровном месте и на самой простейшей таблице при апдейте без транзакции. Есть скрпипт который выполняет SELECT/UPDATE||INSERT, скрипт запускается хаотично, вполне вероятна ситуация одновременного запуска. Но по идее PostgreSQL отлично справляется с этой ситауцией, мне кажется , что из-за SMP два управляющих фронтэнда PostgreSQL (при запуске на 2-процессорной системе) не разбирают ситуацию блокировки при одновременном запросе к обоим фронтэндам.
Про порядок следования операций с таблицами в пределах транзакции я в курсе, про тонкости описанные в LOCK-мануале тоже.
--------