Published on

April 9, 2012

Исследование высокой доступности SQL Server: Зеркалирование против кластеризации с отказоустойчивостью

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

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

Давайте ближе рассмотрим, как работает автоматическое восстановление страниц. Чтобы продемонстрировать эту функцию, я настроил зеркало между двумя локальными экземплярами на своем компьютере. Зеркальная база данных называется MyData, и экземпляр sqlmaster\sql2008 в настоящее время является основным.

Сначала я создал фиктивную таблицу с именем TestData в базе данных MyData. Эта таблица имеет столбец с идентификатором и столбец с 2000 символами. Я вставил некоторые данные в эту таблицу.

use MyData
go

create table TestData (
    id int identity,
    col1 char(2000)
)
go

insert into TestData (col1) values (replicate('a', 2000))
go

Затем я симулировал сбой диска на сервере sqlmaster\sql2008, остановив службу и изменяя файл .mdf с помощью шестнадцатеричного редактора. Я заменил некоторые данные на нули, чтобы внести повреждение.

Когда я снова запустил службу SQL Server и выполнил сканирование таблицы, выполнив запрос SELECT * FROM TestData, я столкнулся с ошибкой, указывающей на ошибку ввода-вывода на основе логической согласованности. Это сообщение об ошибке является серьезным состоянием, которое угрожает целостности базы данных и должно быть немедленно исправлено.

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

Чтобы просмотреть подробности автоматического восстановления страниц, SQL Server предоставляет представление динамического управления (DMV) с названием sys.dm_db_mirroring_auto_page_repair. При выполнении запроса к этому представлению мы можем увидеть, какие страницы были восстановлены.

SELECT DB_NAME(database_id) as DatabaseName, *
FROM sys.dm_db_mirroring_auto_page_repair;

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

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

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.