Введение
В информатике, теневое копирование страниц — это метод обеспечения атомарности и устойчивости (два свойства ACID) в системах баз данных. Страница в данном контексте относится к единице физического хранения (вероятно, на жестком диске), обычно порядка от 1 до 64 КиБ. Теневое копирование страниц — это техника «копирование при записи», предназначенная для избежания непосредственного обновления страниц. Вместо этого, когда страницу необходимо изменить, выделяется теневая страница. Поскольку на теневую страницу нет ссылок (с других страниц на диске), её можно свободно модифицировать, не беспокоясь об ограничениях согласованности и т.п. Когда страница готова стать устойчивой, все страницы, ссылавшиеся на исходную, обновляются, чтобы ссылаться на новую заменяющую страницу. Поскольку страница «активируется» только тогда, когда она готова, она является атомарной. Если ссылающиеся страницы также должны быть обновлены посредством теневого копирования страниц, эта процедура может рекурсивно повторяться многократно, что может быть весьма затратно. Одно из решений, используемое файловой системой Write Anywhere File Layout (WAFL), заключается в отложенном обеспечении устойчивости страниц (т.е. использовании записи с отложенным подтверждением). Это значительно повышает производительность, избегая множества записей в горячие точки в верхней части иерархии ссылок (например, суперблок файловой системы) за счет высокой задержки фиксации. Предварительная запись журнала (write-ahead logging) — более популярное решение, использующее непосредственное обновление. Теневое копирование страниц аналогично старому методу пакетной обработки «мастер-новый мастер», использовавшемуся в мейнфреймовых системах баз данных. В этих системах вывод каждой партии (возможно, работы за день) записывался на два отдельных диска или другую форму носителя информации. Один из них хранился как резервная копия, а другой использовался в качестве отправной точки для работы на следующий день. Теневое копирование страниц также похоже на чисто функциональные структуры данных, поскольку избегает непосредственного обновления.