|
2 / 2 / 1
Регистрация: 12.06.2022
Сообщений: 44
|
|
Postgres - непонятные фризы12.06.2022, 20:34. Показов 1867. Ответов 10
Метки нет (Все метки)
При выполнении запроса к Postgres SQL иногда запрос может зависать на 18 - 40 секуннд. Проблема возникла когда обновили ПО Ubuntu Sercer 20 Postgres 12-13-14(на всех версиях). На версиях Ubuntu Sercer 18 Postgres 11 - проблемы не было.
Сначала был подозрение на балансер npgsql. Написали свой балансер - всё тоже самое. Есть функция которая вызывается web сервером и выполняется в postgres за микросекунды. Всё выполняется в пределах одной машины. Но иногда запрос подвисает до 40 секунд. Картинка с Wireshark. Из неё видно что всё происходит быстро до момента отсылки команды. Сервер присылает что он выполнил DISCARD ALL и Z - готов к следующей команде. А потом завис на 18 секунд и только после прислал ответ на остальную часть запроса. Так не должно быть! Далее в postres через запрос статистики pg_stat_statements было получено максимальное время выполнения этой функции за все вызовы - 6 микросекунд. Куда копать уже не знаю. Все места которые можно был протестировать были проверены и отброшены. Остался сам TCP/IP стек в Ubuntu - но Web сервер работает без проблем. Значит не он. И получается что что то глючит внутри postgres. Но как это проверить не знаю. Может кто сталкивался с таким?
0
|
|
| 12.06.2022, 20:34 | |
|
Ответы с готовыми решениями:
10
Непонятные фризы Непонятные фризы Непонятные фризы |
|
2 / 2 / 1
Регистрация: 12.06.2022
Сообщений: 44
|
|
| 13.06.2022, 16:57 [ТС] | |
|
Lock - смотрел. Нету его.
Пока расследование привело к тому что пауза вызвана скорее всего прогревом кеша. Также сейчас установлен Postgres 14 и идёт сбор статистики. Пауза в нём была раз при старте. Потом вроде не наблюдалась. До этого тестировали на всех версиях, в основном 12 - там глюки были постоянны. Было такое ощущение что в 12 версии кеши при неиспользовании удалялись из RAM. Но из за того что постоянно что то крутили - игрались с настройками, с keppalivе на стороне сервера, клиента, и прочие эксперименты - трудно было понять что вообще не работает. Отладка выглядила феерично - через SSH и tcpdump удалённо снифили трафик между БД и веб сервером. К самому WEB серверу через SSH удалённо в режиме отладки был подключён дебагер. .net core позволяет такие извращения. Одновременно логи в файл и в БД слал WEB сервер. Которые в режиме реального времени просматривали через SFTP. Новый балансер был обложен профайелером который тоже скидывал свои логи. Мониторили количество каналов - активных, в куче и прочее. Одновремнно смотрели показатели Linux - загрузка процессора, памяти и прочее - короче чёрт ногу сломит. Топик создал для того - может кто знает как залогировать весь запрос в постгресе полностью? Всё остальное уже под наблюдением. Потому как вроде - туже загрузку с диска данных в RAM он вроде не учитывает в pg_stat_statements.
0
|
|
|
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
|
||||||
| 13.06.2022, 23:41 | ||||||
|
Тогда надо смотреть планы запросов. Причем желательно с прогретым буферным кэшем (shared_buffers) и нет, чтобы видеть разницу.
Планы смотреть с доп. опциями:
1
|
||||||
|
2 / 2 / 1
Регистрация: 12.06.2022
Сообщений: 44
|
|||
| 15.06.2022, 22:01 [ТС] | |||
|
Проблема не ушла. Также наблюдается периодические фризы.
Удалось словить сбойный запрос от Web сервера. И почти одновременно сделать такой же запрос из отладчика SQL Manager с припиской EXPLAIN (ANALYZE, BUFFERS, WAL, TIMING) SELECT ... Оба запроса зависли на 50 секунд. И проблема не в прогревании буферов - SQL активен сутки. EXPLAIN вернул следующее:
При этом нормально этот запрос выполняется так:
Wireshark опять показал уже обычную картину: Никих ошибок в запросах - просто ответ зависает на 50 секунд на стороне postgres. При этом проблема была в 2 отдельных каналах - SQL Manager устанавливал свой канал, Web сервер свой. Отсюда отметаем проблему что что то не так с конкретным каналом. Куда копать не пойму. Вот реально бесит - всё написанное своё работает как часы. Как возьмёшь что то чужое - всё глючит. И ничего с этим не поделаешь. И при этом работают же на postgres тысячи и не жалуются. Добавлено через 10 минут тут сказано что EXPLAIN не может пролезть внутрь функции. Собственно мне ничего и не показало кроме общего времени с которого мне ни холодно ни жарко. Буду искать как пролезть внутрь. Добавлено через 9 минут Попробую такую штуку auto-explain
0
|
|||
|
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
|
|
| 16.06.2022, 00:37 | |
|
Так а что за функция-то вызывается?? Можете сам запрос еще показать и текст функции??
Да, auto-explain в помощь и обязательно включить log_nested_statements
0
|
|
|
2 / 2 / 1
Регистрация: 12.06.2022
Сообщений: 44
|
||||||
| 16.06.2022, 01:28 [ТС] | ||||||
|
Да запрос простой select * my_func(a,b,c);
Да и функция вроде ничего криминального. Выложу - может у меня глаз замылен и я чего то не вижу.
0
|
||||||
|
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
|
|
| 16.06.2022, 02:12 | |
|
Ну тут смотреть планы через auto-explain.
Сложно предположить на каком из выражений база спотыкается. Может быть связано с транзакциями из предыдущего топика. TRUNCATE на этом может спотыкаться... Будет ждать возможности очищения после предыдущего вызванного SELECT FROM site_statistic (SELECT выставляет ACCESS SHARE блокировку, TRUNCATE не может продолжать, пока такая блокировка висит на таблице)
1
|
|
|
107 / 68 / 29
Регистрация: 22.04.2022
Сообщений: 233
|
|||||||
| 16.06.2022, 06:37 | |||||||
1
|
|||||||
|
2 / 2 / 1
Регистрация: 12.06.2022
Сообщений: 44
|
|||
| 16.06.2022, 12:37 [ТС] | |||
|
Добавлено через 5 минут Существующая функция написана так сказать в стиле обычного программирования. Заводим массив. Складируем данные. Отдаём массив. Но в postgres для массива строк походу есть только временные таблицы - которые походу несут на себя бремя основных таблиц. И все оверхеды связанные с этим. Мне тоже не очень нравится использование временной таблицы - и я постоянно касился на неё, т.к. выглядила наиболее подозрительным местом в функции. Обязательно попробуем ваш вариант. Но для начала попробую разобраться - с существующим. Надо понять, что же именно в нем не работает.
0
|
|||
|
2 / 2 / 1
Регистрация: 12.06.2022
Сообщений: 44
|
|||||||||||
| 24.06.2022, 19:14 [ТС] | |||||||||||
|
fte65,
Попробовал ваш вариант функции и он не совсем корректно работает. А именно дело в этих двух JOIN
Переделал под такой вариант. Всё заработало корректно.
0
|
|||||||||||
| 24.06.2022, 19:14 | |
|
Помогаю со студенческими работами здесь
11
Непонятные фризы Непонятные фризы продолжение Внезапные и непонятные фризы Непонятные фризы компьютера Непонятные редкие фризы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|