журнал транзакций в оперативной памяти или физический файл?

9

Я новичок в транзакции, просто вопрос по журналу транзакций. Мы знаем, что когда мы фиксируем транзакцию, изменения записываются в журнал транзакций, но находится ли журнал транзакций в ОЗУ или физических файлах? Если он находится в ОЗУ и когда происходит сбой системы, очевидно, что ОЗУ будет стерто заново, поэтому мы теряем информацию о транзакции, так как же мы можем восстановить фиксацию?


источник

Ответы:

15

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

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

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

HandyD
источник
2
Документировано здесь: docs.microsoft.com/en-us/sql/relational-databases/…
Дэвид Браун - Microsoft,
4

База данных состоит из двух файлов: файла данных и файла журнала транзакций. Они хранятся на диске.

Каждая база данных имеет кэш журналов в оперативной памяти, когда транзакция фиксируется, она перемещается в кэш журналов в ожидании сброса на диск. Поэтому временно, когда преобразование было зафиксировано и ожидает его записи на диск, оно находится в памяти, однако в конечном итоге оно сохраняется на диске в файле, а не в ОЗУ.

Я упрощаю здесь, я предлагаю вам прочитать журналы транзакций, я рекомендую одну из лекций Пола Рэндалса здесь

https://youtu.be/LvlFgxZZOj4

kevinnwhat
источник
@kevinwhat Спасибо за ваш ответ. Итак, если мы фиксируем одну транзакцию и она обновляется в кэше журнала, то происходит сбой системы до того, как кэш журнала сбрасывается на диск, так как мы можем восстановить транзакцию?
1
В этом случае изменения @slowjams будут отменены, так как они были нестабильны на диске в журнале во время сбоя.
Шон Галларди - Пользователь на пенсии
3
slowjamsm то, что вы desrcibe не происходит. Фиксация синхронная - она ​​не завершается до тех пор, пока все записи журнала до того момента времени не будут записаны на диск («усилены»).
Тибор Караси
0

Как написано другими людьми, журнал транзакций всегда будет записываться на диск, прежде чем вы COMMITвернете управление вашему приложению. По этой причине файл журнала всегда должен быть размещен на быстром SSD.

Но для полноты: по крайней мере с Windows Server 2016 плюс SQL Server 2016 вы можете добавить NVDIMM (энергонезависимый DIMM = Flash или RAM с резервным питанием от батареи) на ваш сервер. В этом случае SQL Server будет использовать эти NVDIMM для размещения «горячего» хвоста журнала транзакций на NVDIMM, так как они переживают событие отключения питания по определению.

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

Томас Франц
источник
3
Это не совсем ответ на вопрос, это плагин для более быстрых дисков. Журналы не всегда должны быть в быстром хранилище, есть много деловых причин их не делать. Если ты хочешь быстро, покупай быстро, если тебе не нужна скорость ...
Джеймс Дженкинс