|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
На сервере СУБД Postgresql 9.6.1 запускаю psql и выполняю один и тот же запрос, который то отрабатывает за 5-7 секунд, то висит по нескольку часов. Блокировок нет, по крайней мере я их не наблюдаю. Не понятна картина происходящего. Код: plsql 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Execution time: 7019.588 ms (7 rows) Тот же запрос, но время выполнения больше часа. Количество обрабатываемых строк одно и тоже. Код: plsql 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Execution time: 4122855.497 ms (7 rows) В чём может быть причина? По БД собирал статистику ( analyze ), делал vacuum full . По CPU виртуальная машина загружена на 45-50%. Явного свопа не наблюдаю. По дискам тоже не сказать, что есть проблема. Запрос рандомно, то отрабатывает, то напрочь зависает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 02:58 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
Функция some.journal из запроса вызывается со следующими характеристиками Код: plsql 1. 2. 3.
Может быть всё дело в cost и volatile? Я не очень хорошо знаком с функциями в postgresql. Насколько корректным тут будет использовать вариант с STABLE или IMMUTABLE? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 03:34 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
BigBudda... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Execution time: 7019.588 ms (7 rows) ... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Execution time: 4122855.497 ms (7 rows) . трабла с функцией у вас во втором случае функция начинает выводить данные через 4122477.150 причина может быть в блокировке. (как и где вы ее не наблюдаете не ясно) может быть в холодных данных/индексах (что там у вас в хфункции деется отсюда не видно. хотя бы буфера вывели бы, что ли, в експлейне) и вообще влезьте в свою функцию превратите ее в препаред по возможности и тюньте если большая -- погоняйте куски запросами. чел, пишущий хфункции, должен представлять, какая у них там унутре неонка . и что и скока стоит в планах. ну и про виртуалку ничо не ясно. могабыть и своп. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 09:23 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
авторпричина может быть в блокировке. (как и где вы ее не наблюдаете не ясно) блокировки смотрю в pgcenter по полям wait_etype, wait_event - они пустые. Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 14:59 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
нагрузку также наблюдаю через pgcenter, видно что своп всего 46 Мб. Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 15:07 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
BigBuddaнагрузку также наблюдаю через pgcenter, видно что своп всего 46 Мб. своп (при работе с субд) бывает "всего" 0 и "приплыли" -- если >0 имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 16:25 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
BigBudda, Вы вообще ничего не показали своими данными. Вам надо лезть внутрь кода функции и смотреть что там происходит и почему оно тормозит. Проще всего туда десяток RAISE WARNING/NOTICE вставить с clock_timestamp и посмотреть какая часть тормозит а потом уже предметно ее смотреть что там не так. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru [/quot] ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 18:19 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
авторхотя бы буфера вывели бы, что ли, в експлейне Отработал explain с buffers. Размер одного буфера по умолчанию 8 Кб? Тогда запрос запихивает в кэш 180841652 * 8 Кб = 1379 Гб?! Что просто дохрена. А с учётом того, что запрос выполняется постоянно, кэша в 8 ГБ (shared_buffers=8096MB) не хватает и отсюда видимо и проблема. Я так предполагаю. Код: plsql 1. 2. 3. 4.
Код: plsql 1. 2. 3. 4. 5. 6. 7.
Buffers: shared hit=180841652, temp read=58312 written=45096 -> Function Scan on journal (cost=0.26..10.26 rows=1000 width=696) (actual time=4417637.535..4417852.014 rows=268468 loops=1) Buffers: shared hit=180841652, temp read=58312 written=45096 Planning time: 0.190 ms Execution time: 4418092.168 ms (10 rows) Основную идею сказанного я понял. Буду общаться с разработчиками. Вопрос только в том, почему запрос иногда отрабатывает быстро (3-5 секунд)? Как это объяснить? Из-за того, что ничего не нужно вытеснять из кэша и нужные буфферы там уже есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 19:25 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
BigBudda, Скорее всего там запрос который в зависимости от данных в базе может или очень быстро или очень медленно работать где то. Но где именно не видя исходников - не сказать. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru [/quot] ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 23:07 |
|
Разное время одного и того же запроса включая explain analyze
|
|||
---|---|---|---|
#18+
BigBudda Тогда запрос запихивает в кэш 180841652 * 8 Кб = 1379 Гб?! Buffers: shared hit=180841652, temp read=58312 written=45096 нет. он берет из кеша в сумме стока сколько хит. вероятно многократно повторно одно и то же. то что он читает с диска -- это рид. пишет -- вриттен. т.к. в буферсах явной работы с диском нет, то он либо рабртает с ним неявно (своп) либо планы внутре скачут. теперь представьте, что он произвольным доступом кладет и берет это вот все мимо тазика -- т.е. из ваших 64МБ свопа. и так 100500 раз. т.е. по полоборота на каждый доступ. вот оно то и набежит за 180лямов доступов. хотя это вольный домыысел. и при таких объёмах вычислений без ридов все мможет зависеть от плана счета. как говорит максим. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 08:10 |
|
|
start [/forum/topic.php?fid=53&msg=39717182&tid=1995549]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
90ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 188ms |
0 / 0 |