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_memså mycket som möjligt, vilket kommer att göra sorteringen snabbare. -
Öka
max_worker_processes(detta kräver en omstart),max_parallel_workersochmax_parallel_workers_per_gatherså 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_workersfortfarande ä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 .