sql >> Databáze >  >> RDS >> PostgreSQL

Výkon se nezvýšil ani se zvětšila velikost work_mem

Zdá se, že zvýšením work_mem bylo řazení asi 8krát rychlejší:(172639.670 - 169311.063) / (167975.549 - 167570.669) . Ale protože řazení zabralo jen malý zlomek celkového času provádění, ani 1000krát rychlejší nemůže věci celkově zlepšit. Je to seq scan, který zabírá čas.

Většinu času v seq skenování pravděpodobně strávíte na IO. Můžete to vidět spuštěním EXPLAIN (ANALYZE, BUFFERS) po zapnutí track_io_timing.

Paralelizace sekvenčního skenování také často není příliš užitečná, protože IO systém je obvykle schopen dodat svou plnou kapacitu jedné čtečce kvůli kouzlu předčítání. A někdy si paralelní čtenáři mohou dokonce navzájem šlápnout na prsty, což celé představení zhoršuje. Paralelizaci můžete zakázat pomocí set max_parallel_workers_per_gather TO 0; To by mohlo věci urychlit, a pokud ne, alespoň to usnadní pochopení plánu VYSVĚTLIT.

Načítáte více než 3 % tabulky:193963 / (193963 + 6041677) . Indexy nemusí být příliš užitečné, když toho načítáte tolik. Pokud mají být, chtěli byste kombinovaný index, ne jednotlivé. Takže byste chtěli index na (client, event_name, date(datetime)) . Pak byste také museli změnit dotaz tak, aby používal date(datetime) místo to_char(datetime, 'YYYY-MM-DD') . Tuto změnu musíte provést, protože to_char není neměnný, a proto jej nelze indexovat.



  1. Python nemůže najít ovladač ODBC na Heroku po nastavení všeho

  2. Převod IP na Long v MySQL

  3. Oracle exportuje SQL struktury databáze

  4. Jak rozdělit data z jednoho sloupce do tří sloupců v jiné tabulce? SQL