Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Партиционирование в 8.1.8 / 9 сообщений из 9, страница 1 из 1
29.08.2007, 09:50
    #34760271
galisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
Добрый день !

Работаю с версией 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
29.08.2007, 12:35
    #34760974
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
postgresql.conf:
constraint_exclusion = on

И перегрузить. У меня 8.1.9. Вроде работает.
...
Рейтинг: 0 / 0
29.08.2007, 12:37
    #34760986
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
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
29.08.2007, 12:41
    #34761003
galisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
To Funny_Falcon:

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

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

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

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

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

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

P.S. Просто проверить прямо сейчас не могу, нет под рукой.
Данные там есть, на то она и родительская. А вьюшка - это часть идеологии автора статьи, без нее в твоем случае, да и не только запросто можно обойтись.
...
Рейтинг: 0 / 0
29.08.2007, 16:20
    #34762187
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
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
29.08.2007, 17:58
    #34762654
galisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
Спасибо всем большое. Проверюсь, отпишусь.
...
Рейтинг: 0 / 0
30.08.2007, 09:37
    #34763448
galisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Партиционирование в 8.1.8
Спасибо всем большое.

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

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


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