powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация и блокировки
14 сообщений из 14, страница 1 из 1
Оптимизация и блокировки
    #39336205
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть парочку запросов
1.Блокированный
1.1 update asgufmsg set status = 1, sended = now(), modified = now(), rcount = rcount + 1 where id = $1
1.2 select s.id, s.message, s.messageId from asgufmsg s join asgufmsg r on (s.servicenumber = r.servicenumber and r.type = 1 and r.status = 2 and r.asgufcode = 0) where s.status = 0 and s.type = 2 and (select count(*) from asgufmsg where servicenumber = s.servicenumber and type = 2 and (asgufcode <> 0 or asgufcode is null) and created < s.created) = 0 order by s.created asc limit 500
2.Блокирующий
UPDATE asgufmsg set asgufcode = $1, asguftext = $2, modified = now(), status = $3 where servicenumber = $4 and messageId = $5
На момент моей проверки блокирующий запрос висел со старта порядка 6 минут, они достаточно часто проливаются и меняют статусы в этой таблице.

Я пока осваиваюсь в Postgres И после целодневного вчерашнего сёрфа по моим вопросам,всё таки решил обратиться к знающим людям:
1.Как посмотреть список выполняемых запросов к таблице asgufmsg
2.Могу ли я как то узнать из базы что скрывается за аргументами(параметрами) под $1 $2 $3 $3 итд (тоесть можно ли сделать выборку всех используемых аргументов базой или конкретным запросом)
3.Как лучше всего устранить взаимную блокировку и вообще что посоветуете на эту тему поизучать.Спасибо большое заранее
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39336337
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Strippett,

1) поставьте экстеншн pg_stat_statements либо включите лог медленных запросов в конфиге (log_min_duration_statement)
2) можно увидеть в логах, если запрос завершился и он туда попал
3) по данному сообщению не ясно, взаимная блокировка это или нет. взаимные разрешаются сами через секунду - один из запросов отвалится с ошибкой deadlock detected. стоит разобраться, почему запрос висел 6 минут: может не хватает индекса, может он слишком много строк обновляет за раз, может ему другие транзакции мешают. по выводам из системных вью pg_stat_activity (поле waiting), pg_locks (поле granted) можно с этим разобраться в момент проблемы. рекомендуется транзакции делать как можно короче.
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39337544
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius,Спасибо за комментарий но как я выяснил и предполагаю блокировки возникают не постоянно а периодически,где-то раз в 10-12 минут и судя по всему это связано с одновременным доступом нескольких скриптов к одной и той же строке и её апдейт либо селект.

Я вот задумался как до для разных скриптов можно разграничить доступ к таблице или приорит изацию настроить как-то?
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39337777
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил пример лока,он возникает регулярно
И во время него скрипт повисает на минут 8.
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39337782
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При этом по плану он достаточно быстро выполняется.
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39337903
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересует как правильно разрешить такую блокировку?Чтобы она не возобновлялась и какой дополнительный анализ можно сделать?
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39337999
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Strippett,

А приложите лог в виде текста, а не XLS файла?
И ещё — почему вы считаете, что что-то нехорошее происходит? В приложении задержки? В логах ошибки ?
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338067
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,Да на уровне приложения образуются очереди из за этой задержки.


locked_item waiting_duration blocked_pid blocked_query blocked_mode blocking_pid blocking_query blocking_mode
transactionid 00:02:05.651379 25 091 UPDATE asgufmsg set asgufcode = $1, asguftext = $2, modified = now(), status = $3 where servicenumber = $4 and messageId = $5 ShareLock 7 856 update asgufmsg set status = 1, sended = now(), modified = now(), rcount = rcount + 1 where id = $1 ExclusiveLock


вы имеете ввиду так?
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338073
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Strippett,

А сколько строк обновляет запрос "UPDATE asgufmsg set asgufcode = $1, asguftext = $2, modified = now(), status = $3 where servicenumber = $4 and messageId = $5"?
6 минут для него как то много.
Есть ли индекс по asgufmsg(servicenumber, messageId)?

Точно ли именно запрос 6+ минут работал а не
begin;
fast update
ушли курить на 10 минут оставив локи...
commit;
т.е. какое состояние было у процесса в pg_stat_activity?

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338147
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,Точно этот вот скрин из баджера,записей много обрабатывает,табличка в которую он пишет весит за 20gb.
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338148
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Strippett,вот из активити кусочек тот запрос висит в wait и ожидает завершения второй транзакции.
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338162
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Strippett,По индексу я с вами согласен ,я уже его заготовил но не думаю что в нём дело.Там есть индекс если вы в Execute Plan видели по сервайс намбер. Если планом прогонять запрос ,то получается очень быстрое выполнение.Я ещё грешу на сторону приложения.
Можно ли как-то мне на уровне базы разрешать эти блокировки как-то автоматически пока не найду централизованное решение и истинную причину?
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338268
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Strippett,

Очевидно, что после быстрого UPDATE-а приложение держит транзакцию ещё несколько минут.
На стороне базы, кроме как откатить транзакцию совсем, решений нет.

Так что да, надо править приложение.
...
Рейтинг: 0 / 0
Оптимизация и блокировки
    #39338491
Strippett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,Вчера нарыл исходники приложения залез туда и нашёл очень интересные селекты,прогнал их в анализаторе и понял что своим первым действием каждый скрипт блокирует по 650 строчек записей.)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация и блокировки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]