|
|
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
Добрый день Делаю маленький тест. Есть два варианта таблицы LINEITEM из TPC-H : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1. LINEITEM - обычная с индексом по l_shipdate 2. LINEITEM_PART - партицированная по годам (6 партиций-таблиц по годам, на каждой индекс по l_shipdate + констрейнты, функция, триггер и т.д.) В обе таблицы залито 300M записей Запускаю q1.sql из бенчмарка : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. По обычной таблице рантайм 2 минуты, по партицированной 4 минуты :( План по обычной таблице : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. По партицированной : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Cудя по плану выбирается одна партиция lineitem_1992, а рантайм хуже в два раза. ANALYZE по обеим таблицам делал. Куда копать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2014, 20:21:33 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
pg_нуб, Код: sql 1. какбе говорит нам, что все записи-писи в головной таблце-це присуцвтуют, с т.з. планировщика (а индекса над ней похоже нет) а в партции, напротив, ожЫдаецца 1 запись-пись приведите explain analyze -- посмотрим, так ли это-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2014, 20:46:05 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
какбе, сделал EXPLAIN ANALYZE : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Создал индекс по мастер-таблице : Код: sql 1. Опять сделал EXPLAIN ANALYZE : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь рантайм уровнялся с обычной таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2014, 21:29:04 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
pg_нубкакбе, сделал EXPLAIN ANALYZE : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Создал индекс по мастер-таблице : Код: sql 1. Опять сделал EXPLAIN ANALYZE : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь рантайм уровнялся с обычной таблицей. все правильно -- все записи у вас лежат в родительской таблице, а в партициях -- уй ночевал, проститезаржание рисовать партицирующие триггера за вас пупкин буит ? или вы думали, шо в постгресе партицирование искаропки ? PS сделайте Код: sql 1. - может быть что и соображать начнёте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2014, 22:05:57 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
Просто напоминаю, что вы пользуетесь не "партицированием" (как таковым), а "наследованием". "наследование" же -- это такая довольно мерворождённая пж фича, которую было трудно к чему-либо дельному приспособить, (т.к. индексов , уникью и т.п. констрайнтов по сквозным "семействам" в пж так и не реализовали) -- и вот из этого, проститезаржание, чумодана без ручки оказалось модно делать партицирование. но всё -- исключительно руками. (с кучей попутных бубнов и траблов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2014, 22:14:33 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
какбе, При создании схемы партицирования упал create trigger... и все действительно легло в мастер-таблицу Пересоздал нормально схему. Сделал ANALYZE и CLUSTER по всем таблицам-партициям. Теперь explain analyze выдает : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. те.же 120 сек., что и на непартицированной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:55:37 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
pg_нуб, и это -- правильно. основные затарты -- те же 38008923 чтений произвольным доступом, что и в случае непартицированно. -- затраты на планирование растут с числом партиций. И весьма. ++ затраты на чтение индексов -- немного падают. выигрыши будут в запросах не вдоль индексов, требующих фулл-скана партиции (прочитать партицию дешевле, чем всю таблицу). Или в других похожих случаях. основная задача -- ускорить DROP|TRUNCATE[вместо DELETE], REINDEX, vacuum отдельной партиции и т.п. но в случае DROP "на ходу"-- имеем попаданчик http://www.dbtalk.net/mailing-database-pgsql-bugs/bugs-expected-behaviour-ddl-query-640124.html , так и не решённый гурьями по сей день (в общем -- усё плёхо). ЗЫ сплошь и рядом будем иметь попаданец при плане типа {no merge} APPEND [index-scans] + Sort + LIMIT N -- там люди не знают, что достаточно проаппендить M*{ORDER BY .... LIMIT N} и взять после сорта опять {ORDER BY .... LIMIT N} -- им это недоступно в принципе-- будут проаппенжены полные индекс-сканы, вся хрень просортирована, и только потом применён лимит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:22:32 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
выше, какбе, наврал на новый план я и не посмотрел -- там у вас таки фул скан пратиции, и занимает он 15 секунд. Индекс скан по полной табле занимал 18 секунд -- т.е. 3 секунды вы выиграли. а вот где сидит от 15--18 до 120 -- в ваших планах не вижу. Hash aggregate начинается якобы уже со 120, а аппенд перед ним кончается 18-ю. могабыть у кого глаз позрячей -- найдут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 20:29:55 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
pg_нуб, а покажите вывод `EXPLAIN (analyze, buffers, verbose)` -- поможет прояснить ситуацию с HashAggregate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 21:40:13 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
какбевыше, какбе, наврал на новый план я и не посмотрел -- там у вас таки фул скан пратиции, и занимает он 15 секунд. Индекс скан по полной табле занимал 18 секунд -- т.е. 3 секунды вы выиграли. а вот где сидит от 15--18 до 120 -- в ваших планах не вижу. Hash aggregate начинается якобы уже со 120, а аппенд перед ним кончается 18-ю. могабыть у кого глаз позрячей -- найдут собственно на вычисление всей этой пачки аггрегатов через hashagg эти самые 102 секунды и уходят и вряд ли это станет быстрее от партиционирования. PS: в выводе (actual time=120231.704..120231.707 rows=2 loops=1) первое число - когда выдали первую строку результата (а не когда начали считать) второе число - когда выдали последнюю строку результата... не ясно какое время вы хотите получить для сложного пересчета 40M строк... помоему очень приличный результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 22:29:35 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
Ребята, а вы не в курсе нет ли планов сделать нормальное партиционирование "из коробки", как в оракле, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 21:01:50 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
ArtemiyРебята, а вы не в курсе нет ли планов сделать нормальное партиционирование "из коробки", как в оракле, например.если верить Голосуем за новые фичи PG то вроде бы давно в процессе допиливания. но дело это кропотливое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 21:13:01 |
|
||
|
партицированная таблица vs обычная
|
|||
|---|---|---|---|
|
#18+
Вот здесь идет активное обсуждение того, каким должно быть новое партиционирование. У меня сложилось ощущение, что оно будет не на наследовании. А так - поживём, увидим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 08:51:34 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38800058&tid=1998360]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 438ms |

| 0 / 0 |
