Size: a a a

pgsql – PostgreSQL

2020 May 28

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Два bitmap index скана вместо одного
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
С дорогим ilike
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Anton Glushakov
Не даёт.. Составной с 11 версии вроде.. И не уверен что можно комбинировать btree и gin
Вышли план)
источник

AG

Anton Glushakov in pgsql – PostgreSQL
"Bitmap Heap Scan on table  (cost=536.47..538.49 rows=1 width=1910) (actual time=14897.883..14897.897 rows=2 loops=1)"
"  Recheck Cond: (((key)::text = '4070281000300043883'::text) AND ((comment)::text * '%аренды земельного уч%'::text))"
"  Heap Blocks: exact=2"
"  Buffers: shared hit=6229 read=5464"
"  ->  BitmapAnd  (cost=536.47..536.47 rows=1 width=0) (actual time=14897.835..14897.836 rows=0 loops=1)"
"        Buffers: shared hit=6227 read=5464"
"        ->  Bitmap Index Scan on idx_key  (cost=0.00..12.22 rows=488 width=0) (actual time=0.092..0.092 rows=409 loops=1)"
"              Index Cond: ((key)::text = '4070281000300043883'::text)"
"              Buffers: shared hit=7"
"        ->  Bitmap Index Scan on trgm_idx  (cost=0.00..524.00 rows=1067 width=0) (actual time=14897.726..14897.726 rows=2 loops=1)"
"              Index Cond: ((comment)::text * '%аренды земельного уч%'::text)"
"              Buffers: shared hit=6220 read=5464"
"Planning time: 1.184 ms"
"Execution time: 14898.081 ms"
источник

AG

Anton Glushakov in pgsql – PostgreSQL
С теста
источник

AG

Anton Glushakov in pgsql – PostgreSQL
На проде все подольше)
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Виталий Кухарик
Можно btree_gin_ops или как его.. В доку в общем.
CREATE EXTENSION IF NOT EXISTS btree_gin
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Anton Glushakov
"Bitmap Heap Scan on table  (cost=536.47..538.49 rows=1 width=1910) (actual time=14897.883..14897.897 rows=2 loops=1)"
"  Recheck Cond: (((key)::text = '4070281000300043883'::text) AND ((comment)::text * '%аренды земельного уч%'::text))"
"  Heap Blocks: exact=2"
"  Buffers: shared hit=6229 read=5464"
"  ->  BitmapAnd  (cost=536.47..536.47 rows=1 width=0) (actual time=14897.835..14897.836 rows=0 loops=1)"
"        Buffers: shared hit=6227 read=5464"
"        ->  Bitmap Index Scan on idx_key  (cost=0.00..12.22 rows=488 width=0) (actual time=0.092..0.092 rows=409 loops=1)"
"              Index Cond: ((key)::text = '4070281000300043883'::text)"
"              Buffers: shared hit=7"
"        ->  Bitmap Index Scan on trgm_idx  (cost=0.00..524.00 rows=1067 width=0) (actual time=14897.726..14897.726 rows=2 loops=1)"
"              Index Cond: ((comment)::text * '%аренды земельного уч%'::text)"
"              Buffers: shared hit=6220 read=5464"
"Planning time: 1.184 ms"
"Execution time: 14898.081 ms"
а включите track_io_timing, сделайте SELECT pg_reload_conf() и покахите EXPLAIN (analyze, buffers)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
меня смущает вот это вот:
actual time=14897.726..14897.726
Buffers: shared hit=6220 read=5464

44MB прочитали с диска. и это заняло 2.5 минуты. какая у вас дисковая?
источник

AG

Anton Glushakov in pgsql – PostgreSQL
Victor Yegorov
а включите track_io_timing, сделайте SELECT pg_reload_conf() и покахите EXPLAIN (analyze, buffers)
Уже не сегодня. Я делал, большая часть времени запроса на дисках, и это логично
источник

VY

Victor Yegorov in pgsql – PostgreSQL
сколько RAM, сколько shared_buffers?
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Anton Glushakov
Уже не сегодня. Я делал, большая часть времени запроса на дисках, и это логично
Это плохо, лечите
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Хмм... а кто-нибудь знает, что вот это такое (что за оператор):
((comment)::text * '%аренды земельного уч%'::text)

Это же не ILIKE, нет? Или это какие-то проблемы с копированием планов (иначе откуда там кавычки вокруг)?
источник

AG

Anton Glushakov in pgsql – PostgreSQL
Victor Yegorov
меня смущает вот это вот:
actual time=14897.726..14897.726
Buffers: shared hit=6220 read=5464

44MB прочитали с диска. и это заняло 2.5 минуты. какая у вас дисковая?
Я там много странного видел. Например чтобы извлечь из gin 400 строк - читалось около 1 млн буферов
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Bloat?
источник

AG

Anton Glushakov in pgsql – PostgreSQL
Скорее всего. Но не настолько же)
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
2 строки всего по comment, так и хочется CTE по key
источник

T

The in pgsql – PostgreSQL
Павел П.
А если реплика синхронная?
Да и с асинхронной так и не уложу в голове где потеря данных если отставание минимальное.
Реакция внешнего инструмента кластеризации на самоизоляцию далеко не мгновенная.
Тем более, мастер коммитит в clog независимо от slaves даже при синхронной реплике.
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Но здесь нужен индекс по двум полям
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Anton Glushakov
Я там много странного видел. Например чтобы извлечь из gin 400 строк - читалось около 1 млн буферов
Это, как раз, бывает — ищутся же триграммы, а не непосредственно то, что видно в условии (т.е. false positives может быть хоть половина индекса).

> Если просто удалить\отключить GIN индекс, то ПГ просто отбирает

Интересно, как выглядит и вот этот план.
источник