|
|
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK, "остальное время" может работать планировщик, если запросы редкие, партиций много, и всё для планирования ему приходится поднимать в кеш по новой с диска. у меня например были случаи стабильного планирования по ~15 сек. (в холодном состоянии) думаю, надо поискать у вас триггера, чеки, FK-и и прочие триггерные (по факту) ограничения, нет ли там чего-то неподобающего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 08:29 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
йоксель, запросы совсем не редкие, один из самых частых запросов, на самом деле. FK а базе нет, ну и триггер срабатывает только на insert(кстати замерял только вставку - отрабатывает моментально), а выполняется долго update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 08:34 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK, какие ограничения висят на таблице ? [цах] какие из них -- пользуются планировщиком для отброса партиций при планировании ? и вообще, все, что можете -- про таблицу расскажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 08:59 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK, Да, похоже на планировщик — это известная фишка Постгреса при партиционировании. Есть возможность использовать подготовленные запросы ? При инициализации сессии подготовьте запрос и потом его только исполняйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:22 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
vyegorovVerusK, Да, похоже на планировщик — это известная фишка Постгреса при партиционировании. Есть возможность использовать подготовленные запросы ? При инициализации сессии подготовьте запрос и потом его только исполняйте. При использовании autoexplain (да и обычного explain analyze) - время планирование в actual time НЕ ИДЕТ (его вообще до 9.4 версии нигде не видно). Тем более что планирование всегда занимает более менее одно и тоже время а тут то тормозит то нет. Ну и надо учитывать что по словам автора топика у него вся база в памяти и поднимать с диска вроде бы ничего не надо. Всетаки мне кажется что блокировки. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:34 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK а сколько у вас на базе shared buffers стоит? и как настроены checkpoints? И просто для очистки совести посмотрите iostat -x -m -d 10 пару-тройку минут на предмет загрузки дисковой подсистемы. И что у вас за дисковая подсистема? --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:39 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
vyegorovVerusK, Да, похоже на планировщик — это известная фишка Постгреса при партиционировании. Ага, вот, например: http://www.postgresql.org/message-id/2371.1234539121@sss.pgh.pa.us]http://www.postgresql.org/message-id/2371.1234539121@sss.pgh.pa.us vyegorovЕсть возможность использовать подготовленные запросы ? При инициализации сессии подготовьте запрос и потом его только исполняйте. Вот это хороший совет, IMHO, стоит попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:42 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK и остальные... Снимаю свои возражения про планировщик, был невнимателен. Это явно оно судя по: "Planning time: 47.748 ms" Теперь вопрос к автору топика покажите вывод \d+ stats. Что-то у меня большие сомнения на счет 100 дочерних таблиц... такое время планирования скорее будет на 10000 дочерних таблиц. PS: prepared запросы тут только хуже сделают... так как база будет во всех дочерних таблицах пытаться update строки а не в одной. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:43 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
PgSQLAnonymousvyegorovЕсть возможность использовать подготовленные запросы ? При инициализации сессии подготовьте запрос и потом его только исполняйте. Вот это хороший совет, IMHO, стоит попробовать. Во избежание запутывания уважаемой аудитории и распостранения городских легенд позволю внести себе ясность в вопрос: 1)И так... prepared запрос планируется на этапе когда параметры запроса еще не известны. 2)В случае партиционирования это приводит к тому что план ВСЕГДА будет включать в себя обработку всех партиций, так как построить универсальный план по другому - невозможно. 3)Это приводит к тому что в данной конкретной задаче будет произведена попытка поиска строк ВО ВСЕХ наличных партициях. Что приведет еще более печальным результатам чем у автора топика наблюдаются. Все вышеприведенное относится и к хранимкам. По факту при использовании партиционирования приходится делать следующие вещи: 1)в prepared запросах надо ЯВНО (не параметрами) указывать условия по которым партиционируем. 2)в хранимках при работе с партиционированной таблицей использовать execute для перепланирования при каждом вызове. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:49 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
vacuum full всех системных таблиц попробуй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:50 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim BogukPgSQLAnonymousпропущено... Вот это хороший совет, IMHO, стоит попробовать. Во избежание запутывания уважаемой аудитории и распостранения городских легенд позволю внести себе ясность в вопрос: 1)И так... prepared запрос планируется на этапе когда параметры запроса еще не известны. 2)В случае партиционирования это приводит к тому что план ВСЕГДА будет включать в себя обработку всех партиций, так как построить универсальный план по другому - невозможно. 3)Это приводит к тому что в данной конкретной задаче будет произведена попытка поиска строк ВО ВСЕХ наличных партициях. Что приведет еще более печальным результатам чем у автора топика наблюдаются. Да, не подумал. :( Maxim Boguk прав, не делайте этого --- станет только хуже. ;( Сколько у Вас партиций, в самом деле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 10:11 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim BogukVerusK и остальные... <> Что-то у меня большие сомнения на счет 100 дочерних таблиц... такое время планирования скорее будет на 10000 дочерних таблиц. <>если много сложных индексов -- и все примерно про одно и то же, и примерно вдоль плана -- то очень даже бывает. 1. можно попробовать генерить sql динамически, с генерацией полного имени партиции -- должно спасти 2. попробовать (FK на бд по утверждению автора нет) заменить апдейт на delete + insert. (insert, по тому же утверждению, не тормозит). 3. у автора двухкомпонентное партицирование, кажется (по 2-м параметрам) -- можно попробовать перестроить иерархию -- от корня унаследовать пустышки по одному ключу, а от них -- по обоим, на обоих уровнях inherit констрайнт по первому ключу партицирования -- число переборов планером может сократится (хотя не верю - в случае наличия стопящего констрайнта типа {CHECK (FALSE) NO INHERIT} на головной именно в плане update оно зачем то аппендит такую "головную") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 10:28 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk 2)В случае партиционирования это приводит к тому что план ВСЕГДА будет включать в себя обработку всех партиций, так как построить универсальный план по другому - невозможно. это зависит от того, что такое "универсальный план в СУБД". кажется оракел умеет пользоваться значением бинд переменной для конкретизации плана "в момент исполнения". могу врать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 10:40 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
конфиг PG: shared_buffers = 32GB # - Checkpoints - checkpoint_segments = 64 checkpoint_completion_target = 0.9 \d+ stats - https://gist.github.com/anonymous/77e4c1000ae39f1fffb1 таблиц даже меньше 100 :) iostat - https://gist.github.com/anonymous/50d9041f145fe2cf12a4 йоксель, 1. Первое, что пришло в голову - не помогает :( 2. Попробую сейчас поиграться 3. Все верно, партицирование идет по 2м параметрам, по ts_spawn и по user_id - планировалось так чтобы у пользователей стата не тормозила(на самом деле это помогло, но зато столкнулся с проблемой записи этой самой статы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 10:40 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK 1. Первое, что пришло в голову - не помогает :( тогда проблема не в планировании. тосты к партициям толстые ли ? индексы на них не протухшие ли? я бы туда таки посмотрел, кто из них уникъю, и т.п. -- индексов то у вас просто немеряно. Если есть сильно протухшие уникъю индексы -- они будут тормозить проверкой. все время апаемая табличка нуждается в регулярных реиндексах, пичалька. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 10:50 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
PS ddl ЧЕК-ов мы так и не увидели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 10:54 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Вот код триггера, тут как раз создание дочерних таблиц - https://gist.github.com/anonymous/79d37e631892b4c2048f ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 11:07 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusKВот код триггера, тут как раз создание дочерних таблиц - https://gist.github.com/anonymous/79d37e631892b4c2048f страшноватый. у вас д.б. гарантированно один писатель в stats, без конкурентов . например джоб с контролем уникальности себя в моменте. иначе -- будете все в белом. есть надежда, что у вас сильно протухшие ваши пк (было слишком много апдейтов). Но как их неконкурентно поджать -- м.б. Максимовой утилиткой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 11:25 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
йоксель, я провел эксперимент, сделал полный дамп базы и развернул его на версиях 9.2 и 9.3 - результат точно такой же, апдейт медленный. При разворачивании дампа он ведь строит индексы заново, верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 11:38 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk1)И так... prepared запрос планируется на этапе когда параметры запроса еще не известны. 2)В случае партиционирования это приводит к тому что план ВСЕГДА будет включать в себя обработку всех партиций, так как построить универсальный план по другому - невозможно. Начиная с версии 9.2 PostgreSQL поддерживает параметризованные подготовленные запросы (вторая звездочка). Другое дело, что были жалобы (я не смогу найти быстро), что первые 4 исполнения проходят быстро, а потом планировщик переклинивает и он выбирает не оптимальные планы. Вроде эта тема была закрыта (патчами). В связи с этим 2 вопроса: какие конкретно версии (интересуют все 3 цифры) вы тестировали? в смысле — все ли апдейты стоят? каким будет поведение на 9.1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 11:53 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
vyegorov, тестировал конкретно 9.2.4, 9.3, 9.4, 9.4.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 12:04 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK, верно но я не понимаю, как ваще автор1. Первое, что пришло в голову - не помогает :( соотносится с вашим же авторОтвет на второй пост: Если выполнять просто на таблице: Код: sql 1. 2. 3. -- в первом случае есть какое-то отягощение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 12:07 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
йоксель, действительно, что-то я сам запутался в экспериментах. Если указать конкретную партицию, то работает очень быстро, наверное, как и должно. 1000 строк проапдейтилась за 10сек на локале ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 12:20 |
|
||
|
Быстрый запрос в explain analyze но медленный по факту
|
|||
|---|---|---|---|
|
#18+
VerusK, А покажите вывод: Код: sql 1. Код: sql 1. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 13:24 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38921890&tid=1998077]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
93ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 394ms |

| 0 / 0 |
