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:
В этом случае в логе хранится два значения старое и новое, соответственно в случае сбоя для всех закоммиченных транзакций накатываем новое значение, для всех незакоммиченых старое.
Автор: Merle    Оценить