КАТЕГОРИИ: Архитектура-(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) Потеря результатов обновления:
Рис. 1 Таким образом, параллельное выполнение транзакций A (увеличивает сумму на 20) и B (списывает со счета 10) приводит к появлению некорректной суммы (190), вместо 210, как было бы при последовательном выполнении транзакций. (ii) Зависимость от незафиксированных результатов:
Рис. 2 Транзакция A воспользовалась незафиксированным изменениям, выполненным транзакцией B, в результате сумма оказалась равной 210, а не 220, как при последовательном выполнении транзакций. (iii) Несовместный анализ:
Рис. 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 Совместимость блокировок
Таким образом, при отсутствии блокировок удовлетворяется любой запрос на блокировку от другой транзакции, S-Lock совместимы с другими S-Lock, S-Lock и X-Lock, а так же две X-Lock не совместимы. Блокировки используются в сочетании в алгоритмом двухфазного блокирования: (i) прежде чем начать работу с кортежем, транзакция должна установить блокировку; (ii) после разблокирования какого-либо кортежа транзакция не должна устанавливать других блокировок. Иначе говоря, все операции блокирования должны предшествовать первой операции разблокирования. Блокировки позволяют решить проблемы многопользовательского доступа к данным: (i) Решение проблемы потери результатов обновления:
Рис. 4 (ii) Решение проблемы зависимости от незафиксированных результатов:
Рис. 5 (iii) Решение проблемы несовместного анализа:
Рис. 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; Просмотров: 510; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |