Элементы блокировки

Блокированная жилая застройка – вид использования земельного участка и назначение ОКС

Элементы блокировки

Под «блокированной жилой застройкой» понимается вид разрешённого использования земельных участков и объект недвижимости в статусе жилого дома.

Блокированный жилой дом – ВРИ ЗУ

В генеральных планах поселений и ПЗЗ зона жилой застройки дробится на территории. Для зоны жилой застройки определены главенствующие виды использования земельных участков:

  1. индивидуальное жилищное строительство (ИЖС)
  2. малоэтажная застройка
  3. приусадебные участки личного подсобного хозяйства (ЛПХ)
  4. блокированная жилая застройка
  5. передвижное жильё
  6. среднеэтажная жилая застройка
  7. многоэтажная жилая застройка (высотная застройка)
  8. обслуживание жилой застройки

Блокированная жилая застройка – это один из типичных видов  использования земельных участков в населённых пунктах. Точнее, это ВРИ ЗУ в части территориальной зоны жилой застройки.

Действующий Классификатор ВРИ 2019 – главный ориентир при анализе возможности застройки участков в черте населённого пункта.  

Виду использования участков «блокированная жилая застройка» присвоен код 2.3. В его описании указывается, что наделы с таким ВРИ можно использовать:

  • для возведение жилого дома, пригодного для постоянного проживания:
    • дом:
      1. не делится на квартиры
      2. высотой не выше 3 надземных этажей
      3. этажи имеют общую стену без проёмов с соседним домом
      4. количество совмещённых домов в этом «общем доме» – не более 10
  • для разведения:
    • декоративных и плодовых деревьев
    • овощей
    • ягодных культур
  • для строительства:
    • гаражей
    • вспомогательныех сооружений
  • обустройства:
    • спортивных и детских площадок
    • площадок отдыха

На участке с ВРИ «блокированная жилая застройка» разрешается строить:

  1. жилой дом, состоящий максимально из 10 совмещённых блоков
  2. гаражи
  3. сооружения вспомогательного назначения 

Что такое совмещённые дома?

Совмещённые дома – гибридный вид малоэтажных жилых строений. Это расположенные в ряд однотипные жилые строения, блокированные друг с другом боковыми стенами.

Каждый из автономных блоков имеет:

  1. отдельный вход
  2. небольшой участок (палисадник)
  3. гараж (нередко)

Дома блокированной застройки не относятся к классу многоквартирных домов, в которых:

  • выход из собственной квартиры ведёт в парадную (место общественного пользования)
  • выход из парадной – на территорию (ЗУ)
  • участок находится в собственности всех жильцов дома

В совмещённых домах у каждого блока есть свой выход на личный участок, на котором может стоять собственный гараж.

Распространённые виды жилой блокированной застройки:

  • дуплексы
  • таунхаусы
  • лейнхаусы
  • квадрохаусы
  • британхаусы

Они различаются архитектурными решениями и внутренними планировками.

Земельные участки, прилегающие к блокам 

У застройщиков блокированного дома, возникает вопросы по исходному ЗУ:

  • как он распределяется между совмещёнными домами
  • какой должна быть его площадь

Ответ на них есть в Градостроительном кодексе РФ  (пункт 2 статьи 49):

жилые дома блокированной жилой застройки соответствуют требованиям:

  • количество этажей  – не более 3
  • количество блоков – не более 10
  • каждый блок:
    • предназначен для проживания одной семьи
    • имеет общую стену (стены):
      1. без проёмов с соседним блоком или соседними блоками
      2. стены – без окон и дверей
    • расположен на отдельном ЗУ
    • имеет выход на территорию общего пользования

В отношении исходного земельного участка сказано:

  1. у каждого блока свой ЗУ
  2. каждый блок с изолированным выходом на общую территорию 

Исходный ЗУ, на котором будет возведена блокированная застройка, должен претерпеть некоторые изменения. 

Формирование земельных участков

Поскольку каждый блок жилого дома блокированной застройки должен располагаться на отдельном ЗУ, то наделы для блоков:

  1. формируются из исходного участка:
    • при межевании
    • при определении их границ
  2. ставятся на учёт по завершении кадастровых работ

ВРИ ЗУ, занятых блоками, должен соответствовать правовому режиму совмещённых домов. Наименование ВРИ блочного участка – «блокированные жилые дома».

При формировании ЗУ для блоков нужно учесть, что:

  • границы смежных участков устанавливаются от общих стен блоков при межевании
  • раздел изначального ЗУ проводится по линиям стен 
  • количество формируемых ЗУ должно соответствовать количеству блоков
  • размеры блочных ЗУ должны соответствовать требованиям градостроительного регламента:
    • установленным предельным размерам участков для ВРИ «блокированная жилая застройка»  

Сведения о блочных участках будут отражены в дальнейшем в разделах разрешения на ввод жилого дома блокированной застройки в эксплуатацию (письмо Минэкономразвития России № Д23 и-1328 от 14.03. 2017).

Жилой дом блокированной застройки – это единое строение:

  • из малоэтажных однотипных зданий
  • с общими стенами у соседних зданий

Каждый блок – жилой дом с определённой спецификой. Она отражена в Жилищном кодексе РФ (пункт 2 статьи 16).

Земельные участки для каждого из блоков должны соответствовать требованиям о предельных размерах земельного участка. Удобнее пояснить всё это на примерах: 

№1

  • установленный предельный минимальный размер ЗУ – 10 сот.
  • площадь исходного участка – 20 сот.

максимальное количество блоков – 2 

площадь блочных ЗУ – 10 сот.

№2

  • установленный предельный минимальный размер ЗУ – 4 сот.
  • площадь исходного участка – 16 сот.

максимальное количество блоков – 4

площадь блочного ЗУ – 4 сот.

№3

  • установленный предельный минимальный размер ЗУ – 10 сот.
  • площадь исходного участка – 16 сот.

возвести блокированный жилой дом на участке нельзя:

  • при минимальном числе блоков (2) получается:
    • площадь блочного ЗУ – 8 сот.
    • несоответствие требованию градостроительного регламента

Площадь ЗУ, прилегающего к каждому блоку жилого дома, не должна быть меньше предельного минимума, установленного градостроительным регламентом для жилой застройки в ПЗЗ поселения.

 Жилой дом блокированной застройки на участке ИЖС

Если в отношении самого строения особых проблем нет:

  • оно соответствует жилому назначению
  • статус «блокированный жилой дом» можно установить с помощью технического плана объекта капитального строительства на основе паспорта БТИ

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

ВРИ ЗУ под  блокированный жилой дом должен соответствовать наименованию вида использования по Классификатору ВРИ. Никаким другим, кроме как «блокированная жилая застройка», он быть не должен.

Это значит, что придётся выяснить: можно или нет изменить существующий ВРИ «для ИЖС» на вид «блокированная жилая застройка». В противном случае, строительство на участке, предназначенном для ИЖС, не будет соответствовать ВРИ этого участка.

Помогут в этом:

  1. выписка из ПЗЗ о ВРИ ЗУ для территориальной зоны, в которую включён надел 
  2. материалы градостроительного плана земельного участка (ГПЗУ)

Оба документа содержат перечни основных, условно-разрешённых и вспомогательных ВРИ ЗУ. Из них можно выбрать тот вид, что подходит для поставленной задачи.

Не исключено, что ВРИ «блокированная жилая застройка» в перечне не будет. Придётся тогда уточнить возможность изменения территориальной зоны земельного участка на ту зону, где необходимый вид присутствует в основных или условно-разрешённых ВРИ.

В отношении площади блочных участков нужно:

  1. выяснить предельный размер ЗУ для блокированной жилой застройки, установленный градрегламентом 
  2. сопоставить площади будущих участков, прилегающих к блокам, с предельным размером 

Пример

Установленный минимальный размер ЗУ – 10 сот.

  • построить блокированный жилой дом на ЗУ площадью 15 сот. не получится
  • на ЗУ площадью 25 сот. можно возвести дом с 2 блоками

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

Разрешение на строительство блокированного жилого дома

Строительство блокированного жилого дома должно вестись на едином исходном земельном участке (или на нескольких смежных земельных участках под блокированную жилую застройку). Разрешительная документация выдаётся с учётом этой ситуации (Письмо Минэкономразвития России № Д23 и-5649 от 28.11.2013). 

Если несколько владельцев земельных участков принимают совместное решение о блокированной застройке. Для получения разрешения на неё необходимо:

  • объединить участки в один
  • подготовить межевой план образованного ЗУ
  • поставить ЗУ на кадастровый учёт

Раздел исходного участка на блочные ЗУ выполняется перед вводом блокированного жилого дома в эксплуатацию. На каждый образованный ЗУ оформляется межевой план.

Разрешение на строительство

  • подтверждает соответствие проектной документации градостроительным требованиям
  • удостоверяет соответствие планировочной схемы расположению здания
  • даёт застройщику право на возведение/реконструкцию капитального объекта

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

Отсутствие разрешения на строительство исключает:

  • постановку объекта на кадастровый учёт
  • регистрацию права  

Порядок получения разрешения

Упрощённых процедур, касающихся строительства или реконструкции блокированных домов, не существует. 

Применяются общие правила:

  • подготовка собственником:
    • материалов для получения ГПЗУ
    • проектной документации
  • получение разрешения
    • на строительство объекта
    • на ввод объекта в эксплуатацию

ГПЗУ выдаётся на основании выполненных работ по территориальному планированию и межеванию территорий. План содержит сведения:

  1. о границах ЗУ
  2. о минимальных отступах от границ
  3. о зонах действия публичных сервитутов
  4. о разрешённом использовании ЗУ
  5. требования:
    • к назначению
    • к параметрам ОКС
    • к размещению ОКС на ЗУ
  6. о технических условиях подключения ОКС к сетям инженерно-технического обеспечения

ГПЗУ – стартовый документ в процессе подготовки к строительству блочного жилого дома. В заявлении на его предоставление можно указать планируемого количество блоков.

В полученном ГПЗУ должно предусматриваться выделение ЗУ под каждый блок жилого дом.

Градостроительный план земельного участка – основа для подготовки схемы планировочной организации земельного участка (СПОЗУ). На схеме обозначаются:

  • локация блокированного жилого дома
  • места подъездов и проходов
  • границы зон действия:
    • публичных сервитутов
    • ЗОУИТ

Разработка СПОЗУ ведётся в соответствии:

  • с нормами ПЗЗ для той территориальной зоны, к которой относится исходный ЗУ
  • с требованиями нормативных документов:
    • СП 30-102-99 «Планировка и застройка территорий малоэтажного строительства»
    • СП 42.13330.2016 «Градостроительство. Планировка и застройка городских и сельских поселений»

    Источник: https://www.zemvopros.ru/page_12637.htm

    Как работают управляемые блокировки

    Элементы блокировки

    Казалось, о работе сервера 1С и механизма блокировок за годы разработки уже знаешь всё, но 1С не перестаёт удивлять.

    Механизм управляемых блокировок создан 1С для того, чтобы по сути полноценно заменить механизм транзакционных блокировок на уровне сервера СУБД, отчасти из за политики “1С работает с любыми СУБД”.

    Но на самом деле всё получилось не совсем так – далее проведём “лабораторную работу”, и сделаем из неё выводы – в лучших традициях школьной физики :).

    Итак начнём – простой кейс:

    Конфигурация 2 объекта РС и Документ.

    Регистр сведений независимый, код следующий:

    Блок кода 1

    Если Блокировать Тогда Блокировка = Новый БлокировкаДанных(); Элемент = Блокировка.Добавить(“РегистрСведений.РегистрСведений1”); Элемент.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); КонецЕсли; Если ЧитатьЗапросом Тогда Запрос = Новый запрос(); Запрос.Текст = “ВЫБРАТЬ | РегистрСведений1.Рес КАК Рес |ИЗ | РегистрСведений.РегистрСведений1 КАК РегистрСведений1”; ТЗ = Запрос.Выполнить().Выгрузить(); КонецЕсли; Если ЧитатьНабор Тогда Набор = РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей(); Набор.Прочитать(); КонецЕсли; Если ЗаписатьНабор Тогда Запись = набор.Добавить(); Запись.Изм = Строка(Новый УникальныйИдентификатор()); Запись.Рес = 3; Набор.Записать(); КонецЕсли;

    Всё предельно просто.

    Теперь Запускаем два сеанса.

    Сеанс 1: Проводим документ с галкой “Блокировать”. Ставим точку останова на строке:

    “Если ЧитатьЗапросом Тогда”.

    Сеанс 2: Проводим документ с галкой “Читать запросом”. 

    Внимание вопрос: “Проведётся ли документ во втором сеансе или нет?”

    Нам бы очень хотелось чтобы ответ на данный вопрос был “нет”.

    Тем не менее, документ проводится – без особых проблем.

    Повторяем эксперимент – только во втором сеансе ставим галку “чтение набора”

    Тот же вопрос “Проведётся?”

    Очевидный ответ – “Конечно”, ведь по сути что там что там чтение всего регистра.

    Тем не менее наблюдаем примерно следующую историю: 

    Таким образом, объектное чтение и чтение запросом работает по-разному. На мой взгляд, это в корне неправильно. При этом объектное чтение, очевидно, учитывает управляемые блокировки, а чтение запросом – ни коим образом.

    Спойлер – эти тесты проводим пока в режиме “клиент-сервер”.

    Из эксперимента выше сделаем несколько первых выводов:

    Вывод 1: 1С полностью игнорирует все управляемые блокировки при чтении в транзакции запросом.

    Вывод 2: Объектное чтение и чтение запросом работает по разному

    Тут можно сказать: “здравствуй фантомное чтение, неповторяющееся чтение”. От “Грязного чтения” нас убережет MS SQL: в уровне изоляции READ COMMITED SNAPSHOT “грязное чтение” невозможно. Хотя я тоже сомневаюсь, потому как объектная модель 1С не полностью отражается в СУБД возможно могут быть нюансы, но примеров подобрать пока не удаётся.

    Для того, чтобы понять на каком этапе своего развития в платформе 1С потеряли требование “согласованности данных” обратимся к истории.

    Попробуем выполнить следующий код в разных версиях платформы:

    Блок кода 2

    Запрос = Новый Запрос; Запрос.Текст = “ВЫБРАТЬ | СУММА(РегистрСведений1.Рес) КАК Рес |ИЗ | РегистрСведений.РегистрСведений1 КАК РегистрСведений1 | |ДЛЯ ИЗМЕНЕНИЯ”; Выборка = запрос.Выполнить().Выбрать(); Выборка.Следующий(); Количество = Выборка.Рес; Если Количество > 0 Тогда Запись = РегистрыСведений.РегистрСведений1.СоздатьМенеджерЗаписи(); Запись.Изм = Строка(Новый УникальныйИдентификатор()); Запись.Рес = -1; Запись.Записать(); КонецЕсли;

    Я специально избегаю регистров накопления в примерах, потому как в РН как минимум две таблицы на уровне СУБД, а хочется продемонстрировать на одной.

    Этот код выполняется в транзакции – в обработке проведения документа в моём случае. Первую транзакцию нужно конечно остановить и попытаться провести вторую. По условию мы не должны уйти в минус.

    1С 8.1  и ранее (ну или просто Автоматический режим блокировки)   

    второй документ “висит на блокировке”. После прохождения точки останова второй документ проводится, запись в РС не создаётся.

    Код отрабатывает правильно как в случае остановки “после записи” так и в случае “после чтения”.

    Секрет конечно в инструкции “для изменения”, которая кроме всего прочего превращает S блокировку в U.

    На уровне СУБД уровень изоляции MS SQL – SERIALIZABLE. MS SQL блокирует всё что надо и не надо. Чтобы получить несогласованные данные  надо очень постараться.

    Но с параллельной работой в таком варианте конечно будут трудности, всем известно какие.

    1С 8.2 и первые версии 8.3 (режим управляемых блокировок)

    Появились “Управляемые блокировки”. Самое главное что происходит с MS SQL при установке “управляемой блокировки” – уровень изоляции становится “READ COMMITED”. 

    Чтобы включить его в последних редакциях 8.3 нужно выполнить:

    ALTER DATABASE databasename SET ALLOW_SNAPSHOT_ISOLATION OFF GO ALTER DATABASE databasename SET READ_COMMITTED_SNAPSHOT OFF

    GO

    Здесь уже немного похуже. Если точку останова в коде поставить после записи – всё отработает как и в предыдущем примере – транзакция установит X блокировку и всё будет OK. А вот если точку останова поставить после чтения – получим совместимые S блокировки – одна и та же информация будет считана двумя транзакциями.

    Конечно данный уровень изоляции уже не охраняет нас от ошибок “фантомного” и “неповторяемого” чтения.

    В приведённом примере, тем не менее, в большинстве случаев всё будет работать верно, потому что всё-таки поведение системы в транзакции более-менее прогнозируемо – если данные считаны, то на них устанавливается как минимум S блокировка. 

    Конечно нужно добавить в этот код начало вроде:

    Блокировка = Новый БлокировкаДанных(); Элемент = Блокировка.Добавить(“РегистрСведений.РегистрСведений1”); Элемент.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать();

    и нам уже ничего не страшно.

    Зачем я тогда делаю на этом акцент?

    В данном примере вы читаете остатки (по сути) – их конечно нужно блокировать.

    Но если у вас в транзакции происходит чтение элемента справочника, который в данный момент может изменять другая транзакция?

    Вот тут как раз S блокировка очень сильно пригодилась бы. Но об этом дальше.

    Современные версии 1С 8.3

    Возвращаем обратно режим версионника:

    ALTER DATABASE databasename SET ALLOW_SNAPSHOT_ISOLATION ON GO ALTER DATABASE databasename SET READ_COMMITTED_SNAPSHOT ON

    GO

    Выполняем код – получаем “-1” как в случае установки “точки останова” при чтении, так и в случае установки “точки останова” при записи.

    Теперь можно сделать ещё один вывод:

    Вывод 3: чем современнее версия 1С, тем больше возможности для параллельной работы и тем меньше шансов обеспечить согласованность данных.

    А теперь “Гвоздь программы”: файловая база – код приведенный в блоке кода 1 выполняем в ней. Единственное изменение – код чтения данных из регистра придётся перенести в обработку, т.к. в файловой базе два одинаковых документа параллельно провести не получится.

    В обработке будет код:

    НачатьТранзакцию(); Запрос = Новый запрос(); Запрос.Текст = “ВЫБРАТЬ | РегистрСведений1.Рес КАК Рес |ИЗ | РегистрСведений.РегистрСведений1 КАК РегистрСведений1”; ТЗ = Запрос.Выполнить().Выгрузить(); ЗафиксироватьТранзакцию();

    В документе ставим галку “блокировать” и точку останова, выполняем обработку – уверенно висит на блокировке. 

    Убираем галку “блокировать” в документе (но не точку останова) конечно без проблем читает регистр.

    Итак, в завершение “чудес” управляемых блокировок получаем их разную работу в файловой и клиент-серверной версии.

    Вывод 4: Управляемые блокировки в файловой и клиент-серверной версиях работают по-разному. В файловой – “нормально”.

    Теперь о косяках в типовых. Для примера возьму УТ 11.

    Перед записью в набор движения естественно читаются, происходит это в функции “ТекстЗапросаТаблицаТоварыНаСкладах(Запрос, ТекстыЗапроса, Регистры)” – для Товаров на складах. 

    Так вот, “косяк” потенциально будет во всех строчках этого запроса где “точка” фигурирует дважды:

    “КОГДА ЕСТЬNULL(ТаблицаТовары.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)”

    “И (НЕ ТаблицаТовары.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке

    И ТаблицаТовары.Номенклатура.ТипНоменклатуры В”

    Что в этом плохого? 

    Ну вот представьте – начали вы проведение документа пока склад ещё был не ордерным, а в процессе проведения кто-то его поменял на ордерный…

    Или тип номенклатуры сменил с “товара” на “услугу”. Он это сможет влёгкую сделать. А вы потом не сможете доказать что “когда я нажимал кнопку всё было хорошо”. Все проверки, включая конечно “обработку проверки заполнения” документ пройдёт ещё до изменения данных. 

    Кроме того – есть прекрасная возможность в один регистр записать данные исходя из информации что склад ордерный, а в другой – нет, и всё это в одной транзакции. Это и есть так называемое “фантомное чтение”, которое, как мы помним, для “READ COMMITED SNAPSHOT” вполне возможно. 

    Наверное не нужно лишний раз писать что найти и устранить подобные ошибки очень и очень сложно. Ещё труднее понять что же являлось причиной подобного поведения системы.

    Источник: https://infostart.ru/1c/articles/1051660/

    Лекция 11 Элементы блокировки

    Элементы блокировки

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

    Природа и размерэлементов являются спорными вопросами.Можно видеть большие элементы, подобныеотношениям, или малые, такие как отдельныекортежи и даже компоненты кортежей.

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

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

    Рассмотрим теперьпрограмму, которая при взаимодействиис базой данных не только читает, но изаписывает её элементы, но и блокируети разблокирует их.

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

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

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

    Пример 3.2. ПрограммуР из примера 3.1 можно было бы записатьс блокировками следующим образом:

    P: LOCK A; READ A; A:=A+1;WRITE A; UNLOCK A;

    ПустьТ1 и Т2 – две исполнимых программы Р. Привыполнении Т1 произойдёт блокировка.Если Т2 начинается до завершения Т1, тосистема заставит её ждать           A:=A+1                                   Т1 |———————-|  

    Т2  – – – – – – – -|——————–|  Совместным результатомокажется увеличение А на 2.

    Бесконечное ожидание и тупики

    Пусть существуетмеханизм блокировки. В примере 2 блокировкапредоставляется Т2 после снятия еётранзакцией Т1. Рассмотрим теперь инуюситуацию.

    Пусть во время пребывания Т2в состоянии ожидания транзакция Т3только запрашивает блокировку А, и этотзапрос выполняется раньше, чем запросТ2.

    Далее, в то время, когда блокировкуустановила транзакция Т3, её запрашиваетТ4, чьё требование удовлетворяется послеразблокирования А транзакцией Т3 и т.д.Очевидно, при этом не исключена возможностьтого, что Т2 будет бесконечно находитьсяв состоянии ожидания.

    Т1:LOCK A; UNLOCK A;

    T2: – –– – – – –  -– – – – – – –  – – – — – – – – T3: LOCK A; UNLOCK A; T4:LOCK A; UNLOCK A; T5:. .

        Тогдакак некоторые другие транзакции постоянноосуществляют блокировку А, хотя исуществуют неограниченное числомоментов, когда транзакция Т2 имеетшансы заблокировать А.   Состояние такого рода называют бесконечныможиданием.Подобная проблема потенциально можетвозникнуть в любой обстановке,предусматривающей параллельноеисполнение процессов.

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

    Этастратегия (“первым вошёл – первымобслуживается”) устраняет бесконечныеожидания.

    Более серьёзнаяпроблема, которая возникает припараллельной обработке – это такназываемые «тупики».

    Пример 3.3. Пустьимеются две транзакции Т1 и Т2, основнымидействиями, которых при параллельнойобработке являются следующие:

    Т1:lock A; lock B; unlock A; unlock B;

    T2: lock B; lock A; unlock B;unlock A;

    Здесь не имеетзначения, что конкретно делают сэлементами А и В эти транзакции. Пустьони начинают использоваться примернов одно и то же время. Транзакция Т1запрашивает блокировку А и её запросудовлетворяется.

    Точно так жеудовлетворяется запрос транзакции Т2на блокировку В затем Т1 запрашиваетблокировку В и вынуждает ждать, посколькуэтот элемент заблокирован транзакциейТ2. Аналогично Т2 запрашивает блокировкуА и должна ждать, пока Т1 разблокируетА. Таким образом ни одна транзакция неможет продолжаться.

    Каждая из нихожидает, пока другая разблокируеттребуемый для неё элемент. Поэтому Т1 иТ2 будут ждать бесконечно.

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

    Так как всетранзакции находятся в состоянииожидания, то одна из них не можетразблокировать элемент, необходимыйдля продолжения другой транзакции изS. Поэтому ожидание для них становитсябесконечным.

    Источник: https://studfile.net/preview/2016242/

    Транзакции и блокировки

    Элементы блокировки

    Аннотация: Приводится определение транзакции и ее свойств; представлены явные, неявные, автоматические и вложенные транзакции. Описываются средства обработки и управления транзакциями.

    Рассматривается механизм сохранения и отката транзакций. Вводится понятие параллельности в работе базы данных и методы управления параллельностью с использованием блокировок. Приводится описание уровней блокировок и уровней изоляции сервера.

    Выделяются основные и специальные типы блокировок.

    Концепция транзакций – неотъемлемая часть любой клиент-серверной базы данных.

    Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации), приводящая к одному из двух возможных результатов: либо последовательность выполняется, если все операторы правильные, либо вся транзакция откатывается, если хотя бы один оператор не может быть успешно выполнен. Обработка транзакций гарантирует целостность информации в базе данных. Таким образом, транзакция переводит базу данных из одного целостного состояния в другое.

    Поддержание механизма транзакций – показатель уровня развитости СУБД. Корректное поддержание транзакций одновременно является основой обеспечения целостности БД.

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

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

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

    При выполнении транзакции система управления базами данных должна придерживаться определенных правил обработки набора команд, входящих в транзакцию. В частности, разработано четыре правила, известные как требования ACID, они гарантируют правильность и надежность работы системы.

    Характеристики транзакций описываются в терминах ACID (Atomicity, Consistency, Isolation, Durability – неделимость, согласованность, изолированность, устойчивость ).

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

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

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

    Соблюдение этого требования позволит наиболее эффективным образом обеспечить одновременную работу с данными множества пользователей.

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

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

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

    Без использования блокировок несколько транзакций могли бы изменять одни и те же данные.

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

    • блокировка записи – транзакция блокирует строки в таблицах таким образом, что запрос другой транзакции к этим строкам будет отменен ;
    • блокировка чтения – транзакция блокирует строки так, что запрос со стороны другой транзакции на блокировку записи этих строк будет отвергнут, а на блокировку чтения – принят.

    В СУБД используют протокол доступа к данным, позволяющий избежать проблемы параллелизма. Его суть заключается в следующем:

    • транзакция, результатом действия которой на строку данных в таблице является ее извлечение, обязана наложить блокировку чтения на эту строку;
    • транзакция, предназначенная для модификации строки данных, накладывает на нее блокировку записи;
    • если запрашиваемая блокировка на строку отвергается из-за уже имеющейся блокировки, то транзакция переводится в режим ожидания до тех пор, пока блокировка не будет снята;
    • блокировка записи сохраняется вплоть до конца выполнения транзакции.

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

    В связи со свойством сохранения целостности БД транзакции являются подходящими единицами изолированности пользователей.

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

    Если в системе управления базами данных не реализованы механизмы блокирования, то при одновременном чтении и изменении одних и тех же данных несколькими пользователями могут возникнуть следующие проблемы одновременного доступа:

    • проблема последнего изменения возникает, когда несколько пользователей изменяют одну и ту же строку, основываясь на ее начальном значении; тогда часть данных будет потеряна, т.к. каждая последующая транзакция перезапишет изменения, сделанные предыдущей. Выход из этой ситуации заключается в последовательном внесении изменений;
    • проблема “грязного” чтения возможна в том случае, если пользователь выполняет сложные операции обработки данных, требующие множественного изменения данных перед тем, как они обретут логически верное состояние. Если во время изменения данных другой пользователь будет считывать их, то может оказаться, что он получит логически неверную информацию. Для исключения подобных проблем необходимо производить считывание данных после окончания всех изменений;
    • проблема неповторяемого чтения является следствием неоднократного считывания транзакцией одних и тех же данных. Во время выполнения первой транзакции другая может внести в данные изменения, поэтому при повторном чтении первая транзакция получит уже иной набор данных, что приводит к нарушению их целостности или логической несогласованности;
    • проблема чтения фантомов появляется после того, как одна транзакция выбирает данные из таблицы, а другая вставляет или удаляет строки до завершения первой. Выбранные из таблицы значения будут некорректны.

    Для решения перечисленных проблем в специально разработанном стандарте определены четыре уровня блокирования.

    Уровень изоляции транзакции определяет, могут ли другие (конкурирующие) транзакции вносить изменения в данные, измененные текущей транзакцией, а также может ли текущая транзакция видеть изменения, произведенные конкурирующими транзакциями, и наоборот. Каждый последующий уровень поддерживает требования предыдущего и налагает дополнительные ограничения:

    • уровень 0 – запрещение “загрязнения” данных. Этот уровень требует, чтобы изменять данные могла только одна транзакция ; если другой транзакции необходимо изменить те же данные, она должна ожидать завершения первой транзакции ;
    • уровень 1 – запрещение “грязного” чтения. Если транзакция начала изменение данных, то никакая другая транзакция не сможет прочитать их до завершения первой;
    • уровень 2 – запрещение неповторяемого чтения. Если транзакция считывает данные, то никакая другая транзакция не сможет их изменить. Таким образом, при повторном чтении они будут находиться в первоначальном состоянии;
    • уровень 3 – запрещение фантомов. Если транзакция обращается к данным, то никакая другая транзакция не сможет добавить новые или удалить имеющие строки, которые могут быть считаны при выполнении транзакции. Реализация этого уровня блокирования выполняется путем использования блокировок диапазона ключей. Подобная блокировка накладывается не на конкретные строки таблицы, а на строки, удовлетворяющие определенному логическому условию.

    Источник: https://intuit.ru/studies/courses/5/5/lecture/152

    jQuery BlockUI – блокировка страницы или отдельного элемента

    Элементы блокировки

    Возможно вас это заинтересует

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

    Необходимость таких манипуляций с страницей или ее элементами возникла когда AJAX начал набирать свою популярность.

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

    В таких случаях самым лучшим будет заблокировать для пользователя доступ к кнопке, форме или другому элементу, чтобы он не мог повторно запустить AJAX событие. И на мой взгляд плагин jQuery BlockUI подходит идеально, но конечно его можно применить и для других случаев, зависит от того что вам нужно.

    Использование

    Использование плагина очень простое, подключаем jQuery и сам jQuery BlockUI плаги, затем выполняем код:

    Этот код просто заблокирует всю страницу используя свои настройки по умолчанию.

    Добавим в блокировке сообщение:

     $.blockUI({ message: '

    Подождите, выполняется операция..

    Элементы блокировки

    '

    });

    Можно менять цвет текста и фона:

     $.blockUI({ css: { backgroundColor: '#f00', color: '#fff'} });

    У плагина большое количество полезных настроек, их рассмотрим подробно ниже, а пока разблокируем страницу:

    Блокировка всей страницы

    В первых примерах уже было показано как заблокировать всю страницу:

     $.blockUI(); // блокируем страницу

    Разблокировка:

     $.unblockUI(); // разблокируем страницу

    Блокировка отдельного элемента

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

     $('#element').block(); // заблокируем отдельный элемент

    Разблокировка:

     $('#element').unblock(); // раззаблокируем элемент заблокированный ранее

    Настройки

    Параметр По умолчанию Описание параметра
    message

    Please wait…

    Элементы блокировки

    Текст сообщения который отображается при блокировки, можно указывать теги.
    titlenullУстанавливает заголовок блокирующего окна. Эта настройка работает только если включена настройка theme
    draggabletrueПозволяем перетягивать курсором мышки блокирующее окно.

    Эта настройка работает только если включена настройка theme

    themefalseПодключает визуальную тему и функционал от jQuery UI. Для кого-то может быть и полезная функция, но мне не нравится она, чтобы корректно все отображалось нужно будет еще подключать UI скрипты и стили.

    css
    css: {
    padding: 0,
    margin: 0,
    width: '30%',
    top: '40%',
    left: '35%',
    textAlign: 'center',
    color: '#000',
    border: '3px solid #aaa',
    backgroundColor:'#fff',
    cursor: 'wait'
    }
    Визуальные настройки блокирующего окна, стандартные параметры вполне подходят.
    themedCSS
    themedCSS: {
    width: '30%',
    top: '40%',
    left: '35%'
    }
    Так же как и css, настраивает внешний вид блокирующего окна. Но эта настройка работает только если включена настройка theme
    overlayCSS
    overlayCSS: {
    backgroundColor: '#000',
    opacity: 0.6,
    cursor: 'wait'
    },
    Данная настройка регулирует фон блокирующего окна, цвет фона, прозрачность и курсор.
    cursorReset‘default’Не совсем понятная настройка, судя по экспериментам она регулирует тип курсора в момент снятия блокировки.
    growlCSS
    growlCSS: {
    width: '350px',
    top: '10px',
    left: '',
    right: '10px',
    border: 'none',
    padding: '5px',
    opacity: 0.6,
    cursor: null,
    color: '#fff',
    backgroundColor: '#000',
    '-webkit-border-radius': '10px',
    '-moz-border-radius': '10px'
    },
    Настраивает внешний вид быстрых сообщений. Подробнее об этом на демо странице, вызывается кодом: $.growlUI(‘Заголовок’, ‘Текст!’);
    iframeSrcjs codeСудя по описанию из документации, настройка что-то делает когда работает в старых IE браузерах.
    forceIframefalseСвязана с настройкой выше.
    baseZ1000Регулирует позицию блокирующего слоя по оси Z.
    centerX и centerYtrueЦентрирует блокирующее окно.
    allowBodyStretchtrueЕще одна настройка которая не показала особого эффекта, скорей всего предназначена для старых IE браузеров.
    bindEventstrueБлокирует нажатия кнопок мыши.
    constrainTabKeytrueБлокирует нажатие кнопки Tab
    fadeIn200Скорость анимации при появлении.
    fadeOut400Скорость анимации при скрытии.
    timeout0По истечении указанного времени автоматически снимает блокировку.
    showOverlaytrueОтключает наложение фона за блокирующем окном.
    focusInputtrueСудя по описанию в документации, должно устанавливать курсор и первое пустое текстовое поле на странице.
    blockMsgClass‘blockMsg’CSS класс блокирующего окна.
    ignoreIlockedfalseЕсли элемент или страница уже заблокированы то повторно не блокируем.
    quirksmodeOffsetHack4какая-то непонятная секретная настройка о которой даже в документации ничего не пишут ))

    CallBack функции

    Функция Описание
    onBlockСобытие срабатывает когда блокирующее окно полностью про рисуется на странице
    onUnblockСобытие срабатывает когда блокирующее окно полностью удаляется(onUnblock(element, options))

    Примеры

    На по следок хотелось бы поделиться своим опытом использования этого плагина в работе, может кому понадобится). В основном я использую его при ajax запросах.

     $(document).on('submit', '.form_submit', function(){ _this = $(this); _block = _this; // запускаем блокировку элемента // в моем случае блокируется вся форма чтобы нельзя было отправить ее повторно $(_block).block({ message: '', //просто анимированная иконка, без текста overlayCSS: { backgroundColor: '#fff', opacity: 0.8, cursor: 'wait' }, css: { border: 0, padding: 0, backgroundColor: 'transparent' } }); $.ajax({ url: _this.attr('action'), type: 'POST', data: _this.serialize(), dataType: 'JSON', success: function (data) { /*….*/ }, error: function (data) { /*….*/ }, complete: function(data) { $(_block).unblock(); // снимаем блокировку } }); return false; });

    Вот и все, использовать плагин jQuery BlockUI очень просто и удобно. Больше демо примеров есть на странице разработчика.

    На странице автора плагина скрипт почему-то не доступен, там что скачиваем с гитхаба.

    Возможно вас это заинтересует by HyperComments

    Источник: http://verstaemvse.ru/jquery-blockui-blokirovka-stranicy-ili-otdelnogo-elementa.html

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.