автокоммит базы данных - идет ли он прямо на диск? - PullRequest
1 голос
/ 18 октября 2008

Итак, я знаю, что autocommit фиксирует каждый оператор sql, но обновления базы данных идут непосредственно на диск или они остаются в кеше до сброса?

Я понимаю, что это зависит от реализации базы данных.

Означает ли автоматическая фиксация а) каждый оператор является полной транзакцией и идет прямо на диск или б) каждый оператор является полной транзакцией, и он может перейти в кэш, где он будет сброшен позже, или может перейти прямо на диск

Разъяснение было бы здорово.

Ответы [ 6 ]

4 голосов
/ 18 октября 2008

Автоматическая фиксация просто означает, что каждая инструкция находится в своей собственной транзакции, которая фиксируется немедленно. Это отличается от «нормального» режима, в котором вы должны явно BEGIN транзакцию, а затем COMMIT после завершения (обычно после нескольких операторов).

Фраза "автоматическая фиксация" не имеет ничего общего с доступом к диску или кэшированием. В качестве детали реализации, большинство баз данных будут записывать на диск при фиксации, чтобы избежать потери данных, но это не обязательно в спецификации.

1 голос
/ 18 октября 2008

Commit не гарантирует, что что-то было записано на диск, только то, что ваша транзакция была завершена и изменения теперь видны другим пользователям.

Постоянный не обязательно означает запись на диск (т.е. длительный) ... Даже если «коммит» ожидает завершения транзакции, его можно настроить с некоторыми базами данных.

Например, Oracle 10gR2 имеет несколько режимов фиксации , включая IMMEDIATE, WAIT, BATCH, NOWAIT. BATCH поставит в очередь изменения, а модуль записи запишет эти изменения на диск в будущем. NOWAIT немедленно вернется без учета ввода / вывода.

Точное поведение commmit зависит от конкретной базы данных и часто может быть настроено в зависимости от вашего допуска к потере данных.

1 голос
/ 18 октября 2008

Для протоколов ARIES фиксация транзакции включает в себя протоколирование всех изменений, выполненных в этой транзакции Изменения немедленно сбрасываются в logfile , но не обязательно в файл данных (это зависит от реализации). Этого достаточно, чтобы гарантировать, что изменения могут быть восстановлены в случае сбоя. Итак, (б).

0 голосов
/ 18 октября 2008

Если транзакция базы данных, как утверждается, является ACID, то D (долговечность) требует, чтобы совершенная транзакция пережила сбой сразу после успешной фиксации. Для базы данных с одним сервером это означает, что она находится на диске (фиксация диска). Для некоторых современных многосерверных баз данных это также может означать, что транзакция отправляется на один или несколько серверов (фиксация в сети, которые обычно намного быстрее, чем на диске), при условии, что вероятность одновременного отказа нескольких серверов намного меньше.

0 голосов
/ 18 октября 2008

Это зависит от используемой вами СУБД. Например, Firebird имеет эту опцию в файле конфигурации. Если вы включите Принудительная запись , изменения перейдут непосредственно на диск. В противном случае они передаются в файловую систему, а фактическое время записи зависит от кэширования операционной системы.

0 голосов
/ 18 октября 2008

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

...