Наконец-то понял как работает serailizable уровень изоляции.

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

Serializable уровень изоляции требует, чтобы записи и чтения в транзакции происходили, так как будто они происходят в какой-то линейной последовательности. Таким образом исключается возможность вложения транзакций описанное выше.

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