F.58. plantuner
ÐодÑÐ»Ñ plantuner добавлÑÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ñказаний Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика, позволÑÑÑиÑ
оÑклÑÑаÑÑ Ð¸Ð»Ð¸ подклÑÑаÑÑ Ð¾Ð¿ÑеделÑннÑе индекÑÑ Ð¿Ñи вÑполнении запÑоÑа.
F.58.1. ÐбÑÑÑнение
РнекоÑоÑÑÑ ÑлÑÑаÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ ÑпÑавлÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑиком, Ð´Ð°Ð²Ð°Ñ ÐµÐ¼Ñ ÑказаниÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑимизаÑÐ¾Ñ Ð½Ðµ вÑполнÑл некоÑоÑÑе ÑаÑÑи Ñвоего алгоÑиÑма. Ð ÑаÑÑноÑÑи, неÑедко возникаÑÑ ÑиÑÑаÑии, когда ÑазÑабоÑÑик Ñ Ð¾ÑÐµÑ Ð²Ñеменно оÑклÑÑиÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе индекÑÑ, не ÑдалÑÑ Ð¸Ñ , либо наобоÑоÑ, иÑполÑзоваÑÑ Ð¾Ð¿ÑеделÑннÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¿ÑинÑдиÑелÑно.
ÐÑа веÑÑÐ¸Ñ plantuner даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑкÑÑÑÑ Ð¾Ð¿ÑеделÑннÑе индекÑÑ Ð¾Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика Postgres Pro, ÑÑÐ¾Ð±Ñ Ð¾Ð½ иÑ
не иÑполÑзовал. C некоÑоÑой нагÑÑзкой Postgres Pro бÑÐ²Ð°ÐµÑ ÑлиÑком пеÑÑимиÑÑиÑнÑм в оÑноÑении ÑолÑко ÑÑо ÑозданнÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑÑиÑаеÑ, ÑÑо в ниÑ
ÑодеÑжиÑÑÑ Ð³Ð¾Ñаздо болÑÑе ÑÑÑок, Ñем еÑÑÑ Ð½Ð° Ñамом деле. ÐÑли же пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ GUC plantuner.fix_empty_table Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true, plantuner бÑÐ´ÐµÑ Ð¾Ð±Ð½ÑлÑÑÑ ÑиÑло ÑÑÑаниÑ/коÑÑежей в ÑаблиÑе, коÑоÑÐ°Ñ Ð½Ðµ ÑодеÑÐ¶Ð¸Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
блоков в Ñайле.
F.58.2. ÐеÑеменнÑе GUC
plantuner.disable_index â ÑпиÑок индекÑов, коÑоÑÑе не бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик.
plantuner.enable_index â ÑпиÑок индекÑов, коÑоÑÑе бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик, даже еÑли они ÑкÑÑÑÑ Ð¿Ð°ÑамеÑÑом plantuner.disable_index.
F.58.3. ÐÑимеÑ
ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе либо загÑÑзиÑÑ ÑазделÑемÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ plantuner в ÑеанÑе psql, либо ÑказаÑÑ ÐµÑ Ð² паÑамеÑÑе shared_preload_libraries в postgresql.conf.
=# LOAD 'plantuner';
=# create table test(id int);
=# create index id_idx on test(id);
=# create index id_idx2 on test(id);
=# \d test
Table "public.test"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
Indexes:
"id_idx" btree (id)
"id_idx2" btree (id)
=# explain select id from test where id=1;
QUERY PLAN
-----------------------------------------------------------------------
Bitmap Heap Scan on test (cost=4.34..15.03 rows=12 width=4)
Recheck Cond: (id = 1)
-> Bitmap Index Scan on id_idx2 (cost=0.00..4.34 rows=12 width=0)
Index Cond: (id = 1)
(4 rows)
=# set enable_seqscan=off;
=# set plantuner.disable_index='id_idx2';
=# explain select id from test where id=1;
QUERY PLAN
----------------------------------------------------------------------
Bitmap Heap Scan on test (cost=4.34..15.03 rows=12 width=4)
Recheck Cond: (id = 1)
-> Bitmap Index Scan on id_idx (cost=0.00..4.34 rows=12 width=0)
Index Cond: (id = 1)
(4 rows)
=# set plantuner.disable_index='id_idx2,id_idx';
=# explain select id from test where id=1;
QUERY PLAN
-------------------------------------------------------------------------
Seq Scan on test (cost=10000000000.00..10000000040.00 rows=12 width=4)
Filter: (id = 1)
(2 rows)
=# set plantuner.enable_index='id_idx';
=# explain select id from test where id=1;
QUERY PLAN
-----------------------------------------------------------------------
Bitmap Heap Scan on test (cost=4.34..15.03 rows=12 width=4)
Recheck Cond: (id = 1)
-> Bitmap Index Scan on id_idx (cost=0.00..4.34 rows=12 width=0)
Index Cond: (id = 1)
(4 rows)
F.58.4. ÐвÑоÑÑ
РазÑабоÑÐºÑ Ð¾ÑÑÑеÑÑвили ФÑÐ´Ð¾Ñ Ð¡Ð¸Ð³Ð°ÐµÐ² (teodor@sigaev.ru) и Ðлег ÐаÑÑÑнов (oleg@sai.msu.su).
ÐÑÑ ÑабоÑÑ ÑпонÑиÑовал пÑÐ¾ÐµÐºÑ Nomao (http://www.nomao.com).