PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql последователното сканиране забавя производителността на 500 милиона реда

Има само няколко неща, които ще помогнат с тази заявка:

  • Действителното сканиране изглежда не е проблемът (отне 42 секунди), но ако таблицата можеше да се запази в RAM, може да е по-бързо.

  • Вашият основен проблем е сортирането, което PostgreSQL вече паралелизира.

    Има няколко неща, които можете да настроите:

    • Увеличете work_mem колкото е възможно повече, което ще направи сортирането по-бързо.

    • Увеличете max_worker_processes (това ще изисква рестартиране), max_parallel_workers и max_parallel_workers_per_gather така че повече ядра да могат да се използват за заявката.

      PostgreSQL има вътрешна логика за изчисляване на максималния брой паралелни работници, които е готов да използва за таблица:той ще вземе предвид колкото се може повече паралелни работници

      дневник3 (размер на таблицата / min_parallel_table_scan_size )

      Можете да го принудите да използва повече процеси от това с:

      ALTER TABLE ohlcv SET (parallel_workers = 20);
      

      Но max_parallel_workers все още е горната граница.

Ако в таблицата няма изтривания и актуализации и данните се вмъкват в ред на сортиране, можете да се разминете просто с пропускането на ORDER BY клауза, при условие че сте задали synchronize_seqscans = off .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблем с регулярния израз на Postgres

  2. Къде са регистрационните файлове на PostgreSQL в macOS?

  3. Създайте таблица от два типа в PostgreSQL

  4. Работа с Unicode последователности в postgresql

  5. NodeJS–Добавяне на масив от низове в заявката на PostgreSQL