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
ochmax_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 synchronize_seqscans =off
.