Вы можете найти довольно полное руководство по этому вопросу здесь , но в итоге SQL Server не вернет управление приложению, которое совершило транзакцию, пока эта транзакция не будет защищена на диске. В частности, после того, как он был укреплен в файле журнала транзакций, управление может быть возвращено.
На этом этапе данные не могут быть защищены в файл данных, они все еще могут находиться в кеше буфера данных, но поскольку они были добавлены в журнал транзакций, восстановление базы данных в случае сбоя может восстановить это. транзакции и сохраните изменения безопасно.
В памяти имеется буферный кэш журнала, который используется для снижения влияния последовательных операций записи в журналы транзакций. Буфер сбрасывается на диск при нескольких условиях, но одним из них является фиксация транзакции. До тех пор, пока эти данные не будут защищены, управление не будет возвращено вызывающей стороне, поэтому даже если у вас возникнет ошибка во время этой очистки буфера, согласованность транзакций сохраняется, поскольку эта транзакция еще не считается подтвержденной. Вы потеряете изменения данных в этой транзакции, но поскольку она не была зафиксирована, ваше приложение уже будет считать эти изменения потерянными, поскольку фиксация никогда не была завершена.
База данных состоит из двух файлов: файла данных и файла журнала транзакций. Они хранятся на диске.
Каждая база данных имеет кэш журналов в оперативной памяти, когда транзакция фиксируется, она перемещается в кэш журналов в ожидании сброса на диск. Поэтому временно, когда преобразование было зафиксировано и ожидает его записи на диск, оно находится в памяти, однако в конечном итоге оно сохраняется на диске в файле, а не в ОЗУ.
Я упрощаю здесь, я предлагаю вам прочитать журналы транзакций, я рекомендую одну из лекций Пола Рэндалса здесь
https://youtu.be/LvlFgxZZOj4
источник
Как написано другими людьми, журнал транзакций всегда будет записываться на диск, прежде чем вы
COMMIT
вернете управление вашему приложению. По этой причине файл журнала всегда должен быть размещен на быстром SSD.Но для полноты: по крайней мере с Windows Server 2016 плюс SQL Server 2016 вы можете добавить NVDIMM (энергонезависимый DIMM = Flash или RAM с резервным питанием от батареи) на ваш сервер. В этом случае SQL Server будет использовать эти NVDIMM для размещения «горячего» хвоста журнала транзакций на NVDIMM, так как они переживают событие отключения питания по определению.
Это резко увеличило бы скорость записи (поскольку оперативная память намного быстрее, чем даже твердотельный накопитель), но вы будете упоминать ее только в базе данных с множеством небольших операций записи / фиксации (например, в базе данных, занятой в онлайн-магазине или в онлайн-игре со многими одновременные игроки).
источник