como otimizar postgresql81 para uma consulta de abraço, mas não complicada?

2

Eu tenho uma consulta cuja execução leva 15s no servidor. o servidor é o bi-xeon 5130 (2GHz) com 2GB de RAM e 160GB de hardrive scsi em RAID. O banco de dados é o PostgreSQL 8.1 no Debian 4 etch.

Esta consulta é executada por um ERP (openerp), portanto não posso alterá-lo ou modificá-lo. Eu posso testá-lo como eu quero, eu posso reproduzir o longo tempo que eu quiser, eu entendi no arquivo de log e reproduzir o caso em pgadmin.

Copie / cole em um arquivo txt, a consulta simples precisa de 170Kb para ser armazenada (apenas a consulta de texto).

Durante a execução, o linux (pela linha de comando 'top') me diz que os postgres usam 99-100% da CPU, mas apenas 6% da RAM.

Então, como posso aumentar o desempenho de postgres para ganhar tempo nesta execução de consulta. um parâmetro em algum lugar? em Postgres? no linux?

A consulta é assim:

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;

[substitua o XXX por uma lista de 20000 id! ]

sim, essa é uma consulta de monstro, mas não complicada, muito simples, de fato.

obrigado pela ajuda. eu procuro por um longo tempo (2 semanas já ...)

    
por Michael REMY 20.07.2011 / 09:54

1 resposta

0

Existem vários passos a seguir:

  • Otimize a configuração do PostgreSQL para que ele use a quantidade correta de recursos do sistema (consulte este artigo I escrevi para um empregador anterior para o meu conjunto completo de dicas sobre esta frente);
  • Você precisa otimizar o esquema do banco de dados - especificamente, os índices nele - para que o banco de dados seja executado da forma mais eficiente possível. Para isso, veja este artigo sobre ajuste de consulta escrito por um colega meu no referido trabalho anterior. Abrange o MySQL e o PostgreSQL, mas apenas os bits relevantes devem levá-lo ao caminho da solução final.
por 23.07.2011 / 03:47