Size: a a a

pgsql – PostgreSQL

2021 March 10

DF

Dmitry Fomin in pgsql – PostgreSQL
Dmitry Fomin
да что-то блокировало, но пока не могу понять что. я тоже грешил на триггер если честно, но не смог это доказать себе :)
небольшое уточнение- во время тестов все запросы на вставку выполнялись без ошибок, но на мониторинге видны ожидания типа  lock:relation
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Т.е. это и в тестах воспроизводится? Тогда должно же быть легко найти — казалось бы, выполняй и смотри... нет?
прогон программы тестов требует некоторых усилий, и зависит не от меня одного. когда я подключился к задаче - я прогнал запросы,  результат одного из них выводил выше. собрал логи. сейчас пытаюсь собрать картинку. блокировки очень короткие (меньше секунды) поэтому выстрроить цепочку навскидку мне не удалос, к сожалению
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
небольшое уточнение- во время тестов все запросы на вставку выполнялись без ошибок, но на мониторинге видны ожидания типа  lock:relation
Это прямо сейчас?
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Dmitry Fomin
прогон программы тестов требует некоторых усилий, и зависит не от меня одного. когда я подключился к задаче - я прогнал запросы,  результат одного из них выводил выше. собрал логи. сейчас пытаюсь собрать картинку. блокировки очень короткие (меньше секунды) поэтому выстрроить цепочку навскидку мне не удалос, к сожалению
логи сервера полные - те вообще все запросы у меня есть
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Это прямо сейчас?
нет это было во время тестов сегодня, сейчас программа закончена
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
прогон программы тестов требует некоторых усилий, и зависит не от меня одного. когда я подключился к задаче - я прогнал запросы,  результат одного из них выводил выше. собрал логи. сейчас пытаюсь собрать картинку. блокировки очень короткие (меньше секунды) поэтому выстрроить цепочку навскидку мне не удалос, к сожалению
Так можно просто сделать тестовую базу, и попробовать на ней (в двух сессиях).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
логи сервера полные - те вообще все запросы у меня есть
Так если есть полные логи (всех запросов всех сессий, так?) — можно "выдрать" конкретно эту пару, и повторить, да и всё.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Dmitry Fomin
нет это было во время тестов сегодня, сейчас программа закончена
у вас там транзакция закрыта была? то, что ф-ция отработала, не значит, что блокировки сняты.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Так если есть полные логи (всех запросов всех сессий, так?) — можно "выдрать" конкретно эту пару, и повторить, да и всё.
первая попытка сделать так не воспроизвело проблему, если лок и возникал то очень ненадолго и он не регистрировался мониторингом и ручными запросами, видимо это становится видно под нагрзукой, буду копать туда да, спасибо
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
первая попытка сделать так не воспроизвело проблему, если лок и возникал то очень ненадолго и он не регистрировался мониторингом и ручными запросами, видимо это становится видно под нагрзукой, буду копать туда да, спасибо
Может, действительно транзакция где-то не закрывается?
Если так, это может бесконечно висеть...
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Victor Yegorov
у вас там транзакция закрыта была? то, что ф-ция отработала, не значит, что блокировки сняты.
да это может "удлиннять" существование блокировки, но вопрос откуда эта блокировка появляется
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
да это может "удлиннять" существование блокировки, но вопрос откуда эта блокировка появляется
Только от CREATE INDEX, казалось бы.
В конце концов... выяснить же очень легко — сделайте в тестовой базе:
BEGIN TRANSACTION;
INSERT в эту таблицу;
SELECT ... FROM pg_locks; -- (ну или запрос "получше", как тут советовали)
и увидите, какие блокировки и на что наложены.
Т.е. Вас просто все накладываемые (успешно наложенные) интересуют, на всякий случай.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Только от CREATE INDEX, казалось бы.
В конце концов... выяснить же очень легко — сделайте в тестовой базе:
BEGIN TRANSACTION;
INSERT в эту таблицу;
SELECT ... FROM pg_locks; -- (ну или запрос "получше", как тут советовали)
и увидите, какие блокировки и на что наложены.
Т.е. Вас просто все накладываемые (успешно наложенные) интересуют, на всякий случай.
да, мне кажется, я понял вашу мысль, буду тестировать завтра. спасибо!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
да, мне кажется, я понял вашу мысль, буду тестировать завтра. спасибо!
Да не за что! ;)
Вы хоть напишите потом, в чём дело было — любопытно же.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Да не за что! ;)
Вы хоть напишите потом, в чём дело было — любопытно же.
если найду причину - обещаю, что напишу
источник

KZ

Konstantin Zaitsev in pgsql – PostgreSQL
Dmitry Fomin
если найду причину - обещаю, что напишу
Попробуйте индекс по дате удалить в  партиции на тестовом стенде;)
источник
2021 March 11

NC

Nikita Chaykin in pgsql – PostgreSQL
Всем привет, подскажите пожалуйста правильно ли делаю, у меня есть таблицы product, categories, sub_categories, следовательно у моего product может быть и categories и sub_categories, а может вообще не быть ничего, я хочу в product сделать 2 столбца category_name, sub_category_name и передавать туда id в таблице categories или sub_categories соответственно
источник

NC

Nikita Chaykin in pgsql – PostgreSQL
Просто я не сильно в этом всё разбираюсь, не ругайте
источник

NC

Nikita Chaykin in pgsql – PostgreSQL
Ну или передавать туда название категории, как лучше сделать?
источник

NC

Nikita Chaykin in pgsql – PostgreSQL
Или вообще неправильная архитектура изначально?
источник