|
По материалам статьи Don
Schlichting: MS
SQL Server Distributed Partitioned Views Part 2 Во второй статье рассматривается использование распределенных секционированных представлений для операций вставки, обновления и удаления. Содержание
Связи Таблицы Представления Координатор распределенных транзакций lazy schema validation Collation Compatible Все понемногу Заключение В 1 части был произведен обзор основ распределенных секционированных представлений, объединенных баз данных, и горизонтального секционирования. В качестве примеров были созданы связанный сервер, секционированная таблица и представление, использующее оператор UNION. Во второй части будет показан новый пример, демонстрирующий выражения DML (INSERT, UPDATE и DELETE). Мы начнем с создания тестовой среды. Примеры будут
создаваться на основе двух машин, на каждой из которых
установлен SQL 2000 под Windows 2000. Хотя в наших примерах
будут только две машины, те же самые правила подходят для трех
и более.
В результате должны быть возвращены все записи таблицы Authors. Установите соединение со вторым сервером Server2 как sa и выполните следующий код:
Объяснение вышележащего кода см. в 1 части. После создания связанных серверов следующим шагом является
создание тестовых таблиц. Представьте таблицу заказов,
содержащую гигабайты истории продаж и снижающуюся
производительность работы с этой таблицей. Мы разделим эту
большую таблицу на две части. Первый сервер Server1 будет
хранить продажи с порядковыми номерами меньше 1 000. Заказы с
порядковыми номерами больше 1 000 будут храниться на втором
сервере Server2.
На втором сервере Server2 код практически тот же. Меняются только название и ограничение:
Необходимо отметить несколько пунктов. Во-первых, требуется
ограничение CHECK. Оптимизатор запросов использует это
ограничение, чтобы определить, на каком сервере расположены
данные. Ограничение CHECK должно позволять данным храниться на
одном, и только одном сервере.
Следующее представление является простой выборкой данных с двух серверов в один результирующий набор. На первом сервере Server1 создайте представление со следующим кодом:
На втором сервере Server2 код снова практически тот же:
Существует несколько правил для представлений DML. Чтобы
представление было обновляемым, должны возвращаться все
столбцы, включенные в первичный ключ. На всех столбцах, не
включенных в представление, должны быть разрешены значения
NULL.
В результате должен быть возвращен пустой результирующий набор. Перед тем, как начать выполнение выражений DML, еще остается пара вопросов, требующих рассмотрения. Координатор распределенных транзакций Перед выполнением примеров требуется запустить координатор
распределенных транзакций (DTC). DTC управляет выполнением
транзакций, когда задействованы несколько различных источников
данных. Для Windows 2000 требуется service pack 1.
![]() Хотя это не является обязательным требованием, но установка опции спящего режима проверки схемы (lazy schema validation) повышает производительность запросов. Проверка схемы - это проверка удаленной схемы на то, что ее метаданные верны. При установке этой проверки в спящий режим SQL не проверяет верность удаленных метаданных относительно нашего запроса до его выполнения. Если произошло изменение удаленной схемы, то наш запрос вернет ошибку. В нашем случае мы знаем, что удаленная таблица верна и имеет ту же структуру, что и наша локальная таблица. Не проверяя удаленную схему, мы получим повышение производительности.
Если мы дадим SQL информацию, что сортировка и набор символов одинаковы у локального и удаленного серверов, то удаленный сервер сможет принимать участие в сравнениях. В противном случае все данные сначала будут приходить на локальный сервер. Все сравнения в этом случае будут делаться локально, снижая производительность. Этого можно избежать, включив опцию совместимого сопоставления (collation compatible). Эта опция также не является обязательным требованием, а используется для оптимизации.
Начнем со вставки данных в новую пустую таблицу. Следующий код выполнит вставку одной записи:
Сама вставка - это операция, которую Transact-SQL выполняет
регулярно. Опция XACT_ABORT требуется выражений, которые
модифицируют данные. Когда опция установлена, любая ошибка
времени исполнения приводит к откату всей
транзакции.
![]() Удаление записей включает те же шаги:
Недавно добавленная запись удалена. Отметим, что выражению WHERE не требуется ссылаться на наш первичный ключ или столбец с ограничением CHECK. Представление может обращаться к связанной таблице по
имени, состоящем из четырех частей (как это сделано в нашем
примере), при использовании функции OPENROWSET или функции
OPENDATASOURCE. Объединенные базы данных наряду с распределенными секционированными представлениями могут повысить производительность на очень больших таблицах. Для этого требуются тщательность и планирование, особенно для операций DML. Но повышение производительности стоит усилий по дополнительному администрированию. |
Перевод Виталия Степаненко 2004г. |