#mysql #sql #transactions
#mysql #sql #транзакции
Вопрос:
Я слышал, что транзакция должна быть закрыта как можно быстрее.
У меня есть устаревший код, который запускает транзакцию и выполняет много работы (собирается в кеш, чего-то ждет и т.д.). Я измерил задержку, и кажется, что иногда она превышает 500 мс. Я слышал, что даже 100 мс могут вызвать проблемы с блокировкой в горячих обработчиках.
Какой срок службы транзакций подходит для большинства проектов? Существует ли золотое правило?
Комментарии:
1. Блокировки и транзакции — это разные вещи, которые обычно используются вместе. Транзакции должны длиться столько времени, сколько позволяет задание, которое они заключают. Блокировки должны быть нацелены на то, чтобы они сохранялись как можно меньше времени, однако это может оказаться невозможным. Если вы не используете систему, которая обрабатывает большое количество транзакций в минуту, я сомневаюсь, что транзакция в 500 мс, включающая блокировки, будет проблемой. Что вы должны спросить, так это насколько часто транзакции будут конкурировать за одни и те же записи, и не будет ли проблемой, что вторая транзакция должна ждать 500 мс, когда это произойдет.
2. Нет, золотого правила не существует, это зависит от требований вашего приложения. Поэтому мы не можем сказать, вызовут ли у вас проблемы транзакции длиной 500 мс. Только вы можете это проверить. Большое время ожидания блокировки указывает на то, что ваши транзакции (и, следовательно, удерживаемые блокировки на уровне строк) открыты слишком долго. Взаимоблокировки также являются показателем, но это также может быть результатом плохого дизайна.