PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Verificação sequencial do Postgresql diminui o desempenho em 500 milhões de linhas


Existem apenas algumas coisas que ajudarão com essa consulta:

  • A varredura real não parece ser o problema (levou 42 segundos), mas se a tabela pudesse ser mantida na RAM, poderia ser mais rápida.

  • Seu principal problema é a ordenação, que o PostgreSQL já paraleliza.

    Existem algumas coisas que você pode ajustar:

    • Aumente work_mem tanto quanto possível, o que tornará a classificação mais rápida.

    • Aumente max_worker_processes (isso exigirá uma reinicialização), max_parallel_workers e max_parallel_workers_per_gather para que mais núcleos possam ser usados ​​para a consulta.

      O PostgreSQL tem uma lógica interna para calcular o número máximo de trabalhadores paralelos que está pronto para usar em uma tabela:considerará tantos trabalhadores paralelos quantos

      log3 (tamanho da tabela / min_parallel_table_scan_size )

      Você pode forçá-lo a usar mais processos do que isso com:
      ALTER TABLE ohlcv SET (parallel_workers = 20);
      

      Mas max_parallel_workers ainda é o limite superior.

Se não houver exclusões e atualizações na tabela e os dados forem inseridos em ordem de classificação, você poderá simplesmente omitir o ORDER BY cláusula, desde que você defina synchronize_seqscans = off .