Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных_конспект 1-15 и 23-26 стр.docx
Скачиваний:
19
Добавлен:
25.08.2019
Размер:
904.31 Кб
Скачать

Управление обработкой информации в многопользовательских базах данных. Параллельная обработка транзакций

Управление параллельной обработкой

Меры по управлению параллельной обработкой нацелены на предотвращение непредусмотренного влияния одного пользователя на действия другого. Например, пользователь, который ввел свой заказ в компьютерную систему, должен получить один и тот же результат независимо от того,  сколько еще есть пользователей кроме него. К сожалению, не существует способа управления параллельной обработкой, который бы одинаково хорошо подходил бы для всех ситуаций. Все эти способы предполагают некоторый компромисс. Например, пользователь может весьма жестко управлять параллельной обработкой, заблокировав всю базу данных, но пока будут обрабатываться данные для этого пользователя, ни один другой пользователь не сможет ничего сделать. Такая защита надежна, но дорога.

Необходимость в атомарных транзакциях

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

Параллельная обработка транзакций

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

Проблема потерянного обновления

Предположим, что два пользователя хотят обратиться к одному и тому же элементу. Например, пользователь А хочет заказать пять единиц товара 100, а пользователь В – три единицы этого же товара. Всего имеется 10 единиц товара 100. Пользователь А считывает запись о товаре 100 в свою рабочую область. В соответствии с этой записью в наличие имеется 10 единиц товара. Затем пользователь В читает запись о товаре 100 в свою рабочую область. Согласно этой записи имеется 10 единиц товара. Теперь пользователь А берет  5 единиц товара, уменьшает количество товара в свой рабочей области до пяти и обновляет запись для товара 100. после этого пользователь В берет три единицы товара, уменьшает количество товара в своей рабочей области до 7 единиц и записывает это количество в базу данных. Теперь база данных ошибочно показывает, что в наличии имеется 7 единиц товара 100.

Блокировка ресурсов

Один из способов предотвратить проблемы при параллельной обработке – запретить совместное использование ресурсов путем блокировки данных, которые считываются для обновления. Из – за блокировки транзакция пользователь В должна ждать, пока пользователь А не закончит работу с данными по товару 100. Блокировки могут налагаться как автоматически, по инициативе СУБД, так и командой, которая передается СУБД прикладной программой или запросом пользователя. Блокировки налагаемые СУБД, называются неявными блокировками, а блокировки, налагаемые по команде, - явными блокировками.   При монопольной блокировке блокируются все виды доступа к элементу. Ни одна другая транзакция не может читать или изменять данные. Коллективная блокировка блокирует элемент от изменения, но не от чтения. То есть другая транзакция может свободно читать данный элемент, если они не пытаются изменить его.

Сериализуемые транзакции

Когда две или более транзакции обрабатываются параллельно, их результаты, сохраняемые в базе данных, должны быть логически согласованы с результатами, которые получились бы, если бы данные транзакции обрабатывались каким-нибудь последовательным способом. Такая схема обработки  параллельных транзакций называется сериализуемой. Сериализуемость может быть достигнута несколькими способами. Один из способов – обработка транзакций с использование двухфазной блокировки. При этой стратегии транзакциям разрешается налагать блокировки по мере необходимости, но как только первая блокировка снимается, данная транзакция не может наложить никаких других блокировок.  Таким образом, транзакции имеют  фазу нарастания, на которой блокировки налагаются, и фазу сжатия, на которой блокировки снимаются.

Взаимная блокировка

Решая одну проблему блокировка способна вызвать другую. Предположим, что пользователь А хочет заказать бумагу, а если он сможет достать бумагу, то он закажет и карандаши. Теперь предположим, что пользователь В хочет заказать карандаши, а если удастся достать карандаши, то он закажет и бумагу. Пользователь А и В оказываются в ситуации, которая называется взаимная блокировка. Каждый из них ожидает освобождения ресурса, заблокированного другим пользователем. Есть два способа разрешения этой проблемы: не допускать возникновения взаимных блокировок либо позволять им возникать, а затем распутывать их. Предотвратить возникновения взаимной блокировки можно несколькими способами. Первый из них – заставлять пользователей блокировать все требуемые ресурсы сразу. Второй способ – требовать от всех прикладных программ блокировать ресурсы в одном и том же порядке. Почти в каждой СУБД имеются алгоритмы обнаружения взаимной блокировки. Когда происходит взаимная блокировка, обычное решение состоит в том, чтобы отменить одну из транзакций, тем самым удалив из базы данных произведенные ею изменения.

Оптимистическая и пессимистическая блокировки

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

Уровень изоляции

Блокировки предотвращают потерю изменений при параллельной обработке. Тем не менее, существует ряд проблем, которые они предотвратить не в состоянии. Одной из таких проблем является «грязное чтение» - чтение транзакций записи, которая изменена, но еще не записана в базе данных. Это может произойти например, когда одна транзакция считывает строку, измененную другой незавершенной транзакцией, а эта другая транзакция впоследствии отменяется. «Невоспроизводимое чтение» - это ситуация, когда при повторном чтении данных, уже считанных ранее, транзакция обнаруживает модификации или удаления произведенные другой завершенной транзакцией. «Фантомное чтение» - это ситуация, когда при повторном чтении данных транзакция обнаруживает новые строки, вставленные другой завершенной транзакцией после предыдущего чтения. В стандарте SQL  1992 г. Определены четыре уровня изоляции транзакций, которые определяют допустимость перечисленных выше проблем. Цель состоит в том, чтобы разработчик прикладной программы мог указать желаемый уровень изоляции, а СУБД осуществляла бы  управление блокировками в соответствии с этими указаниями.

Как можно увидеть на данном рисунке уровень изоляции под названием «незавершенное чтение» допускает  «грязное чтение», невоспроизводимое и фантомное чтение. Уровень изоляции «завершенное чтение» предотвращает «грязное чтение». Уровень изоляции «воспроизводимое чтение» предотвращает «грязное чтение» и невоспроизводимое чтение. Уровень изоляции «сериализуемость» не допускает возникновения ни одной из этих проблем.

Архитектуры организационных систем обработки данных. Системы удаленной обработки. клиент–серверные системы. Системы совместного использования файлов

Для обработки данных в масштабе предприятия используются несколько различных архитектур. В прошлом наиболее распространены были системы удаленной обработки данных. Но по мере того как микрокомпьютеры стали появляться в офисах и выросла их мощь в качестве серверов данных, возникли новые архитектуры многопользовательских систем обработки данных.

Системы удаленной обработки

Классическим методом поддержки многопользовательской базы данных является удаленная обработка, при которой используется один компьютер и один процессор. Вся обработка производится этим единственным компьютером. Пользователи работают с неинтеллектуальными («глупыми») терминалами (или с микрокомпьютерами, эмулирующими такие терминалы), которые передают сообщения о транзакциях и данные центральному компьютеру. Часть операционной системы, отвечающая за управление связью, принимает сообщения и данные и передает их соответствующим прикладным программам. Программы обращаются к СУБД, а СУБД выполняет операции с базой данных, используя ту часть операционной системы, которая отвечает за обработку данных. Когда транзакция завершается, подсистема управления связью возвращает результаты пользователям, сидящим у терминалов.

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