Size: a a a

pgsql – PostgreSQL

2020 August 20

N

Nikolay in pgsql – PostgreSQL
Kosta
Может все же будет у вас время глянуть.
Партиции пока подкинуть не удалось. Уменьшил кол-во вхождений в запросе IN, меньше уже сатанисты не дают.
В итоге получаю около 6.5 минут на запрос. Но с таким хаком: создал временную таблицу:
create temp table csco_idesind_2008_2020 as
select gvkey, datadate, datafmt from csco_idesind where datadate BETWEEN '2008-01-01 00:00:00' AND '2020-07-01 00:00:00' order by datadate;


Запрос в итоге таков:

ex
plain analyze SELECT k.gvkey, k.datadate, i.valuei, i.item, i.effdate, i.thrudate, k.datafmt
   FROM csco_ifndq AS i
   JOIN csco_idesind_2008_2020 AS k ON k.coifnd_id = i.coifnd_id
   WHERE k.gvkey IN (...500)
              AND
              k.datadate BETWEEN '2013-10-01 00:00:00' AND '2015-09-01 00:00:00'

и выхлоп анализатора:

Merge Join  (cost=62421496.84..4363959802.57 rows=286713043089 width=80) (actual time=359989.974..388725.779 rows=16478093 loops=1)
  Merge Cond: (k.coifnd_id = i.coifnd_id)
  ->  Sort  (cost=372058.39..372484.13 rows=170296 width=58) (actual time=16753.887..16763.030 rows=68442 loops=1)
        Sort Key: k.coifnd_id
        Sort Method: quicksort  Memory: 8420kB
        ->  Bitmap Heap Scan on csco_idesind_2008_2020 k  (cost=4748.49..357261.64 rows=170296 width=58) (actual time=995.278..16737.223 rows=68442 loops=1)
              Recheck Cond: ((datadate >= '2013-10-01 00:00:00'::timestamp without time zone) AND (datadate <= '2015-09-01 00:00:00'::timestamp without time zone))
              Filter: (gvkey = ANY ('{...500}'::integer[]))
              Rows Removed by Filter: 5502370
              Heap Blocks: exact=35703
              ->  Bitmap Index Scan on csco_idesind_2008_2020_datadate_gvkey_idx  (cost=0.00..4705.91 rows=184935 width=0) (actual time=769.804..769.805 rows=5570812 loops=1)
                    Index Cond: ((datadate >= '2013-10-01 00:00:00'::timestamp without time zone) AND (datadate <= '2015-09-01 00:00:00'::timestamp without time zone))
  ->  Materialize  (cost=62049438.45..63733054.29 rows=336723168 width=30) (actual time=232312.818..345640.447 rows=301097183 loops=1)
        ->  Sort  (cost=62049438.45..62891246.37 rows=336723168 width=30) (actual time=232312.813..315589.341 rows=285480123 loops=1)
              Sort Key: i.coifnd_id
              Sort Method: external merge  Disk: 14937712kB
              ->  Seq Scan on csco_ifndq i  (cost=0.00..6301306.68 rows=336723168 width=30) (actual time=0.852..114092.114 rows=336723160 loops=1)
Planning Time: 0.364 ms
JIT:
  Functions: 15
  Options: Inlining true, Optimization true, Expressions true, Deforming true
  Timing: Generation 1.436 ms, Inlining 8.045 ms, Optimization 130.210 ms, Emission 64.295 ms, Total 203.985 ms
Execution Time: 389780.055 ms
ок гляну через полчаса, на звонке сейчас
источник

K

Kosta in pgsql – PostgreSQL
Nikolay
ок гляну через полчаса, на звонке сейчас
мерси
источник

LK

Leonid Korsakov in pgsql – PostgreSQL
Всем привет. Подскажите пожалуйста есть ли готовые скрипты под ансибл/папет по разворачиванию кластера postgres чтоб с баунсером сразу?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Nikolay
см тут, как раз оно определяет, до каких пор трансформация присходит

если очень много джойнов -- там уже сумрак и geqo 🙂
Насколько я помню, с geqo при стандартных настройках Вы вообще не столкнётесь (потому что *_collapse_limit по умолчанию меньше, чем geqo_threshold), кстати.
источник

s

suchimauz in pgsql – PostgreSQL
Kosta
Может все же будет у вас время глянуть.
Партиции пока подкинуть не удалось. Уменьшил кол-во вхождений в запросе IN, меньше уже сатанисты не дают.
В итоге получаю около 6.5 минут на запрос. Но с таким хаком: создал временную таблицу:
create temp table csco_idesind_2008_2020 as
select gvkey, datadate, datafmt from csco_idesind where datadate BETWEEN '2008-01-01 00:00:00' AND '2020-07-01 00:00:00' order by datadate;


Запрос в итоге таков:

ex
plain analyze SELECT k.gvkey, k.datadate, i.valuei, i.item, i.effdate, i.thrudate, k.datafmt
   FROM csco_ifndq AS i
   JOIN csco_idesind_2008_2020 AS k ON k.coifnd_id = i.coifnd_id
   WHERE k.gvkey IN (...500)
              AND
              k.datadate BETWEEN '2013-10-01 00:00:00' AND '2015-09-01 00:00:00'

и выхлоп анализатора:

Merge Join  (cost=62421496.84..4363959802.57 rows=286713043089 width=80) (actual time=359989.974..388725.779 rows=16478093 loops=1)
  Merge Cond: (k.coifnd_id = i.coifnd_id)
  ->  Sort  (cost=372058.39..372484.13 rows=170296 width=58) (actual time=16753.887..16763.030 rows=68442 loops=1)
        Sort Key: k.coifnd_id
        Sort Method: quicksort  Memory: 8420kB
        ->  Bitmap Heap Scan on csco_idesind_2008_2020 k  (cost=4748.49..357261.64 rows=170296 width=58) (actual time=995.278..16737.223 rows=68442 loops=1)
              Recheck Cond: ((datadate >= '2013-10-01 00:00:00'::timestamp without time zone) AND (datadate <= '2015-09-01 00:00:00'::timestamp without time zone))
              Filter: (gvkey = ANY ('{...500}'::integer[]))
              Rows Removed by Filter: 5502370
              Heap Blocks: exact=35703
              ->  Bitmap Index Scan on csco_idesind_2008_2020_datadate_gvkey_idx  (cost=0.00..4705.91 rows=184935 width=0) (actual time=769.804..769.805 rows=5570812 loops=1)
                    Index Cond: ((datadate >= '2013-10-01 00:00:00'::timestamp without time zone) AND (datadate <= '2015-09-01 00:00:00'::timestamp without time zone))
  ->  Materialize  (cost=62049438.45..63733054.29 rows=336723168 width=30) (actual time=232312.818..345640.447 rows=301097183 loops=1)
        ->  Sort  (cost=62049438.45..62891246.37 rows=336723168 width=30) (actual time=232312.813..315589.341 rows=285480123 loops=1)
              Sort Key: i.coifnd_id
              Sort Method: external merge  Disk: 14937712kB
              ->  Seq Scan on csco_ifndq i  (cost=0.00..6301306.68 rows=336723168 width=30) (actual time=0.852..114092.114 rows=336723160 loops=1)
Planning Time: 0.364 ms
JIT:
  Functions: 15
  Options: Inlining true, Optimization true, Expressions true, Deforming true
  Timing: Generation 1.436 ms, Inlining 8.045 ms, Optimization 130.210 ms, Emission 64.295 ms, Total 203.985 ms
Execution Time: 389780.055 ms
coifnd_id btree индекс есть?
источник

L

LA in pgsql – PostgreSQL
Всем привет. Заливаю в UNLOGGED TABLE 150 млн строк через COPY кусками по 10к строк, с небольшой предобработкой на это уходит 12-15 часов 😵

Как бы мне ускорить этот процесс?

Мой postgres.conf вот тут (брал за основу конфиг Data Warehouse с https://pgtune.leopard.in.ua/):
https://pastebin.com/68gi1mL8
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
suchimauz
Вот,  меня сейчас Николай в ступор ввел) я от реального опыта отталкиваюсь, на постгре 11.5.4 и 12.1.1, так был вот такой реальный пример по миллионам записей, посеръезней чем то, что написано выше, так exists там куда лучше был чем вариант с left join, в том случае не было варианта без seq scan, с not exists он по btree мог гулять
Настоящие примеры стоит смотреть (может, там запрос просто был криво написан / преобразован, да и всё).
источник

s

suchimauz in pgsql – PostgreSQL
Может быть, сейчас уже не вспомню запрос, редко такая задача встает
источник

K

Kosta in pgsql – PostgreSQL
suchimauz
coifnd_id btree индекс есть?
да
Column   |            Type             | Collation | Nullable | Default | Storage  | Stats target | Description
-----------+-----------------------------+-----------+----------+---------+----------+--------------+-------------
gvkey     | integer                     |           | not null |         | plain    |              |
datadate  | timestamp without time zone |           | not null |         | plain    |              |
indfmt    | character varying(12)       |           | not null |         | extended |              |
consol    | character varying(2)        |           | not null |         | extended |              |
popsrc    | character varying(1)        |           | not null |         | extended |              |
fyr       | smallint                    |           | not null |         | plain    |              |
datafmt   | character varying(12)       |           | not null |         | extended |              |
effdate   | timestamp without time zone |           | not null |         | plain    |              |
item      | character varying(20)       |           | not null |         | extended |              |
coifnd_id | integer                     |           |          |         | plain    |              |
rst_type  | character varying(1)        |           |          |         | extended |              |
thrudate  | timestamp without time zone |           |          |         | plain    |              |
valued    | character varying(20)       |           |          |         | extended |              |
Indexes:
   "pk_csco_idesind" PRIMARY KEY, btree (gvkey, datadate, indfmt, consol, fyr, popsrc, datafmt, effdate, item)
   "csco_idesind_gvkey_idx" btree (gvkey)
   "datadate_gvkey" btree (datadate, gvkey) WHERE datadate >= '2008-01-01 00:00:00'::timestamp without time zone AND datadate <= '2020-07-01 00:00:00'::timestamp without time zone
Access method: heap
источник

2_

2flower _ in pgsql – PostgreSQL
Kosta
Может все же будет у вас время глянуть.
Партиции пока подкинуть не удалось. Уменьшил кол-во вхождений в запросе IN, меньше уже сатанисты не дают.
В итоге получаю около 6.5 минут на запрос. Но с таким хаком: создал временную таблицу:
create temp table csco_idesind_2008_2020 as
select gvkey, datadate, datafmt from csco_idesind where datadate BETWEEN '2008-01-01 00:00:00' AND '2020-07-01 00:00:00' order by datadate;


Запрос в итоге таков:

ex
plain analyze SELECT k.gvkey, k.datadate, i.valuei, i.item, i.effdate, i.thrudate, k.datafmt
   FROM csco_ifndq AS i
   JOIN csco_idesind_2008_2020 AS k ON k.coifnd_id = i.coifnd_id
   WHERE k.gvkey IN (...500)
              AND
              k.datadate BETWEEN '2013-10-01 00:00:00' AND '2015-09-01 00:00:00'

и выхлоп анализатора:

Merge Join  (cost=62421496.84..4363959802.57 rows=286713043089 width=80) (actual time=359989.974..388725.779 rows=16478093 loops=1)
  Merge Cond: (k.coifnd_id = i.coifnd_id)
  ->  Sort  (cost=372058.39..372484.13 rows=170296 width=58) (actual time=16753.887..16763.030 rows=68442 loops=1)
        Sort Key: k.coifnd_id
        Sort Method: quicksort  Memory: 8420kB
        ->  Bitmap Heap Scan on csco_idesind_2008_2020 k  (cost=4748.49..357261.64 rows=170296 width=58) (actual time=995.278..16737.223 rows=68442 loops=1)
              Recheck Cond: ((datadate >= '2013-10-01 00:00:00'::timestamp without time zone) AND (datadate <= '2015-09-01 00:00:00'::timestamp without time zone))
              Filter: (gvkey = ANY ('{...500}'::integer[]))
              Rows Removed by Filter: 5502370
              Heap Blocks: exact=35703
              ->  Bitmap Index Scan on csco_idesind_2008_2020_datadate_gvkey_idx  (cost=0.00..4705.91 rows=184935 width=0) (actual time=769.804..769.805 rows=5570812 loops=1)
                    Index Cond: ((datadate >= '2013-10-01 00:00:00'::timestamp without time zone) AND (datadate <= '2015-09-01 00:00:00'::timestamp without time zone))
  ->  Materialize  (cost=62049438.45..63733054.29 rows=336723168 width=30) (actual time=232312.818..345640.447 rows=301097183 loops=1)
        ->  Sort  (cost=62049438.45..62891246.37 rows=336723168 width=30) (actual time=232312.813..315589.341 rows=285480123 loops=1)
              Sort Key: i.coifnd_id
              Sort Method: external merge  Disk: 14937712kB
              ->  Seq Scan on csco_ifndq i  (cost=0.00..6301306.68 rows=336723168 width=30) (actual time=0.852..114092.114 rows=336723160 loops=1)
Planning Time: 0.364 ms
JIT:
  Functions: 15
  Options: Inlining true, Optimization true, Expressions true, Deforming true
  Timing: Generation 1.436 ms, Inlining 8.045 ms, Optimization 130.210 ms, Emission 64.295 ms, Total 203.985 ms
Execution Time: 389780.055 ms
а вот это больно
Sort Method: external merge  Disk: 14937712kB
источник

s

suchimauz in pgsql – PostgreSQL
2flower _
а вот это больно
Sort Method: external merge  Disk: 14937712kB
И я про это же
источник

s

suchimauz in pgsql – PostgreSQL
Kosta
да
Column   |            Type             | Collation | Nullable | Default | Storage  | Stats target | Description
-----------+-----------------------------+-----------+----------+---------+----------+--------------+-------------
gvkey     | integer                     |           | not null |         | plain    |              |
datadate  | timestamp without time zone |           | not null |         | plain    |              |
indfmt    | character varying(12)       |           | not null |         | extended |              |
consol    | character varying(2)        |           | not null |         | extended |              |
popsrc    | character varying(1)        |           | not null |         | extended |              |
fyr       | smallint                    |           | not null |         | plain    |              |
datafmt   | character varying(12)       |           | not null |         | extended |              |
effdate   | timestamp without time zone |           | not null |         | plain    |              |
item      | character varying(20)       |           | not null |         | extended |              |
coifnd_id | integer                     |           |          |         | plain    |              |
rst_type  | character varying(1)        |           |          |         | extended |              |
thrudate  | timestamp without time zone |           |          |         | plain    |              |
valued    | character varying(20)       |           |          |         | extended |              |
Indexes:
   "pk_csco_idesind" PRIMARY KEY, btree (gvkey, datadate, indfmt, consol, fyr, popsrc, datafmt, effdate, item)
   "csco_idesind_gvkey_idx" btree (gvkey)
   "datadate_gvkey" btree (datadate, gvkey) WHERE datadate >= '2008-01-01 00:00:00'::timestamp without time zone AND datadate <= '2020-07-01 00:00:00'::timestamp without time zone
Access method: heap
Я мб слепой, но где
источник

K

Kosta in pgsql – PostgreSQL
Это у меня уже каша
источник

2_

2flower _ in pgsql – PostgreSQL
вот это pk
источник

s

suchimauz in pgsql – PostgreSQL
2flower _
вот это pk
+++)
источник

s

suchimauz in pgsql – PostgreSQL
Но btree я так и не вижу
источник

K

Kosta in pgsql – PostgreSQL
Да, его нет. pk достался в наследство, это копия куска внешней бд, так пришло.
источник

s

suchimauz in pgsql – PostgreSQL
create index if not exists csco_ifndq_coifn_id__btree ON csco_ifndq using btree (coifn_id)
источник

s

suchimauz in pgsql – PostgreSQL
Можно без using btree
источник

2_

2flower _ in pgsql – PostgreSQL
там уже вся таблица на индексы растащена. :)
источник