2008-10-17 5 views
1

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

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

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

Уточнение будет замечательным.

Спасибо заранее, JBU

ответ

4

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

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

1

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

-1

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

+0

Неточная точность. СУБД уделяют большое внимание обеспечению того, чтобы коммиты были атомарными. Протоколы 2PC или 3PC предназначены для использования при работе нескольких серверов - не для одного сервера. – 2008-10-17 21:25:15

0

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

1

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

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

Например, Oracle 10gR2 имеет several commit modes, включая IMMEDIATE, WAIT, BATCH, NOWAIT. BATCH будет в очереди буфера изменений, и писатель будет записывать изменения на диск в будущем. NOWAIT немедленно вернется без учета ввода-вывода.

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

0

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