Понятие транзакции

Автор работы: Пользователь скрыл имя, 21 Ноября 2010 в 13:18, Не определен

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

Целью данной работы является рассмотрение технологии работы с транзакциями, а так же работу транзакций в Microsoft SQL Server 2000

Файлы: 3 файла

крсовая по транзакциямгот.doc

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

Курсовик Транзакции.doc

— 673.00 Кб (Скачать файл)
Ресурс  Тип блокировки Описание
Идентификатор строки Уровень строки Блокирует отдельную  строку в таблице
Ключ  Уровень строки Блокирует отдельную  строку в индексе
Страница  Уровень страницы Блокирует отдельную страницу размером 8 Кб в таблице или индексе   
Экстент Уровень экстента Блокирует экстент  – группу из 8 последовательных страниц данных или страниц индекса
Таблица Уровень таблицы  Блокирует всю  таблицу 
База  данных Уровень базы данных Блокирует всю  базу данных
 

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

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

     Блокирование (blocking) и взаимоблокировки (deadlock) – это две дополнительные проблемы, которые могут возникать при одновременно выполняемых транзакциях. Они могут приводить к серьезным проблемам системы, а также могут замедлять и даже останавливать работу. Эти проблемы могут разрешаться в приложении, или SQL Server постарается сделать все возможное для их разрешения.

     Блокирование возникает в том случае, когда одна транзакция владеет блокировкой по какому-либо ресурсу, а второй транзакции требуется конфликтный тип блокировки по этому ресурсу. Вторая транзакция должна ждать, пока первая транзакция освободит свою блокировку; иными словами, она блокирована первой транзакцией. Проблема блокирования обычно возникает, когда какая-либо транзакция захватывает блокировку на длительный период времени, что приводит к цепочке блокированных транзакций, ожидающих окончания других транзакций, чтобы получить необходимые им блокировки; это состояние называют цепным блокированием. Взаимоблокировка отличается от блокированной транзакции в том, что взаимоблокировка возникает в случае двух блокированных транзакций, ожидающих друг друга. Например, одна транзакция владеет монопольной блокировкой по Таблице 1, а вторая владеет монопольной блокировкой по Таблице 2. Прежде чем будет освобождена любая монопольная блокировка, первой транзакции требуется блокировка по Таблице 2 и второй транзакции – требуется блокировка по Таблице 1. Теперь каждая транзакция ждет, пока другая транзакция освободит свою монопольную блокировку, но ни одна из транзакций не сделает этого, пока не будет выполнено фиксирование или откат для завершения соответствующей транзакции. Ни одна из транзакций не может завершиться, поскольку для продолжения работы ей требуется блокировка, которой владеет другая транзакция, – ситуация взаимоблокировки. (Рисунок 2.1) При возникновении взаимоблокировки SQL Server прекращает одну из транзакций, и ее требуется запустить заново.

     

Рисунок 2.1   Цепное блокирование

     

     Рисунок 2.2 Взаимоблокировка

           Подсказки блокировки – это ключевые слова T-SQL, которые можно использовать с операторами SELECT, INSERT, UPDATE и DELETE, чтобы задать для SQL Server использование предпочтительного типа блокировки на уровне таблицы для определенного оператора. Можно использовать подсказки блокировки для переопределения принятого по умолчанию уровня изолированности. [2-6, 11,14]

     Рассмотрю ситуацию, где может оказаться полезным использование подсказок блокировки. Используется для всех транзакций принятый по умолчанию уровень изолированности read uncommitted (чтение незафиксированных данных). При этом уровне изолированности по данному ресурсу захватывается разделяемая блокировка только до завершения чтения, и затем эта разделяемая блокировка освобождается. И если какая-либо транзакция читает одни и те же данные дважды, то результаты чтения могут не совпасть, поскольку другая транзакция могла захватить блокировку между первым и вторым чтениями и модифицировать эти данные.

     Чтобы избежать проблемы повторяемости чтения, можно задать уровень изолированности serializable (упорядочиваемость), но это вынудит SQL Server захватить все разделяемые блокировки, необходимые для операторов SELECT во всех транзакциях, пока не будет завершена каждая транзакция. Иными словами, для целостности транзакций разделяемые блокировки будут захвачены по таблице, указанной в операторе SELECT любой транзакции. Если не хотите поддерживать упорядочиваемость для всех ваших транзакций, то можете добавить какую-либо подсказку блокировки для определенного запроса. Подсказка блокировки HOLDLOCK в операторе SELECT указывает SQL Server захват всех разделяемых блокировок по таблице, заданной в операторе транзакции SELECT, вплоть до конца этой транзакции – независимо от уровня изолированности.

     В следующем списке дается описание существующих подсказок блокировки на уровне таблиц.

  1. HOLDLOCK. Захватывает разделяемую блокировку до завершения транзакции, а не освобождает ее сразу после того, как уже не требуется соответствующая таблица, страница или строка данных. Эквивалентно использованию подсказки блокировки SERIALIZABLE.
  2. NOLOCK. Применяется только к оператору SELECT. Не получает разделяемых блокировок и не поддерживает монопольных блокировок; читает данные, которые монопольно захвачены другой транзакцией. Эта подсказка позволяет читать нефиксированные данные (dirty read).
  3. PAGLOCK. Используется для блокировки на уровне страницы там, где обычно используется блокировка на уровне таблицы.
  4. READCOMMITTED. Выполняется сканирование с тем же поведением по блокировкам, как у транзакций, использующих уровень изолированности read committed (принятый по умолчанию уровень изолированности для SQL Server).
  5. READPAST. Применяется только к оператору SELECT и только к строкам, блокированным с помощью блокировки на уровне строк. Пропускаются строки, блокированные другими транзакциями, которые обычно включаются в набор результатов; возвращает результаты без этих блокированных строк. Может использоваться только с транзакциями, выполняемыми на уровне изолированности read committed.
  6. READUNCOMMITTED. Эквивалентно NOLOCK.
  7. REPEATABLEREAD. Выполняется сканирование с тем же поведением по блокировкам, как у транзакций, использующих уровень изолированности repeatable read.
  8. ROWLOCK. Используются блокировки на уровне строк вместо блокировки на уровне страниц или на уровне таблиц.
  9. SERIALIZABLE. Выполняется сканирование с тем же поведением по блокировкам, как у транзакций, использующих уровень изолированности serializable. Эквивалентно HOLDLOCK.
  10. TABLOCK. Используется блокировка на уровне таблиц вместо блокировки на уровне страниц или на уровне строк. SQL Server захватывает эту блокировку до завершения оператора.
  11. TABLOCKX. Используется монопольная блокировка по таблице. Внимание! Эта подсказка препятствует доступу других транзакций к этой таблице.
  12. UPDLOCK. Используются блокировки изменения вместо монопольных блокировок при чтении таблицы. Можно объединять совместимые подсказки блокировки, такие как TABLOCK и REPEATABLEREAD, но не льзя объединять конфликтующие подсказки, такие как REPEATABLEREAD и SERIALIZABLE. Чтобы задать подсказку блокировки на уровне таблиц, необходимо заключить эту подсказку в круглые скобки после имени таблицы в операторе T-SQL. Следующая последовательность является примером использования подсказок TABLOCKX в операторе SELECT:

     USE pubs

     SELECT COUNT(ord_num)

     FROM sales (TABLOCKX)

     WHERE ord_date > "Sep 13 1994"

     GO

     Подсказка TABLOCK сообщает SQL Server, что нужно захватить  монопольную блокировку на уровне таблиц по таблице продаж (sales), пока не будет  выполнен данный оператор. Эта подсказка  обеспечивает, что никакая другая транзакция не сможет модифицировать данные в таблице sales, пока данный запрос подсчитывает заказы из этой таблицы. [5] 

     Заключение

 

     В ходе выполнения работы было рассмотрено  3 вопроса: принцип создания и работы транзакции, свойства транзакций, технология  применения транзакций в SQL Server 2000.

     Из  проведенной работы можно сделать  вывод, что во многих случаях, необходимо проведение группы операций по изменению  данных таким образом, чтобы эта  группа обладала свойством атомарности (либо вся целиком выполняется, либо вся целиком не выполняется). SQL Server предлагает множество средств управления поведением транзакций. Пользователи в основном должны указывать только начало и конец транзакции, используя команды SQL или API (прикладного интерфейса программирования).

     Таким образом, для реализации транзакций SQL Server является наиболее оптимальной программой.

     Сервер  баз данных Microsoft SQL Server в качестве языка запросов использует версию языка SQL, получившую название Transact-SQL (сокращённо T-SQL). Язык T-SQL является реализацией SQL-92 (стандарт ISO для языка SQL) с множественными расширениями. T-SQL позволяет использовать дополнительный синтаксис для хранимых процедур и обеспечивает поддержку транзакций (взаимодействие базы данных с управляющим приложением).

     При взаимодействии с сетью Microsoft SQL Server и Sybase ASE используют протокол уровня приложения под названием Tabular Data Stream (TDS, протокол передачи табличных данных). Протокол TDS также был реализован в проекте FreeTDS с целью обеспечить различным приложениям возможность взаимодействия с базами данных Microsoft SQL Server и Sybase.

     Для обеспечения доступа к данным Microsoft SQL Server поддерживает Open Database Connectivity (ODBC) — интерфейс взаимодействия приложений с СУБД. Версия SQL Server 2005 обеспечивает возможность подключения пользователей через веб-сервисы, использующие протокол SOAP. Это позволяет клиентским программам, не предназначенным для Windows, кроссплатформенно соединяться с SQL Server. Компания Microsoft также выпустила сертифицированный драйвер JDBC, позволяющий приложениям под управлением Java (таким как BEA и IBM WebSphere) соединяться с Microsoft SQL Server 2000 и 2005.

     Также SQL Server поддерживает зеркалирование и  кластеризацию баз данных. Кластер  сервера SQL — это совокупность одинаково конфигурированных серверов; такая схема помогает распределить рабочую нагрузку между несколькими серверами. Все сервера имеют одно виртуальное имя, и данные распределяются по IP-адресам машин кластера в течение рабочего цикла. Также в случае отказа или сбоя на одном из серверов кластера доступен автоматический перенос нагрузки на другой сервер.

     SQL Server поддерживает избыточное дублирование  данных по трем сценариям:

  • Снимок: Производится «снимок» базы данных, который сервер отправляет получателям.
  • История изменений: Все изменения базы данных непрерывно передаются пользователям.
  • Синхронизация с другими серверами: Базы данных нескольких серверов синхронизируются между собой. Изменения всех баз данных происходят независимо друг от друга на каждом сервере, а при синхронизации происходит сверка данных. Данный тип дублирования предусматривает возможность разрешения противоречий между БД.

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

     SQL Server 2008

     Последняя версия SQL Server — SQL Server 2008 R2. Была выпущена 21 апреля 2010 года. SQL Server 2008 направлен на то, чтобы сделать управление данными самонастраивающимся, самоорганизующимся и самообслуживающимся механизмом — для реализации этих возможностей были созданы технологии SQL Server Always On. Это позволит уменьшить до нуля время нахождения сервера в нерабочем состоянии.

     В SQL Server 2008 была добавлена поддержка структурированных и частично структурированных данных, включая цифровые форматы для изображений, звуков, видео и других типов мультимедиа. Поддержка мультимедиа форматов внутри СУБД позволила специализированным функциям взаимодействовать с этими типами данных. Кроме этого, были включены специализированные форматы даты и времени и пространственный (англ. Spatial) тип для пространственно зависимых данных. Для неструктурированных данных были добавлены специализированные типы, например, тип File.

     Для повышения эффективности администрирования  в SQL Server были включены библиотеки Declarative Management Framework, позволяющие распределять полномочия для баз данных или отдельных таблиц. Были улучшены методы компрессии данных. SQL Server Katmai поддерживает набор библиотек ADO.NET Entity Framework и средства оповещения, репликации и определения данных. 
 

     Глоссарий

 
  № п/п      Понятие      Определение
1. База данных

(БД)

поименованная, целостная, единая система данных, организованная по определенным правилам, которые предусматривают общие принципы описания, хранения и обработки данных
2.      Блокировка  временное ограничение, накладываемое системой на использование  тех или иных ресурсов
  3. Данные  последовательность  элементарных символов, цифр или букв, являющихся значением некоторого атрибута
  4. Журнал транзакций системная структура, которая создается для сохранения промежуточных состояний, подтверждения или отката транзакции
5. Логическая  структура базы данных системные и  пользовательские таблицы, представления, хранимые процедуры, пользователи и роли, умолчания, ограничения целостности и другие объекты
6. Откат транзакции действие, обеспечивающее аннулирование всех изменений данных, которые были сделаны операторами SQL в теле текущей незавершенной  транзакции.
7. Система управления базами данных (СУБД) специальный комплекс программ, осуществляющий централизованное управление базой данных
8. Транзакция набор из одной  и более команд, обрабатываемых как  единое целое
9. Фиксация транзакций действие, обеспечивающее запись на диск изменений в базе данных, которые были сделаны в процессе выполнения транзакции.
10. Хранилище данных предметно-ориентированный, интегрированный, привязанный ко времени  и неизменяемый набор данных, предназначенный  для поддержки принятия решений.

Схема журнала транзакций.doc

— 63.00 Кб (Просмотреть файл, Скачать файл)

Информация о работе Понятие транзакции