Назад | Перейти на главную страницу

как оптимизировать postgresql81 для запроса объятия, но не сложного?

У меня есть запрос, выполнение которого на сервере занимает 15 секунд. сервер - bi-xeon 5130 (2 ГГц) с 2 ГБ ОЗУ и 160 ГБ жесткого диска scsi в RAID. База данных - PostgreSQL 8.1 на Debian 4 etch.

Этот запрос выполняется ERP (openerp), поэтому я не могу его изменить или изменить. Я могу тестировать его, как хочу, я могу воспроизводить столько времени, сколько хочу, я записал его в файл журнала и воспроизвел случай в pgadmin.

Скопируйте / вставьте в текстовый файл, для простого запроса требуется 170 КБ (только текстовый запрос).

Во время выполнения linux (с помощью командной строки 'top') сообщает мне, что postgres использует 99-100% ЦП, но только 6% ОЗУ.

Итак, как я могу повысить производительность postgres, чтобы выиграть время при выполнении этого запроса. параметр где-нибудь? в Postgres? в Linux?

Запрос такой:

SELECT
    id
FROM
    sale_order_line
WHERE
    (state IN ('confirmed', 'confirmed_wait', 'manquant'))
    AND
    (id IN (27405, 27399, 16583, 27395, XXX))
ORDER BY 
    id DESC LIMIT 50;

[замените XXX списком из 20000 идентификаторов! ]

да, это чудовищный запрос, но не сложный, на самом деле очень простой.

Спасибо за помощь. ищу долго (уже 2 недели ...)

Здесь нужно предпринять ряд шагов:

  • Оптимизируйте конфигурацию PostgreSQL, чтобы она использовала правильное количество ваших системных ресурсов (см. Эта статья Я написал своему предыдущему работодателю полный набор советов по этому поводу);
  • Вам необходимо оптимизировать схему базы данных - в частности, ее индексы - чтобы база данных работала как можно более эффективно. Для этого см. эта статья о настройке запросов написано моим коллегой по предыдущей работе. Он охватывает как MySQL, так и PostgreSQL, но только соответствующие части должны помочь вам на пути к окончательному решению.