F.54. plantuner#

F.54. plantuner

F.54. plantuner #

F.54.1. О plantuner #

Версия: 1.0.1

GitHub

F.54.2. Plantuner - включение подсказок планировщика #

plantuner - это модуль вклада, который позволяет использовать подсказки планировщика.

F.54.3. Мотивация #

Независимо от того, считает ли кто-то это плохим или нет, но иногда очень интересно иметь возможность контролировать планировщик (предоставлять подсказки, которые говорят оптимизатору игнорировать его алгоритм частично), что в настоящее время невозможно в Tantor SE-1C. Oracle, например, имеет более 120 подсказок, SQL Server также предоставляет подсказки.

Эта первая версия plantuner предоставляет возможность скрыть указанные индексы от планировщика Tantor SE-1C, так что он не будет их использовать.

Существует множество ситуаций, когда разработчик хочет временно отключить определенный индекс (или индексы), не удаляя их, или указать планировщику использовать определенный индекс.

Далее, для некоторых приложений Tantor SE-1C может быть слишком пессимистичным в отношении вновь созданных таблиц и предполагает наличие гораздо большего количества строк в таблице, чем есть на самом деле. Если переменная GUC plantuner.fix_empty_table установлена в значение true, то модуль установит в ноль количество страниц/кортежей таблицы, которая не имеет блоков в файле.

F.54.4. Синтаксис #

  • plantuner.disable_index

    Список индексов, невидимых для планировщика

  • plantuner.enable_index

    Список индексов, видимых для планировщика, даже если они скрыты с помощью plantuner.disable_index

F.54.5. Использование #

Чтобы включить модуль, вы можете либо загрузить общую библиотеку 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.54.5.1. Авторы #

Всю работу выполнили Федор Сигаев и Олег Бартунов .

Спонсор: проект Nomao.