logo search
Учебник ИСПиУ

4.9.10 Как понизить количество анормальных завершений?

Проблемы с корректностью множества использованных данных могут стать причиной анормального завершения для значительного числа транзакций. Даже если тогда, когда транзакция прочитала необходимые ей непрерывные данные, они были корректными, то на момент ее завершения эти данные уже могут перестать быть таковыми. С этим невозможно полностью справиться, но можно попробовать улучшить ситуацию при помощи дополнительных проверок на этапе выбора версии необходимого непрерывного объекта.

К сожалению, нельзя заранее знать точное время выполнения транзакции, но зачастую можно оценить минимальное необходимое ей время. В таком случае версия объекта выбирается с учетом дополнительного требования − при ее использовании все использованное транзакцией множество данных должно оставаться корректным по крайней мере в течение этого минимального интервала работы транзакции. Если для получения такой версии этого элемента данных требуется его обновление, то пользовательская транзакция принудительно задерживается на необходимое время. Если же нельзя выбрать версию, которая бы удовлетворяла данному условию, то транзакция все равно не имеет шансов быть нормально завершенной, и для того чтобы не растрачивать понапрасну ресурсы системы, ее анормально завершают.

Отметим, что описанный подход предотвращает выполнение заведомо бесполезной работы, однако может привести к бесполезным задержкам для некоторых транзакций.