Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Проблемы многопользовательского доступа к данным, их решение с помощью блокировок




SQL-сервер обычно выполняет смесь транзакций, поступающих от различных пользовательских приложений. Количество пользователей в современных корпоративных информационных системах (КИС) может исчисляться сотнями, тысячами и более. В литературе [4] [5] [7] обычно рассматривается три основных проблемы параллелизма, проиллюстрируем их на примере приведенной выше таблицы Счет:

(i) Потеря результатов обновления:

Момент времени Транзакция А Транзакция B
t1 —————— Чтение кортежа: Номер = 33, Сумма = 200 ————————————
t2 —————— ———————————— Чтение кортежа: Номер = 33, Сумма = 200
t3 —————— Запись кортежа: Номер = 33, Сумма = 220 ————————————
t4 —————— ———————————— Запись кортежа: Номер = 33, Сумма = 190
t5 —————— Фиксация транзакции Фиксация транзакции

Рис. 1

Таким образом, параллельное выполнение транзакций A (увеличивает сумму на 20) и B (списывает со счета 10) приводит к появлению некорректной суммы (190), вместо 210, как было бы при последовательном выполнении транзакций.

(ii) Зависимость от незафиксированных результатов:

Момент времени Транзакция А Транзакция B
t1 —————— ———————————— Чтение кортежа: Номер = 33, Сумма = 200
t2 —————— ———————————— Запись кортежа: Номер = 33, Сумма = 190
t3 —————— Чтение кортежа: Номер = 33, Сумма = 190 ————————————
t4 —————— Запись кортежа: Номер = 33, Сумма = 210 ————————————
t5 —————— ———————————— Откат транзакции
t6 —————— Фиксация транзакции ————————————

Рис. 2

Транзакция A воспользовалась незафиксированным изменениям, выполненным транзакцией B, в результате сумма оказалась равной 210, а не 220, как при последовательном выполнении транзакций.

(iii) Несовместный анализ:

Момент времени Транзакция А Транзакция B
t1 —————— Чтение кортежа: Номер = 33, Сумма = 200; ∑ = 200 ————————————
t2 —————— Чтение кортежа: Номер = 34, Сумма = 300; ∑ = 500 ————————————
t3 —————— ———————————— Чтение кортежа: Номер = 35, Сумма = 300; ∑ = 500
t4 —————— ———————————— Запись кортежа: Номер = 35, Сумма = 120
t5 —————— ———————————— Чтение кортежа: Номер = 33, Сумма = 200
t6 —————— ———————————— Запись кортежа: Номер = 33, Сумма = 150
t7 —————— Чтение кортежа: Номер = 35, Сумма = 100; ∑ = 620 ————————————
t8 —————— Фиксация транзакции Фиксация транзакции

Рис. 3

Таким образом, транзакция A, суммируя средства на счетах, возвращает ∑ = 620, в то время как на момент ее завершения на данных счетах ∑ = 570.

Чаще всего для решения проблем многопользовательского доступа к данным СУБД используют блокировки:

(i) блокировку записи — X-Lock (от eXclusive Lock);

(ii) блокировку чтения — S-Lock (от Shared Lock).

Если транзакция планирует осуществить чтение кортежа, она предварительно устанавливает блокировку чтения, если запись — блокировку записи, при этом действуют следующие правила совместимости блокировок:

(i) если на кортеж установлена X-Lock, то запросы на блокировку от других транзакций отклоняются (ставятся в очередь);

(ii) если на кортеж установлена S-Lock, то запросы на S-Lock от других транзакций удовлетворяются, а запросы на X-Lock отклоняются (ставятся в очередь).

Совместимость блокировок иллюстрирует таблица:

Таблица 1

Совместимость блокировок

Транзакция A \ B X S
X Нет Нет Да
S Нет Да Да
Да Да Да

 

Таким образом, при отсутствии блокировок удовлетворяется любой запрос на блокировку от другой транзакции, S-Lock совместимы с другими S-Lock, S-Lock и X-Lock, а так же две X-Lock не совместимы.

Блокировки используются в сочетании в алгоритмом двухфазного блокирования:

(i) прежде чем начать работу с кортежем, транзакция должна установить блокировку;

(ii) после разблокирования какого-либо кортежа транзакция не должна устанавливать других блокировок.

Иначе говоря, все операции блокирования должны предшествовать первой операции разблокирования.

Блокировки позволяют решить проблемы многопользовательского доступа к данным:

(i) Решение проблемы потери результатов обновления:

Момент времени Транзакция А Транзакция B
t1 —————— X-Lock кортежа: Номер = 33 ————————————
t2 —————— Чтение кортежа: Номер = 33, Сумма = 200 X-Lock кортежа: Номер = 33
t3 —————— Запись кортежа: Номер = 33, Сумма = 220 Ожидание
t4 —————— Фиксация транзакции, снятие блокировок Ожидание
t5 —————— ———————————— Чтение кортежа: Номер = 33, Сумма = 220
t6 —————— ———————————— Запись кортежа: Номер = 33, Сумма = 210
t7 —————— ———————————— Фиксация транзакции, снятие блокировок

Рис. 4

(ii) Решение проблемы зависимости от незафиксированных результатов:

Момент времени Транзакция А Транзакция B
t1 —————— ———————————— X-Lock кортежа: Номер = 33
t2 —————— ———————————— Чтение кортежа: Номер = 33, Сумма = 200
t3 —————— X-Lock кортежа: Номер = 33 Запись кортежа: Номер = 33, Сумма = 190
t4 —————— Ожидание ————————————
t5 —————— ———————————— Откат транзакции, снятие блокировок
t6 —————— Чтение кортежа: Номер = 33, Сумма = 200 ————————————
t7 —————— Запись кортежа: Номер = 33, Сумма = 220 ————————————
t8 —————— Фиксация транзакции, снятие блокировок ————————————

Рис. 5

(iii) Решение проблемы несовместного анализа:

Момент времени Транзакция А Транзакция B
t1 —————— S-Lock кортежа: Номер = 33 ————————————
t2 —————— Чтение кортежа: Номер = 33, Сумма = 200; ∑ = 200 ————————————
t3 —————— S-Lock кортежа: Номер = 34 X-Lock кортежа: Номер = 35
t4 —————— Чтение кортежа: Номер = 34, Сумма = 300; ∑ = 500 Чтение кортежа: Номер = 35, Сумма = 100
t5 —————— S-Lock кортежа: Номер = 35 Запись кортежа: Номер = 35, Сумма = 120
t6 —————— Ожидание X-Lock кортежа: Номер = 33
t7 —————— Ожидание Ожидание

Рис. 6

Таким образом, блокировки решают проблемы многопользовательского доступа, но создают проблему тупиков. Поэтому СУБД ведет граф зависимости транзакций, показывающий, какая транзакция ожидает снятия блокировок другой транзакцией. Если в графе обнаруживается цикл, одна из транзакций приносится в жертву — принудительно откатывается и перезапускается через некоторый интервал времени или инициируется исключительная ситуация. В качестве жертвы, как правило, выбирается транзакция, сделавшая наименьший объем изменений в БД.

Разработчик БД может повлиять на механизм обработки тупиков, задавая:

(i) приоритет (относительную важность) текущего сеанса по отношению к другим сеансам, работающим с БД, с помощью директивы set deadlock_priority (http://msdn.microsoft.com/ru-ru/library/ms186736%28v=sql.105%29.aspx).

(ii) периодичность проверки возникновения тупика с помощью вызова СХП sp_configure "deadlock checking period" (http://infocenter.sybase.com/archive/topic/com.sybase.help.ase_15.0.sag1/html/sag1/sag1149.htm).

На практике СУБД используют не две, а до двух десятков видов блокировок для достижения большей производительности и минимизации вероятности появления тупиков. Кроме того, блокировки могут применяться к объектам на различных уровнях иерархии: строке, странице, таблице (http://msdn.microsoft.com/ru-ru/library/ms175519%28v=sql.105%29.aspx) (http://msdn.microsoft.com/ru-ru/library/ms186396%28v=sql.105%29.aspx).




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 488; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.