transaction log
От: Merle Австрия http://rsdn.ru
Дата: 22.07.03 12:34
Оценка: 46 (3)
#Имя: FAQ.db.transactionlog
LF>Когда сервер созраняет новые значения в логе, неужели при изменении блобов там они записываются целиком?

AS>Все зависит от типа модели восстановления, если речь идет о MS SQL.

AS>При full recovery model и simple recovery model они просто записываются. При bulk recovery model они не записываются.

AS>Операции redo и undo это понятно. А вот лог redo это что-то новое для меня.

Ааа... Сорьки, не догнал сразу, мне опять за внимательность незачет..

На самом деле способов организации лога примерно три:

Есть Undo Log:
Сначало все пишем в базу, потом, после коммита в лог, если в лог commit не успели, значит все откатываем взад беря старые данные из лога.
Недостатки очевидны, слишком много IO операций, тоесть каждая транзакция должна быть записана на диск не только в логе, но и в самой базе.

Есть Redo Log:
Все пишем в лог, но в базу до commit'а мы записать ничего не можем, так как вслучае сбоя старые значения незафиксированных транзакций неоткуда будет взять. Отсюда могут быть проблемы с памятью при больших транзакциях или при большем количестве транзакций.

Ну и есть Redo/Undo:
В этом случае в логе хранится два значения старое и новое, соответственно в случае сбоя для всех закоммиченных транзакций накатываем новое значение, для всех незакоммиченых старое.
Мы уже победили, просто это еще не так заметно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.