Что такое Multiversion Concurrency Control (MVCC) и кто его поддерживает?

Недавно Джефф опубликовал сообщение о своих проблемах с взаимоблокировками базы данных, связанными с чтением. Управление многоверсионностью (MVCC) утверждает, что решает эту проблему. Что это такое и какие базы данных его поддерживают?

обновлено: они его поддерживают (какие другие?)

  • оракул
  • postgresql

person Mark Harrison    schedule 26.08.2008    source источник
comment
не могу получить оригинальный технический документ Джима Старки, но есть более поздние сводки: web.firebirdsql. org/doc/whitepapers/fb_vs_ibm_vs_oracle.htm mike.kruckenberg.com /archives/2006/04/jim_starkey_int.html   -  person Arioch 'The    schedule 24.04.2013
comment
движок базы данных H2 также поддерживает MVCC по умолчанию.   -  person Basil Bourque    schedule 13.08.2016
comment
en.wikipedia.org/wiki/List_of_databases_using_MVCC   -  person m1m1k    schedule 26.06.2019


Ответы (15)


Oracle имеет отличную систему управления несколькими версиями уже очень давно (по крайней мере, с oracle 8.0).

Следующее должно помочь.

  1. Пользователь A запускает транзакцию и обновляет 1000 строк с некоторым значением во время T1.
  2. Пользователь B читает те же 1000 строк в момент времени T2.
  3. Пользователь A обновляет строку 543 со значением Y (исходное значение X)
  4. Пользователь B достигает строки 543 и обнаруживает, что транзакция выполняется с момента времени T1.
  5. База данных возвращает неизмененную запись из журналов. Возвращаемое значение — это значение, которое было зафиксировано во время, меньшее или равное T2.
  6. Если запись не может быть извлечена из журналов повторного выполнения, это означает, что база данных настроена неправильно. Для журналов должно быть выделено больше места.
  7. Таким образом достигается согласованность чтения. Возвращаемые результаты всегда одинаковы относительно времени начала транзакции. Таким образом, внутри транзакции достигается согласованность чтения.

Я попытался объяснить максимально простыми словами... много версий в базах данных.

person Krantz    schedule 26.08.2008
comment
+1 Еще до Oracle 8.0 - я думаю, с Oracle 4.0. - person Tony Andrews; 26.11.2010
comment
И то же самое между последовательностью чтения и повторным чтением? - person Chao; 12.02.2015
comment
database returns the unmodified record from the Logs[...]If the record could not be retreived from the redo logs Вы имеете в виду, из сегмента отмены. Журналы повторов предназначены для восстановления базы данных после сбоя, а также для репликации. Они помогают реализовать A и D ACID и спроектированы так, чтобы быть линейными, доступными только для записи. Согласованность чтения, I ACID, обеспечивается сегментами отмены. - person Amit Naidu; 27.03.2019

Контроль параллелизма нескольких версий PostgreSQL

А также эту статью, в которой представлены схемы как работает MVCC при выдаче операторов INSERT, UPDATE и DELETE.

person thelsdj    schedule 26.08.2008

В следующем есть реализация MVCC:

SQL Server 2005 (не по умолчанию, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (начиная с версии 8)

MySQL 5 (только с таблицами InnoDB)

PostgreSQL

Жар-птица

Информикс

Я почти уверен, что Sybase и IBM DB2 Mainframe/LUW не имеют реализации MVCC.

person John Greeley    schedule 04.06.2009

Firebird делает это, они называют это MGA (Multi Generational Architecture).

Они сохраняют исходную версию нетронутой и добавляют новую версию, которую может видеть только сеанс, использующий ее, при фиксации старая версия отключается, а новая версия включается для всех (файл накапливается с данными и нуждается в регулярной очистке). .

Oracle сам перезаписывает данные и использует откат сегментов/табличных пространств отмены для других сессий и для отката.

person Osama Al-Maadeed    schedule 29.10.2008
comment
То же самое для Interbase, хотя я не думаю, что есть смысл использовать его, когда есть firebird. ibexpert.net/ibe/ - person Arioch 'The; 17.04.2013
comment
Firebird - это Interbase... :) - person Osama Al-Maadeed; 24.04.2013
comment
Firebird WAS Interbase, они есть и будут расходиться - person Arioch 'The; 24.04.2013

XtremeData dbX поддерживает MVCC.

Кроме того, dbX может использовать примитивы SQL, реализованные в оборудовании FPGA.

person lit    schedule 15.11.2010

SAP HANA также использует MVCC. SAP HANA — это полноценная вычислительная система в памяти, поэтому затраты на MVCC для выбора очень низкие... :)

person OlivierH    schedule 12.09.2012
comment
вы можете добавить ссылку на это заявление. - person Alberto de Paola; 27.09.2012

Вот ссылка на страницу документации PostgreSQL на MVCC. Цитата выбора (выделено мной):

Основное преимущество использования модели управления параллелизмом MVCC по сравнению с блокировкой заключается в том, что в MVCC блокировки, полученные для запроса (чтения) данных, не конфликтуют с блокировками, полученными для записи данных, и поэтому чтение никогда не блокирует запись, а запись никогда не блокирует чтение. .

Вот почему Джеффа так смущали его тупиковые ситуации. Чтение никогда не должно вызывать их.

person Neall    schedule 26.08.2008

SQL Server 2005 и более поздние версии предлагают MVCC в качестве опции; однако это не значение по умолчанию. MS называет это изоляцией моментальных снимков, если не изменяет память.

person DrPizza    schedule 26.08.2008

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

Стоимость этого - гораздо большая база данных и более медленный выбор, поскольку каждому требуется подзапрос для поиска последней записи.

Это отличное решение для систем, требующих стопроцентного аудита всех изменений.

person Eric Z Beard    schedule 26.08.2008

MySQL также использует MVCC по умолчанию, если вы используете таблицы InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

person Seun Osewa    schedule 29.10.2008

Компания McObject объявила в ноябре 2009 года, что добавила дополнительный менеджер транзакций MVCC в свою встроенную базу данных eXtremeDB:

http://www.mcobject.com/november9/2009

eXtremeDB, первоначально разработанная как система баз данных в оперативной памяти (IMDS), теперь доступна в редакциях с гибридным хранилищем (в памяти/на диске), высокой доступностью, поддержкой 64-разрядных систем и т. д.

person Ted Kenney    schedule 31.07.2010

В этой статье, написанной соучредителем и генеральным директором McObject, в журнале RTC Magazine есть хорошее объяснение MVCC — с диаграммами — и некоторые показатели производительности для eXtremeDB:

http://www.rtcmagazine.com/articles/view/101612

Очевидно, что MVCC становится все более выгодным, поскольку приложение масштабируется и включает множество задач, выполняемых на нескольких ядрах ЦП.

person Ted Kenney    schedule 31.07.2010

В DB2 версии 9.7 есть лицензионная версия postgress plus. Это означает, что эта функция (в правильном режиме) поддерживает эту функцию.

person Ciaran De Buitlear    schedule 20.05.2010

Berkeley DB также поддерживает MVCC.

И когда в MySQL используется механизм хранения BDB , MySQL также поддерживает MVCC.

Berkeley DB — очень мощная настраиваемая СУБД, полностью соответствующая требованиям ACID. Он поддерживает несколько различных методов индексации, репликацию master-slave, может использоваться как чистое хранилище значений ключа с собственным динамическим API или запрашиваться с помощью SQL, если это необходимо. Стоит взглянуть.

Другой ориентированной на документы СУБД, поддерживающей MVCC, может быть CouchDB. MVCC здесь также является большим плюсом для встроенной одноранговой репликации.

person chris polzer    schedule 25.04.2011

Из http://vschart.com/list/multiversion-concurrency-control/

Couchbase, OrientDB, CouchDB, PostgreSQL, Project Voldemort, BigTable, Percona Server, HyperGraphDB, Drizzle, Cloudant, IBM DB2, InterSystems Caché, InterBase

person Sean Timm    schedule 23.02.2012