Это не полный ответ, я надеюсь, что кто-то даст вам несколько полезных советов по этому вопросу.
Но я могу дать вам хотя бы один совет.
Обязательно с serializable уровень изоляции самая большая проблема, с которой вы столкнетесь, - это когда ваша транзакция длинная, у вас есть много шансов получить ее автоматически откат с помощью движка.В сериализуемом уровне изоляции, если какая-либо другая транзакция совершает что-то, изменяющее одну из ваших затронутых данных, ваша транзакция отключается.На уровне изоляции сериализации вы должны думать о своей транзакции как о чем-то, что вам, возможно, придется повторить несколько раз, пока все не будет в порядке.Так что ... если он большой, а вы не один, он может стать очень длинным или даже невозможным для запуска.
Если мы говорим об изменении всех строк таблицы миллионов строкв сериализуемой транзакции вам, безусловно, придется поставить блокировку уровня приложения или семафор, нечто большее, чем транзакция базы данных, чтобы сообщить другим процессам, что вы выполняете тяжелую задачу, и что они должны немного подождать и позволить вам сделать этоважная задача: -)
Но если вы можете рассматривать этот процесс как задачу обслуживания для каждой строки, и для вашей среды не проблема, что некоторые строки находятся в новом состоянии, а некоторые еще нет... затем сделайте транзакцию для каждой строки, а не для большой.Вы должны выполнять большие сериализуемые транзакции, только если действительно важно, чтобы все затронутые строки изменили свой статус одновременно (это атомарность).Скорее всего, это не так, не так ли?