Мартин Грубер - Понимание SQL (991940), страница 42
Текст из файла (страница 42)
Однако в большинстве ситуаций, необходимость иметь базу данных доступную сразу многим пользователям, приводит к некоторому компромису в управлении параллелизмом. Некоторые реализации SQLпредлагают пользователям выбор, позволяя им самим находить золотую серединумежду согласованностью данных и доступностью к базе данных. Этот выбор доступенпользователю, DBA, или тому и другому.На самом деле они осуществляют это управление вне SQL, даже если и воздействуют на процесс работы самой SQL.Механизм, используемый SQL для управления параллелизмом операций, называется блокировкой.
Блокировки задерживают определенные операции в базе данных, пока другие операции или транзакции не завершены. Задержанные операциивыстраиваюится в очередь и выполняются только когда блокировка снята (некоторыеинструменты блокировок дают вам возможность указывать NOWAIT, которая будетотклонять команду вместо того, чтобы поставить ее в очередь, позволяя вам делатьчто-нибудь другое).Блокировки в многопользовательских системах необходимы. Следовательно,должен быть некий тип схемы блокировки по умолчанию, который мог бы применятьсяко всем командам в базе данных.
Такая схема по умолчанию, может быть определенадля всей базы данных, или в качестве параметра в команде CREATE DBSPACE иликоманде ALTER DBSPACE, и таким образом использовать их по разному в различныхDBS.Кроме того, системы обычно обеспечиваются неким типом обнаружителя зависания, который может обнаруживать ситуации, где две операции имеют блокировки,блокирующие друг друга.
В этом случае, одна из команд будет прокручена обратно иполучит сброс блокировки.Так как терминология и специфика схем блокировок меняются от программы кпрограмме, мы можем смоделировать наши рассуждения на примере программы базы данных DB2 фирмы IBM. IBM — лидер в этой области (как впрочим и во многихдругих), и поэтому такой подход наиболее удобен. С другой стороны, некоторые реализации могут иметь значительные различия в синтаксисе и в функциях, но в основном их действия должно быть очень похожими.ТИПЫ БЛОКИРОВОКИмеется два базовых типа блокировок:— распределяемые блокировки и— специальльные блокировки.Распределяемые (или S-блокировки) могут быть установлены более чем однимпользователем в данный момент времени.
Это дает возможность любому числу пользователей обращаться к данным, но не изменять их.Специальные блокировки (или X-блокировки) не позволяют никому вообще, кроме владельца этой блокировки обращаться к данным. Специальные блокировки используются для команд, которые изменяют содержание или структуру таблицы.
Онидействуют до конца транзакции.Общие блокировки используются для запросов. Насколько они продолжительны,зависит фактически от уровня изоляции.Что такое уровень изоляции блокировки? Это — то, что определяет, сколькотаблиц будет блокировано.В DB2, имеется три уровня изоляции, два из которых можно применить и к распределеным и к специальным блокировкам, а третий, ограниченный, чтобы использовать эти блокировки совместно. Они управляются командами, поданными извне SQL,так что мы можем обсуждать не указывая их точного синтаксиса. Точный синтаксискоманд, связанных с блокировками, различен для различных реализаций.Следующее обсуждение полезно прежде всего на концептуальном уровне.Уровень изоляции — повторное чтение — гарантирует, что внутри даннойтранзакции все записи, извлеченные с помощью запросов, не могут быть изменены.Поскольку записи, модифицируемые в транзакции, являются субъектами специальнойблокировки, пока транзакция не завершена, они не могут быть изменены в любом случае.С другой стороны, для запросов повторное чтение означает, что вы можетерешить заранее, какие строки вы хотите заблокировать и выполнить запрос, которыйих выберет.
Выполняя запрос, вы гарантированы, что никакие изменения не будутсделаны в этих строках, до тех пор пока вы не завершите текущую транзакцию.В то время как повторное чтение защищает пользователя, который поместилблокировку, она может в то же время значительно снизить производительность.Уровень указатель стабильности — предохраняет каждую запись от изменений, на время когда она читается, или от чтения на время ее изменения.
Последнийслучай — это специальная блокировка, и применяется, пока изменение не завершеноили пока оно не отменено (т.е. на время отката изменения).Следовательно, когда вы модифицируете группу записей, использующих указатель стабильности, эти записи будут заблокированы, пока транзакция не закончится, что аналогично действию, производимому уровнем повторное чтение. Различииемежду этими двумя уровнями в их воздействии на запросы.
В случае уровня указатель стабильности, строки таблицы, которые в данное время не используются запросом, могут быть изменены.Третий уровень изоляции DB2 — это уровень только чтение.Только чтение фиксирует фрагмент данных; хотя на самом деле он блокируетвсю таблицу. Следовательно, он не может использоваться с командами модификации. Любое содержание таблицы как единое целое, в момент выполнения команды,будет отражено в выводе запроса.Это не обязательно, так как в случае с уровнем указатель стабильности. Блокировка только чтение, гарантирует что ваш вывод будет внутренне согласован, если конечно нет необходимости во второй блокировке, не связывающей большую частьтаблицы с уровнем повторное чтение.
Блокировка только чтение удобна тогда, когда вы делаете отчеты, которые должны быть внутренне согласованны, и позволятьдоступ к большинству или ко всем строкам таблицы, не связывая базу данных.ДРУГИЕ СПОСОБЫ БЛОКИРОВКИ ДАННЫХНекоторые реализации выполняют блокировку страницы вместо блокировкистроки. Это может быть либо возможностью для вашего управления, либо нечто заложенным уже в конструкцию системы.Страница — это блок накопления памяти, обычно равный 1024 байт. Страницаможет состоять из одной или более строк таблицы, возможно сопровождаемых индексами и другой периферийной информацией, а может состоять даже из несколькихстрок другой таблицы.
Если вы блокируете страницы вместо строк, все данные в этихстраницах будут блокированы точно также как и в индивидуальных строках, согласноуровням изоляции описаным выше.Основным преимуществом такого подхода является эффективность. Когда SQLне следит за блокированностью и разблокированностью строк индивидуально, он работает быстрее. С другой стороны, язык SQL был разработан так, чтобы максимизировать свои возможности, и произвольно блокирует строки, которые необязательнобыло блокировать.Похожая возможность, доступная в некоторых системах — это блокировка областей DBS.
Области базы данных имеют тенденцию быть больше, чем страница, такчто этот подход удовлетворяет и достоинству увеличения производительности, и недостатку блокирования страниц.Вообще то лучше отключать блокировку низкого уровня, если вам кажется, чтопоявились значительные проблемы с эффективностью.РЕЗЮМЕКлючевые определения, с которыми вы познакомились в этой главе:* Синонимы, или как создавать новые имена для объектов данных.* Области базы даных (DBS), или как распределяется доступная память в базеданных.* Транзакция, или как сохранять или восстанавливать изменения в базе данных.* Управление Параллелизмом, или как SQL предохраняет от конфликта однойкоманды с другой.Синонимы — это объекты, в том смысле, что они имеют имена и (иногда) владельцев, но естественно они не могут существовать без таблицы, чье имя они замещают.
Они могут быть общими и следовательно доступными каждому кто имеетдоступ к объекту, или они могут принадлежать определенному пользователю.Области DBS или просто DBS — это подразделы базы данных, которые распределены для пользователей. Связанные таблицы, (например таблицы, которые будут часто объединяться) лучше хранить в общей для них DBS.СOMMIT и ROLLBACK — это команды, используемые для выполнения изменений в базе данных, в то время когда предыдущая команда COMMIT или командаROLLBACK, начинают сеанс и оставляют изменения, или игнорируют их как группу.Средство Управление Параллелизмом — определяет, в какой степени одновременно поданные команды будут мешать друг другу. Оно является адаптируемымсредством, находящим компромис между производительностью базы данных и изоляцией действующих команд.РАБОТА С SQL1.
Создайте область базы данных с именем Myspace которая выделяет 15 процентовсвоей области для индексов, и 40 процентов на расширение строк.2. Вы получили право SELECT в таблице Порядков продавца Diane. Введите командутак чтобы вы могли ссылаться к этой таблице как к "Orders" не используя имя"Diane" в качестве префикса.3. Если произойдет сбой питания, что случится с всеми изменениями сделанными вовремя текущей транзакции?4. Если вы не можете видеть строку из-за ее блокировки, какой это тип блокировки?5.
Если вы хотите получить общее, максимальное, и усредненое значения сумм приобретений для всех порядков, и не хотите при этом запрещать другим пользоваться таблицей, какой уровень изоляции будет этому соответствовать?(См. Приложение A для ответов.)24КАК ДАННЫЕ SQLСОДЕРЖАТСЯ ВУПОРЯДОЧЕННОМ ВИДЕВ ЭТОЙ ГЛАВЕ, ВЫ УЗНАЕТЕ КАК ТИПОВАЯ SQL БАЗА данных сохраняет самоорганизованность. Не удивительно, что самоорганизованность обеспечивается реляционной базой данных, создаваемой и поддерживаемой с помощью программы. Выможете обращаться к этим таблицам самостоятельно для получения информации опривилегиях, таблицах, индексах, и так далее.
Эта глава покажет вам некоторые типы, содержащиеся в такой базе данных.КАТАЛОГ СИСТЕМЫЧтобы функционировать как SQL база данных, ваша компьютерная системадолжна следить за многими различными вещями: таблицами, представлениями, индексами, синонимами, привилегиями, пользователями, и так далее. Имеются различные способы делать это, но ясно, что наиболее логичный, эффективный, исогласованный способ делать это в реляционной среде состоит в том, чтобы сохранять эту информацию в таблицах.