Size: a a a

SPb Reliability Meetup

2019 January 15

VL

Vitaliy Levchenko in SPb Reliability Meetup
Егор
вываливай ответ
приложение построено на передаче reform.Querier (интерфейс: либо транзакция, либо API для получения коннекта к базе) через DI. В одном месте внутри транзакции неявно получался ещё один коннект
источник

Е

Егор in SPb Reliability Meetup
я 1 раз в жизни для гоу использовал gdb
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
Хотя - ну, ппроф тоже, да
источник

VL

Vitaliy Levchenko in SPb Reliability Meetup
всё это отлично работало, пока не случался спайк во внешней системе
источник

VL

Vitaliy Levchenko in SPb Reliability Meetup
с кучей таймаутов
источник

Е

Егор in SPb Reliability Meetup
и то потому что про некоторые функции не знал
источник

Е

Егор in SPb Reliability Meetup
в итоге wget /pprof/trace
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
> В одном месте внутри транзакции неявно получался ещё один коннект

Как ты сказал: "Это не проблема с Go"?
источник

VL

Vitaliy Levchenko in SPb Reliability Meetup
Alexander 😼 Chistyakov
> В одном месте внутри транзакции неявно получался ещё один коннект

Как ты сказал: "Это не проблема с Go"?
это не проблема Go. Это проблема логики работы с транзакциями.
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
Ну да - это не проблема с Go
источник

Е

Егор in SPb Reliability Meetup
Vitaliy Levchenko
приложение построено на передаче reform.Querier (интерфейс: либо транзакция, либо API для получения коннекта к базе) через DI. В одном месте внутри транзакции неявно получался ещё один коннект
по кол-ву ps aux было бы видно
источник

Е

Егор in SPb Reliability Meetup
кол-во воркеров с лимитом
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
Попробуй такого добиться в расте
источник

Е

Егор in SPb Reliability Meetup
кстати, я сталкивался с подобной проблемой, где start transaction делался, но не делался возврат в пул транзакции
источник

Е

Егор in SPb Reliability Meetup
в итоге она коммитилась через время
источник

Е

Егор in SPb Reliability Meetup
когда другой юзер коннект заюзает
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
Так try-with-resources есть же уже даже в Go
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
Как вам это всё удается-то
источник

VL

Vitaliy Levchenko in SPb Reliability Meetup
tl;dr в итоге при спайке появлялась 1000 транзакций, которые после таймаута от внешней системы пытались получить коннект от БД. Но все коннекты заняли сами.
источник

AC

Alexander 😼 Chistyakov in SPb Reliability Meetup
Но, с другой стороны - опытным путем я знаю, что достижимый лимит для постгреса это где-то 2000+ коннектов
источник