|
|
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK, Я бы понизил shared_buffers до 2Гб, work_mem до 8Мб, effective_cache_size до 64Гб и пересобрал бы статистики. Также я бы оставил commit_delay + commit_siblings по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 14:15 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 14:23 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusKВот код триггера, тут как раз создание дочерних таблиц - https://gist.github.com/anonymous/79d37e631892b4c2048f а вот что попробуйте вместо Код: plaintext 1. сделать один общий CHECK: Код: plaintext (причем на всех уже созданных партициях сменить тоже). И посмотрите не исправилась ли ситуация. Так как единственное отличие от нормальных схем у вас это два независимых условия партиционирования. Может там что то не так работает. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 15:26 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusKvyegorov, все запросы - https://gist.github.com/anonymous/90e84a06ab8bbe60f37e Вам бы следовало дать хоть какой-то SQL-script для воспроизведения ситуации. :( Я вот попробовал воспроизвести (упрощённо): http://sqlfiddle.com/#!15/9a9c2/2 Неудобство в том, что PostgreSQL там максимум 9.3, зато оттуда можно скопировать и попробовать у себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 15:42 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, попробовать можно, но не скоро, надо подумать как этот процесс автоматизировать. Руками нереально :) PgSQLAnonymous, это если только дать дамп всех таблиц, там много записей уже, sqlfiddle отказывается столько заполнять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 16:33 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
А если попробовать написать триггер на update? Т.е. в триггере указывать в какой конкретно таблице надо проапдейтить запись. Наткнулся вот на такое обсуждение - http://postgresql.nabble.com/Query-plan-for-partitioned-UPDATE-DELETE-slow-and-swaps-vmem-compared-to-SELECT-td3291659.html может с 2010 в этом плане ничего и не изменилось? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 16:37 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusKА если попробовать написать триггер на update? Т.е. в триггере указывать в какой конкретно таблице надо проапдейтить запись. Наткнулся вот на такое обсуждение - http://postgresql.nabble.com/Query-plan-for-partitioned-UPDATE-DELETE-slow-and-swaps-vmem-compared-to-SELECT-td3291659.html может с 2010 в этом плане ничего и не изменилось? :(как вы себе представляете событие данных в таблице, в которой их нет ? или вы на стейтмент хотите триггер повесить ? я вам попытался предложить тестирование альтернативы -- делаете наследников 2-х уровней. пустышки по первому чеку, им наследуете реальные таблицы с первым наследуемым и вторым чеком -- просто проверить, как идет пеербор чеков -- сразу на всю глубину иерархии, или умнее. скорее всего не выгорит. но может и полететь а обход иерархий скриптом -- стандартная задача ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 17:01 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
vyegorovMaxim Boguk1)И так... prepared запрос планируется на этапе когда параметры запроса еще не известны. 2)В случае партиционирования это приводит к тому что план ВСЕГДА будет включать в себя обработку всех партиций, так как построить универсальный план по другому - невозможно. Начиная с версии 9.2 PostgreSQL поддерживает параметризованные подготовленные запросы (вторая звездочка). Другое дело, что были жалобы (я не смогу найти быстро), что первые 4 исполнения проходят быстро, а потом планировщик переклинивает и он выбирает не оптимальные планы. Вроде эта тема была закрыта (патчами). В связи с этим 2 вопроса: какие конкретно версии (интересуют все 3 цифры) вы тестировали? в смысле — все ли апдейты стоят? каким будет поведение на 9.1? Тут коротко на этот вопрос не ответишь. Часть1: Как работают параметризованные prepared запросы - строятся 2 плана общий в начале и частный с учетом параметров при первом вызове. Далее пока данный prepared запрос работает только с теми параметрами которые подходят под частный план - все в теории хорошо, но стоит 1 раз вызвать этот же prepared запрос с другими параметрами как он НЕОБРАТИМО переключится на generic plan и будет его использовать все время жизни prepared запроса. Иногда это приводит к милым эффектам - вот есть большое java приложение, вот оно сделало prepared запрос для какой то большой партиционированной таблицы. Далее 99.999% случаев запросы работают с текущим месяцем данные которого успешно закешированны в базе, потом какой то менеджер решает случайно посмотреть данные за прошлый месяц и тут наступает ад, так как этот prepared запрос (а они в java Дооолго живут) начинает перебирать архив партиций с данными за последние 10 лет которые лежат на медленных SAS дисках просто для истории, а он может вызываться часто. Вот так сервер работал-работал и упс. Я такую проблему как то 2 недели ловил. Часть2: Касательно " в теории хорошо" - на практике в 9.2.10 (последнем) поведение следующее у меня получается: Код: 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. Так что проблему не исправили. Что в сочетании с изложенным в Часть1 делает лобовое использование партиций в сочетании с prepared запросами наработоспособным. Увы. PS: пойду bug report напишу. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 19:40 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusKPgSQLAnonymous, это если только дать дамп всех таблиц, там много записей уже, sqlfiddle отказывается столько заполнять :) А я вот погонял тот fiddle, на который давал ссылку, на своём Postgres-е, и у меня Ваша проблема-то воспроизводится. ;) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Это при том, что у stats всего 61 partition и по одной записи в каждой из них. Это PostgreSQL 9.4.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:23 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
PgSQLAnonymous, Текущая теория что партиционирование по 2м чекам приводит к каким то проблемам с планированием. Попробую сделать короткий test case и зарепортить bug (если test case получится конечно) --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:30 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Спасибо за подробный ответ. Давно думаю, что отчасти из-за таких же проблем оракл свой шаред_пул сделал (там, правда, свои грабли). Эх, не исправят они эту фишку пока полноценные партиции не прикрутят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:37 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim BogukPgSQLAnonymous, Текущая теория что партиционирование по 2м чекам приводит к каким то проблемам с планированием. Попробую сделать короткий test case и зарепортить bug (если test case получится конечно) Хм... А чем Вам этот fiddle не подходит как test case? Кстати, при 155 таблицах уже: Planning time: 534.810 ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:47 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim BogukPgSQLAnonymous, Текущая теория что партиционирование по 2м чекам приводит к каким то проблемам с планированием. Попробую сделать короткий test case и зарепортить bug (если test case получится конечно) --Maxim Boguk www.postgresql-consulting.ru по моим экспериментам получилось что проблема не столько в партициях сколько в 60*25 = 1500 индексах в плане. без 25 индексов на каждой таблице запрос планируется раз в 10 быстрее что уже ближе к правде. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:47 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Кстати, в другом проекте использовал партиционирование по одному чеку - таких проблем там не наблюдается, проверил(PG 9.3). Убрать тут чеки для тестов со всех таблиц еще не успел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 22:25 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38923163&tid=1998077]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 488ms |

| 0 / 0 |
