powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Партиционирование в 8.1.8
9 сообщений из 9, страница 1 из 1
Партиционирование в 8.1.8
    #34760271
galisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

Работаю с версией 8.1.8 под Windows.

Создал таблицы как указано в доке:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
CREATE TABLE cs_p200705
(
  CONSTRAINT cs_p200705_period_check CHECK (period =  200705 ::int4)
) INHERITS (com_sum) 
WITHOUT OIDS;

CREATE INDEX i_cs_p200705_acc
  ON cs_p200705
  USING btree
  (cms_account_s);
CREATE INDEX i_cs_p200705_per
  ON cs_p200705
  USING btree
  (period);


CREATE TABLE cs_p200706
(
  CONSTRAINT cs_p200706_period_check CHECK (period =  200706 ::int4)
) INHERITS (com_sum) 
WITHOUT OIDS;

CREATE INDEX i_cs_p200706_acc
  ON cs_p200706
  USING btree
  (cms_account_s);
CREATE INDEX i_cs_p200706_per
  ON cs_p200706
  USING btree
  (period);

create view vcs as 
select * from cs_p200705
union all
select * from cs_p200706;

Залил данные в таблицы.
Делаю выборку:
Код: plaintext
1.
2.
SET constraint_exclusion = on;
explain analyze select * from vcs where cms_account_s= 6704  and period= 200705 ::int4;

Результат такой: в 8.1.8 перебираются все партиции, а в 8.2.3 выбирается только одна таблица(партиция) соотвествующая периоду 200705.

Вопрос: как побороть перебор всех таблиц в 8.1.8 ?
P.S. Смену версий не предлагать.

Спасибо
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34760974
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postgresql.conf:
constraint_exclusion = on

И перегрузить. У меня 8.1.9. Вроде работает.
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34760986
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
galishaРезультат такой: в 8.1.8 перебираются все партиции, а в 8.2.3 выбирается только одна таблица(партиция) соотвествующая периоду 200705.

Вопрос: как побороть перебор всех таблиц в 8.1.8 ?Делать выборку не из представления, а из родительской таблицы. "select * from com_sum where cms_account_s=6704 and period=200705::int4". При этом constraint_exclusion срабатывает.
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34761003
galisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Funny_Falcon:

Спасибо за ответ, прописывал и перегружал. Не помогло.
Может я какую фишку в командах (вышеприведенных) пропустил ?

В 8.1.8 у меня explain analyze показывает проход по всем партициям. Кол-во строк извлеченных по не нужным партициям равен 0, но время на "нырок" в партицию приличное, аж 53 ms. Это очень много, когда выборка большая. Тормоза ощутимые.

У Вас не "нырков" в ненужные партиции на 8.1.9 ?
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34761020
galisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To LeXa NalBat:

Вот это да, из родительской ? Там ж нет данных ! А вьюшка зачем в доке приведена ?
Объясни пож-ста, что за трюк.

P.S. Просто проверить прямо сейчас не могу, нет под рукой.
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34761853
ignitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
galishaTo LeXa NalBat:

Вот это да, из родительской ? Там ж нет данных ! А вьюшка зачем в доке приведена ?
Объясни пож-ста, что за трюк.

P.S. Просто проверить прямо сейчас не могу, нет под рукой.
Данные там есть, на то она и родительская. А вьюшка - это часть идеологии автора статьи, без нее в твоем случае, да и не только запросто можно обойтись.
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34762187
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
galishaСпасибо за ответ, прописывал и перегружал. Не помогло. Может я какую фишку в командах (вышеприведенных) пропустил ? В 8.1.8 у меня explain analyze показывает проход по всем партициям. У Вас не "нырков" в ненужные партиции на 8.1.9 ?Я не написал этого в предыдущем сообщении, проделал на 8.1.9 тест, получил при запросе к view проход по всем партициям, а при запросе к родительской таблице - constraint_exclusion работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create table t ( f integer );
create table t_1 ( constraint c_1 check (f= 1 ) ) inherits (t);
create table t_2 ( constraint c_2 check (f= 2 ) ) inherits (t);
create view v as select * from t_1 union all select * from t_2;

explain select * from t where f= 1 ;
explain select * from v where f= 1 ;

drop table t cascade;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
nalbat=> explain select * from t where f= 1 ;
                            QUERY PLAN
-------------------------------------------------------------------
 Result  (cost= 0 . 00 .. 73 . 50  rows= 22  width= 4 )
   ->  Append  (cost= 0 . 00 .. 73 . 50  rows= 22  width= 4 )
         ->  Seq Scan on t  (cost= 0 . 00 .. 36 . 75  rows= 11  width= 4 )
               Filter: (f =  1 )
         ->  Seq Scan on t_1 t  (cost= 0 . 00 .. 36 . 75  rows= 11  width= 4 )
               Filter: (f =  1 )
( 6  rows)

nalbat=> explain select * from v where f= 1 ;
                        QUERY PLAN
-----------------------------------------------------------
 Append  (cost= 0 . 00 .. 73 . 72  rows= 22  width= 4 )
   ->  Seq Scan on t_1  (cost= 0 . 00 .. 36 . 75  rows= 11  width= 4 )
         Filter: (f =  1 )
   ->  Seq Scan on t_2  (cost= 0 . 00 .. 36 . 75  rows= 11  width= 4 )
         Filter: (f =  1 )
( 5  rows)

galishaвремя на "нырок" в партицию приличное, аж 53 ms.А вы уверены, что проверка check-констрейнта будет работать быстрее 53 ms? Проверить это можно наверное только замерив общее время, потому что, подозреваю, время потраченное на constraint_exclusion в explain analyze не фигурирует. :-(

galishaВот это да, из родительской ? Там ж нет данных !Физически данных нет: "select * from only table com_sum" будет пустым. А логически, благодаря "inherits", есть: "select * from table com_sum" вернет все записи из всех дочерних таблиц.

galishaА вьюшка зачем в доке приведена ?Альтернативный вариант. В доке написано "Partitioning can also be arranged using a UNION ALL view".
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34762654
galisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое. Проверюсь, отпишусь.
...
Рейтинг: 0 / 0
Партиционирование в 8.1.8
    #34763448
galisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое.

Работают партиции в 8.1.8 если пользовать родительскую таблицу.

Вьюшка получается не нужна. Только в 8.2.x она будет отрабатывать по партициям.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Партиционирование в 8.1.8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]