Редактирование: Базы Данных, 26 лекция (от 08 декабря)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 6: Строка 6:
Функция 4. Журнализация и восстановление
Функция 4. Журнализация и восстановление
-
Единственный возможный способ решения проблемы фантомов – предикатная синхронизационная блокировка. Она решает не только эту проблему.
+
Единственны йвозм способ решения проблемы фантомов – предиктная бсинхронизационная блокировка. Они решают не только эту проблему.
Сейчас лектор расскажет ещё одно решение проблемы.
Сейчас лектор расскажет ещё одно решение проблемы.
Строка 14: Строка 14:
Считается хорошим тоном во многих системах – строка системы – наиболее подходящий уровень для установки блокировки.
Считается хорошим тоном во многих системах – строка системы – наиболее подходящий уровень для установки блокировки.
-
Вопрос, который лектор любит задавать на экзамене: предположим, что в качестве механизма блокировокок выбран двухфаз протокол, единица блокировки – строка, пример операции, которую нельзя выполнить. Лектор не знает, как при таком способе выполнить операцию уничтожения таблицы. Для этого нужно сначала выкинуть данные, строка за строкой, и блокировать их. Когда последняя строка удалена, то можно её уничтожить. Но никто не мешает вставить другой кортеж в это время. Нужно блокировать таблицу целиком в режиме X. Если в качестве единицы блокировки таблица целиком, то когда как удалить базу данных? А если блокировать БД целиком, то как тогда выполнять транзакции одновременно? Следовательно, нужно иметь транзакции разных уровней. Как это сделать?
+
Вопрос, который лектор любит задавать на экзамене: предположим, что в качестве механизма блокировокок выбран двухфаз протокол, единица блокировки – строка, пример операции, которую нельзя выполнить. Лектор не знает, как при таком способе выполнить операцию уничтожения таблицы. Для этоог нужно сначала выкинуть данные, строка за строкой, и блокировать их. Когда последняя строка удалена, то можно её уничтожить. Но никто не мешает вставить другой кортеж в это время. Нужно блокировать таблицу целиком в режиме X. Если в качестве единицы блокировки теаблица целиком, то когда как удалить базу данных? А если блокировать БД целиком, то как тогда выполнять транзакции одновременно? Следовательно, нужно иметь транзакции разных уровней. Как это сделать?
-
Что придумали разработчики System R: (вероятно, придумал Джимм Грей, по крайней мере, первая публикация его. Bill Gates называет его великим деятелем современной информатики. Вероятно, потому, что он сотрудник Microsoft в течение последних 10 лет. Его считают великим писателем, потому что он любит писать. Кроме 5-6 статей в год, он одновременно готовит собственные произведения, которые редко публикуются. Он, конечно, прославился, как и многие другие, в проекте System R. И в то время тоже очень любил писать. Лектор хочет, чтобы и мы тоже к 25 годам захотели писать. Он больше всех писал о проекте System R.)
+
Что придумали разработчики Систем Р: (вероятно, придумал Джимм Грей, по крайней мере, первая публикация его. БГ називает его великим деятелем современной информатики. Вероятно, потому, что он сотрудник МС в течение последних 10 лет. Его считают великим писателем, потому что он любит писать. Кроме 5-6 статей в год, он одновременно готовит собственные произведения, которые редко публикуются. Он, конечно, прославился, как и многие другие, в проекте Систем Р. И в то время тоже очень любил писать. Лектор хочет, чтобы и мы тоже к 25 годам захотели писать. Он больше всех писал о проекте Систем Р.) граниулированные синхрозационные блокировки. Это некоторый способ помочь разобраться менеджеру блокировок при запросе блокировки. Можно представить, что вся БД представляет некоторую иерархию. Она состоит из набора сегментов, каждый сегмент состоит из набора таблиц, каждая таблица состоит из набора строк. Почему это упрощение – потому что ещё есть индексы. Так вот, что, как мы уже убедлились, если синхр ведётся не на уровне условий а на уровне объектов, от нужно иногда блокировать БД целиком. Если я хочу ывполнить операцию над БД, то я не должен иметь возможности работать с Сегментами, Таблицами и Строками, если с Сегментом, то с другими Сегментами можно, а с этим же сегментом, таблицами и строками в нём не могу. Соотв, должны быть блокировки для каждого уровня. Были рпедложены три дополнительных блокировки% блокировки намеряния. (intended block)
-
 
+
-
'''Гранилированные синхрозационные блокировки.'''
+
-
Это некоторый способ помочь разобраться менеджеру блокировок при запросе блокировки. Можно представить, что вся БД представляет некоторую иерархию. Она состоит из набора сегментов, каждый сегмент состоит из набора таблиц, каждая таблица состоит из набора строк. Почему это упрощение – потому что ещё есть индексы. Так вот, что, как мы уже убедились, если синхронизация ведётся не на уровне условий а на уровне объектов, то нужно иногда блокировать БД целиком. Если я хочу ывполнить операцию над БД, то я не должен иметь возможности работать с Сегментами, Таблицами и Строками, если с Сегментом, то с другими Сегментами можно, а с этим же сегментом, таблицами и строками в нём не могу. Соотв, должны быть блокировки для каждого уровня. Были предложены три дополнительных блокировки
+
-
% блокировки намеряния. (intended block)
+
1.Intended to share (IS)
1.Intended to share (IS)
2.Intended to excludive (IX)
2.Intended to excludive (IX)
3.Shared, intended to exclusive (SIX)
3.Shared, intended to exclusive (SIX)
-
Если хочу заблокировать строку в режиме S, тогда надо ещё на таблицу, сегмент и БД поставить IS. Если таблицу X, тогда сегмент и БД на IX.
+
Если хочу заблокировать строку в режиме S, тогда надо ещё на таблицу, сегмент и БД поставить IS. Если табилцу X, тогда сегмент и БД на IX.
SIX – таблица в режиме чтения, строки могут быть ещё заблокировать в режиме записи.
SIX – таблица в режиме чтения, строки могут быть ещё заблокировать в режиме записи.
Строка 81: Строка 77:
|}
|}
-
Как в System R – у них была реализована такая схема гранулированных блокировок. Почему гранулированных – разного размера объекты в менеджере можно блокировать.
+
Как в Систем Р – у них была реализована такая схема гранулир блокировок. Почему гранулир – разного размера объекты в менеджере можно блокировать.
Как избежать проблемы фантомов
Как избежать проблемы фантомов
-
Как можно решить проблему гранулированности с помощью предикатных блокировок. Что такое заблокировать таблицу целиком с тз логического условия? Таблица – n-мерное пространство, поэтому чтобы уничтожить таблицу, нужно заблокировать это пространство целиком. Если есть таблица T{A1...An}, то нужно поставить блокировку X с таким условием: X(min1 <= A1 <= max1, ..., minn <= An <= maxn). Что такое заблокировать БД – берутся все типы данных, которые могут быть у атрибутов таблицы и блокируются они все.
+
Как можно решить проблему гранулированности с помощью предикатных блокировок. Что таакое заблокировать таблицу целиком с тз логического условия? Таблица – н-мероное пространство, поэтому чтобы унистожить таблицу, нужно заблокировать это пространство целиком. Если есть таблица T{A1...An}, то нужно поставить блокировку X с таким условием: X(min1 <= A1 <= max1, ..., minn <= An <= maxn). Что такое заблокировать БД – берутся все типы данных, которые могут быть у атрибутов таблицы и блокируются они все.
-
Как делали в System R и теперь во всех коммерческих системах: разделяют два случая: вопрос, какое сканирование проводится – прямое сканирование (тогда блокируется таблица целиком) или сканирование через индекс (как правило, оптимизатор запросов выбирает сканирование через индекс, когда для ключевого поля входят условия-диапазаон значения ключа, тогда они применяют вариант предикатной блокировки в одномерном пространстве)
+
Как делали в систем Р и теперь во всех коммерческих системах: разделяют два случая: вопрос, какое сканирование проводится – прямое сканирование (тогда блокируется таблица целиком) или сканирование через индекс (как правило, оптимизатор запросов выбирает сканирование через индекс, когда для ключ поля входят условия-диапазаон значения ключа, тогда они применяют вариант предикатной блокировки в одномерном пространстве)
После перерыва – сначала про метод сериализации транзакций, а потом немножечко совсем об ... алгоритмах.
После перерыва – сначала про метод сериализации транзакций, а потом немножечко совсем об ... алгоритмах.
Строка 98: Строка 94:
Пример:
Пример:
-
Есть две транзакции, есть два объекта. Т1 блокирует О1 в режиме х, Т2 – о2, потом Т1 хочет получить доступ О2, а Т2 к О1. В этой ситуации ни одна, ни вторая никогда не сдвинуться с места, смертельное объятие. Есть разные схемы, которые позволяют использовать синхронизационные блокировки и избегать такой ситуации, например, перенумеровать все ресурсы и обращаться в порядке возрастания номеров, но это противоречит духу транзакций, так как это последовательность произвольных операций. Поэтому в СУБД приходиться использовать специальную технику, которая называется техникой распознавания и разрушения. Лектор много лет это читает и говорит, что системных программистов лучше всего учить на СУБД, потому что СУБД это такая программная система, в оторой приходиться применять все технологии, которые нужны в СП. То, что применяется в СУБД, нельзя применять в ОС, так как там слишком много разных ресурсов. Всё распознавания тупиков сводится к построению и анализу графа ожидания транзакций. Это один из вариантов, но он понятный и простой. Строить его в виде двудольного графа – вершины одного рода – транзакции, которые либо блокировали что-то, либо ожидают что-то, вторые – блокированные объекты. Графы ориентированные. Если транзакция что-то блокирует, то проводится дуга от транзакции к объекту, если ожидает, то от объекта к транзакции. Легко доказать, что блокировка есть тогда и только тогда, когда есть хотя бы один цикл. Два проблемы: как строить граф и как искать циклы.
+
Есть две транзакции, есть два объекта. Т1 блокирует О1 в режиме х, Т2 – о2, потом Т1 хочет получить доступ О2, а Т2 к О1. В этой ситуации ни одна, ни вторая никогда не сдвинуться с места, смертельное объятие. Есть разные схемы, которые позволяют использовать синхр блокировки и избегать такой ситуации, например, перенумеровать все ресурсы и обращаться в порядке возрастания номеров, но это противоречит духу транзакций, так как это последовательность произвольных операций. Поэтому в СУБД приходиться использовать специальную технику, которая называется техникой распознавания и разрушения. Лектор много лет это читвает и говорит, что системных программистов лучше всего учить на СУБД, потому что СУБД это такая программная система, в оторой приходиться применять все технологии, которые нужны в СП. То, что применяется в СУБД, рнельзя применять в ОС, так как там слишком много разных ресурсов. Всё распознавания тупиков сводится к построению и анадлизу графа ожидания транзакций. Это один из вариантов, но он понятный и простой. Строить его в виде двуольного графа – вершины одного рода – транзакции, которые либо болкировали что-то, либо ожидают что-то, вторые – блокированные объекты. Графы ориентированные. Если транз что-то блокирует, то проводится уга от транзакции к объекту, если ожидает, то от объекта к гранзакции. Легко доказать, что блокировка есть тогда и только тогда, когда есть хотя бы один цикл. Два проблемы: как строить граф и как искать циклы.
Как строить: инкрементально, при каждом запросе на блокировку. Граф строится в менеджере.
Как строить: инкрементально, при каждом запросе на блокировку. Граф строится в менеджере.
-
Представить себе в уме граф ожидания транзакций произвольной сложности. Находим все такие транзакции, у которых только исходящие дуги. Эти транзакции считаются безопасными, потому что ничего не ждут, значит они могут благополучно закончиться. Тогда мы смотрим, куда эти стрелки. Если у этого объекта есть исходящая стрела, то мы меняем эту стрелку наоборот, считваем, что транзакция удалась. Теперь смотрим ещё раз то же самое. Этот алгоритм железно работает, называется алгоритмом редукции графа. Он требует достаточно большой работы, сложность алгоритма n*m, если есть n транзакций и m-маша объектов.
+
Представить себе в уме граф ожидания транзакций произвольно сложный. Находим все такие транзакции, у которых только исходящие дуги. Эти транзакции считаются безопасными, потому что ничего не ждут, значит они могут благополучно закончиться. Тогда мы смотрим, куда эти стрелки. Если у этого объекта есть исходящая стрела, то мы меняем эту стрелку наоборот, считваем, что транзакция удалась. Теперь смотрим ещё раз то же самое. Этот алгоритм жедезно работает, называется алгоритмом редукции графа. Он требует достаточно большой работы, сложность алгоритма н*м, если есть н транзакций и м-маша объектов.
Начинать заподозривать наличие тупиков, если транзакции не продвигаются вперёд.
Начинать заподозривать наличие тупиков, если транзакции не продвигаются вперёд.
Строка 109: Строка 105:
Как исправлять ситуацию:
Как исправлять ситуацию:
-
Одним из способов, известных науке: Выбор жертв. Если двум группам жить плохо, то одну надо истребить, и тогда второй станет жить хорошо. То есть силком сделать роллбэк одной из транзакций, и она начинает его делать. Он делает роллбэк, объекты освобождаются, и смотрим, остались циклы или нет. Как Раскольников – убил миллионщицу, и всем стало хорошо. Но старых убивать плохо, они же почти закончились. Лучше убивать младенцев. Но их тоже убивать плохо, потому что они ещё почти ничего не сделали. Можно выбирать транзакции по весам. А если эта транзакция, которая запущена от имени начальника? Все кипят, работают, а начальнику ресурсов не хватило. Так тоже нельзя.
+
Одним из способов, известных науке: Выбор жертв. Если двум группа мжить плохо, то одну надо истребить, и тогда второй станет жить хорошо. То есть силком сделать роллбэк одной из транзакций, и она начинает его делать. Он делает роллбэк, объекты освобождаются, и смотрим, остались циклы или нет. Как Раскольников – убил миллионщицу, и всем стало хорошо. Но старых убивать плохо, они же почти закончились. Лучше убивать младенцев. Но их тоже убивать плохо, потому что они ещё почти ничего не сделали. Можно выбирать транзакции по весам. А если эта транзакция, которая запущена от имени начальника? Все кипят, работают, а начальнику ресурсов не хватило. Так тоже нельзя.
-
Все идиоты, а Администратор БД умный, и он должен все проблемы решать. Такое мнение много лет существовалло, и в настоящее время СУБД такой прибор, который мы видим на МКС – там дикое количество ручечек. И настройка СУБД под конкретную организацию, если есть Господь Бог на свете, если есть Администратор. Но администраторы конечны они люди, и дикое количество ручек приводит к тому, что система становится расстроена. А сетапа, то есть вещи, которая возвращает систему в исходное состояния нет, это не телевизор.
+
Все идиоты, а Администратор БД умный, и он должен все проблемы решать. Такое мнение много лет существовалло, и в настоящее время СУБД такой прибор, который мы видим на МКС – там дикое количество ручечек. И настрока СУБД под конкретную организацию, если есть Господь Бог на свете, если есть Администратор. Но администраторы конечны они люди, и дикое количество ручек приводит к тому, что система становится расстроена. А сетапа, то есть вещи, которая возвращает вивтему в исходоное состояния нет, это не телевизор.
Двухуровневые блокировки: логическая и физическая блокировка.
Двухуровневые блокировки: логическая и физическая блокировка.

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы