From: | Oleg Bartunov <obartunov(at)gmail(dot)com> |
---|---|
To: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Re: [pgsql-ru-general] GIN индекс - можно ли избавиться от Recheck? |
Date: | 2016-05-10 08:36:03 |
Message-ID: | CAF4Au4z5xDetA40jJqo9o3gecMTFQFY9RMCUL7odeGkUUiWWHg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
2016-05-10 10:17 GMT+03:00 Dmitry E. Oboukhov <unera(at)debian(dot)org>:
>>>> EXPLAIN ANALYZE SELECT * FROM test WHERE tags @> ARRAY['abc', 'cde']::TEXT[];
>>> QUERY PLAN
>>> -------------------------------------------------------------------------------------------------------------------------------------
>>> Bitmap Heap Scan on test (cost=17511.01..131825.49 rows=1668518 width=41) (actual time=286.438..519.681 rows=1109868 loops=1)
>>> Recheck Cond: (tags @> '{abc,cde}'::text[])
>>> Heap Blocks: exact=93458
> ->>> Bitmap Index Scan on test_idx (cost=0.00..17093.88 rows=1668518 width=0) (actual time=271.244..271.244 rows=1109868 loops=1)
>>> Index Cond: (tags @> '{abc,cde}'::text[])
>>> Planning time: 0.665 ms
>>> Execution time: 552.225 ms
>>> (7 строк)
>>>
>>> В документации написано что Gin использует Recheck только когда
>>> используются веса, но тут никакие веса не используются.
>>> На recheck он потратил столько же времени сколько на выборку.
>>>
>>> можно ли от этого избавиться?
>
>> Recheck связан с bitmap-ом здесь. Analyzе всегда выдает recheck и надо
>> смотреть на строчку Heap Blocks: ...... В ваше случае recheck-а
>> реально не было, видно work_mem у вас приличного размера, так что
>> особенно оптимизировать нечего. А вот если у вас будет в этой строке
>> написано lossy=..., то тут и будет речек.
>
> эм я тогда не очень понимаю EXPLAIN.
> он пишет что индекс скан у него закончился на 271 милисекунде.
> а потом речек и битмап скан. который закончился на 519 милисекунде.
вы не обратили внимание, что bitmap heap scan - оставшееся время он
дергал табличку (heap).
>
> если бы речек был то у него свое время было бы прописано?
> так?
нет, просто было бы написано примерно так (см. lossy=)
explain analyze select count(*) from pgin where fts @@
to_tsquery('russian','tom & lane');
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=112493.60..112493.61 rows=1 width=8) (actual
time=7971.988..7971.988 rows=1 loops=1)
-> Bitmap Heap Scan on pgin (cost=536.29..112359.32 rows=53714
width=0) (actual time=81.647..7941.289 rows=214852 loops=1)
Recheck Cond: (fts @@ '''tom'' & ''lane'''::tsquery)
Rows Removed by Index Recheck: 213757
Heap Blocks: exact=51700 lossy=52901
-> Bitmap Index Scan on pgin_rum_fts_idx (cost=0.00..522.86
rows=53714 width=0) (actual time=70.485..70.485 rows=214852 loops=1)
Index Cond: (fts @@ '''tom'' & ''lane'''::tsquery)
Planning time: 0.239 ms
Execution time: 7972.052 ms
(9 rows)
увеличиваем work_mem
set work_mem to '128MB';
и речек собственно пропадает
explain analyze select count(*) from pgin where fts @@
to_tsquery('russian','tom & lane');
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=112493.60..112493.61 rows=1 width=8) (actual
time=477.556..477.556 rows=1 loops=1)
-> Bitmap Heap Scan on pgin (cost=536.29..112359.32 rows=53714
width=0) (actual time=109.852..461.347 rows=214852 loops=1)
Recheck Cond: (fts @@ '''tom'' & ''lane'''::tsquery)
Heap Blocks: exact=104601
-> Bitmap Index Scan on pgin_rum_fts_idx (cost=0.00..522.86
rows=53714 width=0) (actual time=73.993..73.993 rows=214852 loops=1)
Index Cond: (fts @@ '''tom'' & ''lane'''::tsquery)
Planning time: 0.348 ms
Execution time: 477.720 ms
(8 rows)
> --
>
> . ''`. Dmitry E. Oboukhov
> : :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
> `. `~’ GPGKey: 1024D / F8E26537 2006-11-21
> `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEAREDAAYFAlcxivwACgkQq4wAz/jiZTcQjACdEOln1cWzN5dvb/v3d5KlGm70
> Wb8Ani7oanxjwR8lyOhLra+hh6Ue9PzM
> =k0Xg
> -----END PGP SIGNATURE-----
>
From | Date | Subject | |
---|---|---|---|
Next Message | Teodor Sigaev | 2016-05-10 09:02:54 | Re: [pgsql-ru-general] GIN индекс - веса |
Previous Message | Dmitry E. Oboukhov | 2016-05-10 07:17:16 | Re: Re: [pgsql-ru-general] GIN индекс - можно ли избавиться от Recheck? |