У меня есть запрос, выполнение которого на сервере занимает 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 недели ...)
Здесь нужно предпринять ряд шагов: