SERIALIZABLE транзакции полезны, если вы хотите простое доказательство правильности в параллельных нагрузках.Поскольку определение уровня изоляции сериализуемой транзакции в стандарте SQL (начиная с SQL-92) заключается в том, что поведение любого параллельного набора сериализуемых транзакций должно соответствовать некоторому последовательному (по одному) порядку выполнения, любойТранзакция, которая может показывать, что она работает правильно, когда она запускается сама по себе, будет действовать правильно как часть любого набора сериализуемых транзакций.
Эта защита требует затрат -- транзакции должны время от времени блокироваться или откатываться для повторной попытки, чтобы обеспечить сериализуемую изоляцию транзакций, и информация должна отслеживаться, чтобы определить, когда необходимо предпринять такие действия.В некоторых средах разработки с небольшим количеством типов транзакций и небольшим числом разработчиков зачастую более выгодно использовать менее строгий уровень изоляции и явно управлять условиями гонки в коде приложения.Когда десятки программистов работают над схемой с сотнями таблиц и десятками тысяч типов транзакций, затраты на определение условий гонки могут стать чрезмерными при менее строгих уровнях изоляции, и, как правило, становится более рентабельным использование сериализуемых транзакций..
В настоящее время наиболее часто реализуемым методом обеспечения сериализуемых транзакций является строгая двухфазная блокировка (S2PL), которая основывается на блокировке блокировок, удерживаемых до конца каждой транзакции, и обнаружении взаимоблокировок с откатами для их устранения.В нагрузках с очень небольшим количеством конфликтов записи может использоваться оптимистический контроль параллелизма (OCC).Он отслеживает «набор чтения» в ходе транзакции и откатывается, если любая другая транзакция изменяет набор чтения.Некоторые продукты баз данных называют изоляцию моментальных снимков сериализуемой, хотя на самом деле она не обеспечивает гарантий, требуемых стандартом SQL.Новый метод, называемый Serializable Snapshot Isolation (SerializableSI или SSI), был впервые описан в академической статье, представленной на ACM SIGMOD 2008 года, и используется в PostgreSQL версии 9.1 и более поздних.Он использует изоляцию моментальных снимков плюс отслеживание шаблонов зависимостей чтения-записи, чтобы определить, когда транзакция должна быть отменена.Есть другие методы, которые встречаются реже в производстве.Каждый из них имеет свой набор преимуществ и недостатков, предоставляя различные точки безубыточности для такого вопроса.