Одна хитрость, которую вы, возможно, еще не видели, - это использовать "top -c" для просмотра вашей системы. С помощью этого параметра вы можете видеть, что на самом деле делает каждый активный процесс Postgres.
Планы запросов никак не кэшируются в базе данных за пределами подготовленных операторов. В любом случае, если вы не используете многократно повторяющиеся подобные запросы, вряд ли вы сможете сократить время запроса, используя подготовленные операторы. Вы можете даже усугубить ситуацию, если в результате у оптимизатора будет меньше информации для работы, потому что он готовит вещи до того, как узнает всю информацию о том, что он собирается делать. 1000 символов - это далеко не коренастый запрос, и если у вас нет сотен соединений одновременно, то очень маловероятно, что анализ или планирование запроса - ваша проблема здесь. Это, вероятно, проблемы с блокировкой, плохие процедуры VACUUM, приводящие к раздутым данным, которые необходимо искать для выполнения любой работы (действительно легко встретить в 8.1), медленные ограничения, чрезмерные индексы или дизайн, который не учитывает накладные расходы на перемещение объектов. вокруг памяти полностью. Затраты на запросы очень низки в списке подозреваемых.
И если у вас есть сотни соединений, вы должны рассмотреть возможность использования пула соединений. Создание процессов в PostgreSQL довольно трудоемко, и в этой среде оно не работает само по себе.
Стреляй, у тебя такая старая версия даже 8.1, что может быть ошибка; 8.1.4 их полно. 8.1.19 является текущей, и даже 8.3.5 уже несколько полезных обновлений версий за текущей). См. Политика управления версиями , чтобы узнать, почему запуск более старой версии представляет собой больший риск, чем обновление почти в каждой ситуации.