MS SQL Server 6.5

Автор работы: Пользователь скрыл имя, 19 Ноября 2009 в 17:56, Не определен

Описание работы

Контрольная работа

Файлы: 1 файл

Реферат _MS SQL Server 6.5_.doc

— 217.00 Кб (Скачать файл)

Тип блокировки 

shared 

update 

exclusive 

shared 

OK 

OK 

X  

update 

OK 

X 

exclusive 

X 
 

Таблица 3. 

Уровень блокировки может распространяться на: 

• запись (для  операций insert); 

• cтраницу - 2-килобайтный  фрагмент данных или индексов; 

• расширение (extent) - 8 последовательных страниц, используется при размещении или высвобождении  страниц (например, в командах create/drop или когда операция вставки insert требует  выделения новых страниц памяти); 

• таблицу, включая  все входящие в нее данные и  индексы[2]. 

В следующей  версии блокировка уровня записи будет  возможна для всех типов транзакций. Блокировка уровня записи на операции вставки позволяет в первую очередь  решить задачу уменьшения вероятности конкуренции в OLTP-системах с массированным одновременным вводом информации (типичный пример - операционный день банка), где таблицы содержат только некластерные индексы или кластерный индекс построен по монотонно возрастающему ключу. По умолчанию эта опция выключена. В текущей базе данных ее можно задействовать командой sp_tableoption <Имя таблицы или шаблон>, 'insert row lock', 'true'. 

Существует диалектическое противоречие, с которым наверняка  сталкивался каждый администратор  базы данных или разработчик. С одной стороны, хочется уменьшить до минимума вероятность столкновения интересов пользователей при доступе к одним и тем же ресурсам и потому блокировать все на как можно более детальном уровне. С другой - очень не хочется перегружать менеджер блокировок, который фиксирует информацию о том, кто наложил блокировку, какого типа, кто ждет, пока она освободится и т. д. Например, в MS SQL Server 6.5 каждая блокировка обходится в 32 байта. Для разрешения этого противоречия сервер умеет автоматически повышать уровень блокировки в случае, если блокировок предыдущего уровня детализации становится слишком много (lock escalation). "Слишком много" - это LE Threshold Maximum в настройках конфигурации сервера, т. е. максимальная пороговая величина числа страничных блокировок, при достижении которой происходит эскалация до уровня таблицы. По умолчанию она равна 200. Для этих же целей используется настройка LE Threshold Percentage - в относительном выражении к размеру таблицы (но не меньше, чем LE Threshold Minimum, что полезно для небольших таблиц). В перспективе возможна обратная стратегия динамической деэскалации уровня блокировки, когда блокируется заведомо больший фрагмент данных, чем требуется, но, как только появляется транзакция, конкурирующая за данные внутри данного фрагмента, уровень первой транзакции будет автоматически уменьшен. 

Управление уровнем  изоляции транзакций на протяжении всего  соединения (пользовательской сессии) осуществляется при помощи установки set transaction isolation level <уровень изоляции>, где уровень изоляции может принимать значения: 

read uncommitted соответствует  уровню изоляции 0 стандарта ANSI, т.  е. просто запрещает различным  транзакциям изменять одни и  те же данные в одно и  то же время, но допускает  грязное и неповторяющееся чтение и фантомы[3]; 

read committed (устанавливается  по умолчанию) соответствует уровню  изоляции 1 стандарта ANSI, т. е. предотвращает  грязное чтение; 

repeatable read или  serializable соответствует уровню 3 по  стандарту ANSI - предотвращает грязное чтение, а также гарантирует, что два оператора select в разных местах одной транзакции будут возвращать одинаковый результат, т. е. исключает неповторяющееся чтение и фантомы. 

Последний, самый  надежный уровень защиты транзакций является самым неоптимальным с точки зрения быстродействия, так как за все приходится платить. Для более гибкого управления уровнем изоляции для каждого оператора select может явно задаваться опция настройки; 

nolock то же, что  read uncommitted, - дает возможность чтения  грязных (еще не зафиксированных) данных, которая перекрывает аналогичные параметры конфигурации пользовательской сессии. В операторе select можно также оговорить продолжительность блокировки данных; 

holdlock инструктирует  сервер держать блокировки до  завершения транзакции (по умолчанию блокировки снимаются сразу же по прочтении требуемых данных; 

Тип и уровень  блокировки: 

updlock заставляет  применить блокировку update вместо  обычной shared, используется, когда  следом идет оператор update, основанный  на прочитанных значениях, чтобы запретить update из других транзакций; 

paglock заставляет  сервер при любых условиях  использовать блокировки уровня  страницы; 

tablock принудительно  блокирует таблицу (shared); 

tablockx принудительно  блокирует таблицу (exclusive). 

Просмотр текущих блокировок выполняется при помощи хранимой процедуры sp_lock или через включение флага трассировки 1200 на клиента: dbcc traceon (3604,1200). Также полезным являются флаги 1204 и 1205, которые выдают информацию о cитуациях взаимной блокировки (deadlocks). MS SQL Server обладает возможностью автоматического обнаружения deadlocks как циклов в цепочке блокировок. Он находит первый процесс, который мог бы разорвать цикл, убивает его и откатывает все транзакции этого процесса, находившиеся в стадии выполнения. Как правило, им оказывается тот самый процесс, который запросил блокировку, послужившую причиной зацикливания. После этого сервер генерирует сообщение об ошибке 1205. Если клиентское приложение имеет обработчик ошибок, отлавливающий ошибку 1205, то оно может предпринять соответствующие действия по исправлению ситуации, и конечный пользователь, скорее всего, даже не узнает, что имела место взаимная блокировка.

Надежность хранения информации 

В критических  для бизнеса приложениях, когда  сервер СУБД должен быть постоянно доступен для клиентов, большинство профилактических работ по поддержке базы данных приходится выполнять фактически в режиме on-line. MS SQL Server обладает возможностями динамического резервного копирования данных, т. е. даже когда эти данные используются и изменяются клиентами. В случае сбоя оборудования, отключения питания и т. д. механизм автоматического восстановления MS SQL Server восстанавливает все базы данных до их последнего целостного состояния без вмешательства администратора. Все завершенные, но не отраженные в базе транзакции из журнала транзакций применяются к базе данных (это фактически то, что происходит при событии chekpoint), а незавершенные транзакции, т. е. те, которые были активными на момент сбоя , вычищаются из журнала. 

Как мы уже отмечали, говоря о симметричной архитектуре, операции резервного копирования и  восстановления могут распараллеливаться на несколько потоков и выполняться  одновременно, используя преимущества асинхронного ввода/вывода. На каждое резервное устройство отводится свой поток. Параллельное резервное копирование поддерживает до 32 одновременных резервных устройств (backup devices), что позволяет быстро создавать страховочные копии баз данных даже очень большой емкости. Возможность резервного копирования и восстановления отдельных таблиц, о чем мы упоминали, рассматривая Transact-SQL, позволяет экономить место и время, не выполняя копирование всей базы ради только некоторых ее объектов. Однако резервное копирование отдельной таблицы требует наложения на нее блокировки exclusive в отличие от резервного копирования всей базы или журнала транзакций, которые могут выполняться независимо от степени активности пользователей. Резервным копиям может быть назначен предельный срок хранения или дата утраты актуальности, до наступления которой место, занятое на устройстве этими копиями, не может использоваться для размещения других резервных копий при инициализации устройства. В качестве резервных устройств могут также применяться временные устройства, не входящие в состав базы и не имеющие записей в системной таблице sysdevices: 

DECLARE @tomorrow char(8) 

SELECT @tomorrow = CONVERT(char(8), DATEADD(dd, 1, GETDATE()) , 1) 

DUMP DATABASE pubs 

TO   DISK = 'ntalexeyshdisk_dsql_experimentspubs.dmp' 

  WITH INIT, EXPIREDATE=@tomorrow, STATS 

Для небольшой  базы данных ее журнал транзакций обычно хранится на том же устройстве, что  и сама база, и архивируется вместе с ней. Журналирование транзакций ведется  по принципу write-ahead, что означает, что  любое изменение сначала отражается в журнале транзакций и лишь потом попадает собственно в базу. В случае нахождения журнала транзакций на отдельном устройстве существует возможность отдельного резервного копирования журнала транзакций. Как правило, резервное копирование базы данных организуется с меньшей частотой, чем журнала транзакций. Например, сохранение журнала транзакций выполняется ежедневно, а страховая копия всей базы может делаться раз в неделю, так как архивирование журнала транзакций происходит значительно быстрее по времени и занимает меньше места, чем дамп целой базы. В отличие от резервирования базы данных дамп журнала транзакций очищает его неактивную часть, т. е. все завершившиеся (зафиксированные или абортированные) с момента последнего дампа транзакции, если только не использована опция NO_TRUNCATE. Команда DUMP TRANSACTION TRUNCATE_ONLY, очищающая журнал транзакций, полезна в случае его переполнения, которое можно контролировать, например, оператором DBCC SQLPERF (LOGSPACE). Если степень переполнения журнала очень высока, можно при его очистке отказаться от журналирования факта самого этого события: DUMP TRANSACTION NO_LOG. Если резервное копирование транзакций не представляет интереса, можно включить опцию очистки последних завершенных транзакций в базе по наступлению события checkpoint. Cмысл механизма checkpoint состоит в периодической записи данных из кэша на диск, чтобы не допускать грязных данных. Такого рода события постоянно генерируются MS SQL Server или возникают по инициативе пользователя. Включенная опция truncate log on checkpoint гарантирует выполнение с определенной частотой обработчиком события действий, приблизительно эквивалентных команде DUMP TRANSACTION TRUNCATE_ONLY. 

При восстановлении журнала транзакций соответствующие  транзакции применяются к базе данных. Это означает, что если в начале недели была сделана резервная копия всей базы, а потом ежедневно архивировались транзакции за каждый день, то при необходимости восстановления поднимается состояние базы на начало недели и на него последовательно накатываются дампы журнала транзакций за все дни, предшествующие моменту восстановления. MS SQL Server 6.5 имеет возможность восстановления данных из журнала транзакций на произвольный момент времени (разумеется, отраженный в журнале) при помощи команды LOAD TRANSACTION STOPAT <t> или в окне database backup and restore выбором опции until time. Все содержащиеся в этом дампе транзакции, отмеченные завершившимися после этого момента, будут откачены. 

Возможность планирования задач резервного копирования во времени и отсылки сообщений по e-mail в случае успешного/неуспешного завершения рассматривалась нами при обсуждении SQL Executive. 

MS SQL Server 6.5 предусматривает  возможность зеркалирования устройств,  переключения на зеркальные устройства  в качестве основных, выключения зеркалирования и уничтожения зеркального устройства также "на лету", т. е. без остановки штатной работы сервера по обслуживанию пользовательских запросов. Зеркалирование и дуплексирование устройств для работы с MS SQL Server может быть также выполнено средствами Windows NT, а также на аппаратном уровне (поддержка различных RAID-систем и т. д.). По-видимому, следует предполагать, что реализация первого этапа кластерной технологии WolfPack будет поддерживать MS SQL Server 6.5 в отказоустойчивых кластерах из двух узлов. Появление следующей версии MS SQL Server должно обеспечить работу серверов в кластере как единого виртуального сервера. 

Transfer Manager используется  для экспорта/импорта объектов  и данных БД на MS SQL Server между разными аппаратными платформами, например между процессорами Intel и Alpha, а также между разными версиями MS SQL Server, в частности из более ранних в более поздние или между равноценными (имеются в виду 4.х и 6.х). Очень часто проектирование объектов базы ведется с помощью различных графических средств, но проектная документация может требовать структуру объектов с точностью до операторов DDL. Для получения скриптов, описывающих создание отдельного объекта базы данных, можно использовать команду transfer из контекстного меню объекта или выбрать соответствующий класс и имя объекта в Transfer Manager. Кроме этого, содержимое данных может быть выгружено/загружено при помощи утилиты bcp (см. табл. 1).

Тиражирование 

Наличие развитого  механизма тиражирования в любой серьезной системе управления базами данных обуславливается необходимостью приближения данных к местам их непосредственного потребления, что является особенно важным фактором при построении витрин данных в системах принятия решений, разгрузки приложений от избыточных функций чтения/поиска при создании отчетов и т. д. Создание распределенных приложений с использованием средств тиражирования положительно сказывается на относительной автономии сайтов, повышении масштабируемости и производительности. Традиционно в построении распределенных систем данных существуют два основных подхода. Один из них основан на плотной целостности данных (loose consistency) и рассматривался нами в пункте, посвященном MS Distributed Transaction Coordinator. Протокол двухфазной фиксации гарантирует идентичность данных в любой момент времени на всех узлах сети, однако необходимо иметь в виду, что этот подход требует наличия высокоскоростных каналов передачи данных и постоянной доступности каждого узла. Другой подход, основанный на слабой целостности (loose consistency), допускает, вообще говоря, некоторый временной интервал между внесением изменений в оригинал и их отражением в образе. Приложения, основанные на принципе слабой целостности, являются значительно менее чувствительными к доступности узлов, а также пропускной способности и надежности каналов передачи данных. Тиражирование в MS SQL Server построено на использовании именно второго подхода. 

Основными действующими лицами в процессе тиражирования  служат издатель (publisher), дистрибьютор (distributor) и подписчик (subscriber). Поскольку тиражирование является неотъемлемой составной частью MS SQL Server, последний может выступать в роли каждого из них. Конфигурирование и управление каждой ролью осуществляется из SQL Enterprise Manager через уже знакомые нам SQL-DMO или с помощью операторов и хранимых процедур языка Transact-SQL. Репликационной единицей в плане распространения и подписки является публикация (publication). Публикация состоит из одной или нескольких статей (articles). Статьей публикации называется отдельная таблица или ее вертикальный и/или горизонтальный фрагмент. Вертикальное фрагментирование осуществляется выбором соответствующих полей таблицы, горизонтальное - при помощи условия where или специальной процедуры горизонтальной фильтрации (CREATE PROCEDURE - FOR REPLICATION). Таблица обязана иметь первичный ключ. Как только на издателе созданы статьи, все тиражируемые объекты отмечаются специальным признаком в одном из полей системной таблицы sysobjects. Кроме этого, в тиражируемой базе ведется еще три справочные таблицы. Syspublications в отдельной строке хранит информацию о каждой новой публикации. Она связана отношением один-ко-многим с таблицей sysarticles, содержащей информацию о статьях и их принадлежностью публикациям. Наконец, последняя, в свою очередь, связана отношением один-ко-многим с таблицей syssubscriptions, где содержится информация о том, каким подписчикам адресована каждая статья. 

Информация о работе MS SQL Server 6.5