Опубликован: 30.04.2006 | Уровень: специалист | Доступ: платный
Лекция 2:

Архитектура хранилища Exchange Server

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Восстановление данных и журналы транзакций

Три из десяти вопросов, получаемых технической поддержкой Microsoft, связаны с ESE и восстановлением данных. В данном разделе обсуждается роль журналов транзакций и рассказывается о том, как они используются при восстановлении баз данных после сбоев. Здесь также рассказывается о причинах, вызывающих сбои в работе баз данных, и приводятся некоторые распространенные сообщения об ошибках, появляющиеся при сбоях. В лекции 8 "Функциональность, безопасность и поддержка Exchange Server 2003" приводится пошаговое описание процесса восстановления базы данных.

Extensible Storage Engine

Extensible Storage Engine представляет собой систему ведения журналов транзакций, обеспечивающую целостность данных и их сохранность в случае системных сбоев или неполадок в работе носителей. Разработка ESE велась согласно четырем критериям. Первым из них являлся вопрос, что произойдет в случае сбоя. Каждая новая разработка должна была улучшить восстанавливаемость при возникновении неполадок. Вторым критерием было уменьшение числа операций ввода/вывода, производимых ESE, и для достижения этой цели было сделано все возможное. Три операции ввода/вывода выполняются быстрее, чем четыре, а четыре – быстрее, чем пять. Даже если достижение этой цели подразумевает добавление в операцию ввода/вывода дополнительных вычислений, исключение одной операции ввода/вывода значительно улучшает производительность. Третьим критерием при разработке машины базы данных было обеспечение наивысшего уровня самонастраиваемости. Наконец, предусматривалось ее функционирование в течение времени, максимально приближенного к 24 часам в сутки и 7 дням в неделю. Достижению последней цели способствует обеспечение работы с базой данных в режиме онлайн.

Как работает ESE

Основная функция ESE заключается в управлении транзакциями. ESE выполняет проверку целостности базы с помощью четырех тестов, называемых тестами ACID.

  • Atomiс (Элементарность). Должны быть завершены либо все операции, выполняющиеся в транзакции, либо не будет завершена ни одна из них.
  • Consistent (Консистентность). Транзакция должна начинаться в базе данных в консистентном (неизмененном и работоспособном) состоянии и оставлять базу данных после своего завершения в таком же состоянии.
  • Isolated (Изолированность). Изменения не видны до тех пор, пока не завершатся все операции транзакции. По завершении выполнения всех операций, если база данных находится в консистентном состоянии, транзакция считается фиксированной.
  • Durable (Стойкость). Фиксированные транзакции сохраняются даже в том случае, если в системе возникают ощутимые проблемы, такие как полный отказ системы.
Примечание. Свойство стойкости проявляется при системных сбоях, возникающих в процессе выполнения операций. Если некоторые операции были завершены перед сбоем в системе (например, электронная почта удалена из папки Inbox [Входящие] и скопирована в папку Private [Личное], но счетчик элементов в каждой папке не обновлен), то после загрузки компьютера при своем запуске процесс Store.exe обнаружит, что база данных находится в неконсистентном состоянии, и произведет откат операций. Эта мера предосторожности обеспечивает невозможность утери сообщения при перемещении, а также отсутствие дубля сообщения после перезагрузки. ESE обеспечивает тот факт, что база данных после перезагрузки компьютера находится в том же самом состоянии, в котором она находилась непосредственно перед началом выполнения операций.
Пример из практики.

Что происходит при внесении изменения в страницу базы данных

Предположим, что важное сообщение электронной почты перемещается из папки Inbox (Входящие) в частную папку с именем Private (Личное). Для осуществления этой транзакции должны быть выполнены следующие операции:

  • добавление сообщения электронной почты в папку Private (Личное);
  • удаление сообщения электронной почты из папки Inbox (Входящие);
  • обновление информации о каждой папке для корректного отображения числа элементов в папках;
  • фиксирование транзакции во временном файле журнала транзакции.

Так как эти операции выполняются в одной и той же транзакции, Exchange либо выполняет их все, либо не выполняет ни одной. Это и есть тест Atomic (Элементарность). Операция фиксирования не может осуществляться до тех пор, пока не будут успешно выполнены все операции. После фиксирования транзакции тест Isolated (Изолированность) считается пройденным. База данных остается в консистентном состоянии, поэтому тест Consistent (Консистентность) также считается пройденным. Таким образом, после фиксирования транзакции в базе данных изменения будут сохранены даже в случае возникновения сбоя. Это обстоятельство отвечает требованиям теста Durable (Стойкость).

Каким образом осуществляется хранение данных. В файле базы данных ESE данные распределены по 4-килобайтным секциям, называемым страницами. Информация считывается из базы данных ESE и загружается в память в виде страницы. Каждая страница содержит определения данных, сами данные, индексы, проверочные суммы, флаги, временные штампы и другую информацию B-дерева. Страницам в базе данных присваиваются последовательные номера для улучшения производительности. Страницы содержат либо непосредственные данные, либо указатели на другие страницы, содержащие данные. Эти указатели формируют структуру B-дерева, и редко встречается дерево, содержащее больше трех или четырех уровней. Следовательно, структура B-дерева широка, но неглубока.

Дополнительная информация. Для получения более подробной информации о структурах B-дерева баз данных следует посетить несколько сайтов, на которых имеется большой объем материалов по этой теме. Начните с посещения страницы http://www.bluerwhite.org/btree. Для ознакомления с краткими сведениями о структуре B-дерева посетите страницу http://searchdatabase.techtarget.com/sDefinition/0,,sid13_gci508442,00.html. И, как известно, с помощью системы Google можно получить дополнительные источники информации, введя строку поиска "B-tree".

Транзакция – это последовательность изменений, вносимых в страницу базы данных. Каждое изменение называется операцией. После выполнения полного набора операций над объектом базы данных транзакция считается завершенной.

Примечание. База данных ESE содержит до 232 (4 292 967 296) страниц. Принимая в расчет 4 Кб на каждую страницу, база данных ESE занимает объем 16 терабайт (4 292 967 296 х 4096 = 17 583 994 044 416 байт) данных. На практике размер базы данных ограничен пространством, обеспечиваемым аппаратными устройствами, методами архивации и восстановления, а не структурой ESE.

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

Операции в процессе своего выполнения записываются в хранилище версий. Хранилище версий содержит перечень всех изменений, внесенных в страницу, но еще не зафиксированных. Если питание сервера прервется перед фиксированием последовательности операций, то в процессе отката (отмены) ESE незавершенных операций будет произведено обращение к хранилищу версий. Хранилище версий является виртуальным хранилищем, поэтому на жестком диске нет базы данных с именем Version Store. Хранилище версий располагается в оперативной памяти и действительно содержит версии одной и той же страницы, считанной с диска в память. На рисунке 2.5 приведена наглядная демонстрация этого процесса.

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

Совет. Одна операция может требовать столько времени для выполнения или быть такой обширной, что в хранилище версий понадобится записать несколько сотен мегабайт данных. Такое может случиться, если операция заключается в индексировании большой таблицы или записи очень большого файла в базу данных. Так как хранилище версий отслеживает все изменения, внесенные в базу данных с момента начала самой старой транзакции, может возникнуть ошибка "-1069 error(JET_errVersionStoreOutOfMemory)". Если это произошло, попробуйте переместить базы данных и хранилища на другой диск с большим объемом свободного пространства, а также рассмотрите вопрос об увеличении объема оперативной памяти компьютера.
Метод обработки транзакций ESE

Рис. 2.5. Метод обработки транзакций ESE

Зачастую кэшированные версии изменений страниц не записываются на диск сразу. Это не является проблемой, так как информация записывается в файлы журналов. Если изменения в памяти будут утеряны, при запуске ESE файлы журнала будут считаны вновь (этот процесс обсуждается более подробно далее в лекции), и транзакции будут записаны на диск. Более того, отсутствие немедленной записи кэшированной информации в базу данных увеличивает производительность. Представьте себе ситуацию, в которой страница загружается из памяти и затем подвергается изменению. Если в скором времени после этого ее вновь потребуется изменить, ее не нужно повторно считывать с диска, так как она уже находится в памяти. Таким образом, изменения базы данных могут быть "пакетными", что увеличит производительность.

Файлы базы данных. База данных представляет собой комбинацию файлов .EDB и .STM, хранимых на жестком диске. По существу, все транзакции записываются в один из этих файлов. Тем не менее, перед записью на диск для страницы вычисляется проверочная сумма, после чего эта сумма записывается в страницу вместе с остальными данными. При считывании страницы с диска проверочная сумма вычисляется повторно, и номер страницы проверяется для обеспечения его соответствия номеру запрошенной страницы. Если вычислить проверочную сумму не удается, или если в номере страницы присутствует несоответствие, генерируется сообщение об ошибке "-1018". Эта ошибка означает, что данные, записанные на диск, не являются данными, считанными ESE с диска в оперативную память.

Примечание. Начиная с пакета обновления Service Pack 2 (SP2) в Exchange Server 5.5 и по сей день, в Exchange Server 2003 ESE осуществляет 16 попыток чтения данных перед генерированием ошибки -1018, что уменьшает вероятность возникновения неполадки вследствие какого-либо кратковременного события. Следовательно, возникновение ошибки -1018 означает, что ESE, прежде чем отобразить уведомление об ошибке, многократно повторила попытку чтения данных.
< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Евгений Макаревич
Евгений Макаревич
Россия, Москва, РОСНОУ
Димон Кучер
Димон Кучер
Украина