Re[81]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.10.21 11:25
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>В частности, от идеи работать с memory-mapped file, похоже, придётся отказаться. Потому, что write-ahead log для него потребует flush на каждое изменение, вместо одного flush на коммит.

НС>Так а зачем лог и данные в одном файле держать? Сиквел держит в разных, и для лога MMF в одно место не уперся, там все операции последовательные. А для файла страниц MMF — то что дохтур прописал.
Даже если держим в разных, WAL требует, чтобы страницы лога были записаныдо того, как на диск уедут изменённые страницы данных.
В MMF мы не можем этого гарантировать.
Поэтому возможна такая ситуация:
1. мы хотим внести изменение x = x + 1.
2. Мы добавляем к логу запись (@x, oldX, newX); (без flush)
3. Вносим изменение x = x + 1 в станицу данных;
4. Внезапно ОС решает, что пора скинуть страницу данных на диск
5. Происходит сбой (до коммита транзакции).
Всё — у нас на диске есть новое значение x, но нет лог-записей для того, чтобы откатить x обратно.
Чтобы предотвратить это, мы будем вынуждены делать flush лога между 2 и 3.
Альтернатива — иметь свой менеджер буферов, который в момент вытеснения буфера на диск делает flushLog(minLSN), гарантируя фиксацию нужной нам части лога.
Насколько я знаю, MS SQL идёт именно по этому пути.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.