sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql sekventiell skanning långsam prestanda på 500 miljoner rader

Det finns bara några få saker som hjälper med den här frågan:

  • Den faktiska skanningen verkar inte vara problemet (det tog 42 sekunder), men om tabellen kunde hållas i RAM-minne kan det gå snabbare.

  • Ditt största problem är den sorten som PostgreSQL redan parallelliserar.

    Det finns några saker du kan ställa in:

    • Öka work_mem så mycket som möjligt, vilket kommer att göra sorteringen snabbare.

    • Öka max_worker_processes (detta kräver en omstart), max_parallel_workers och max_parallel_workers_per_gather så att fler kärnor kan användas för frågan.

      PostgreSQL har en intern logik för att beräkna det maximala antalet parallella arbetare som den är redo att använda för en tabell:den kommer att överväga lika många parallella arbetare som

      log3 (tabellstorlek / min_parallel_table_scan_size )

      Du kan tvinga den att använda fler processer än så med:

      ALTER TABLE ohlcv SET (parallel_workers = 20);
      

      Men max_parallel_workers fortfarande är den övre gränsen.

Om det inte finns några raderingar och uppdateringar i tabellen, och data infogas i sorteringsordning, kan du komma undan med att bara utelämna ORDER BY klausul, förutsatt att du ställer in synchronize_seqscans =off .




  1. Klona en SQLite-databas

  2. Ny data kvarstår inte i Rails-arraykolumnen på Postgres

  3. Finns det ett sätt att indexera i postgres för snabba delsträngsökningar

  4. ) Operatör för nybörjare