Домены .RU/.РФ

Автор Тема: Реализация serialazible в автоматическом режиме на Postgre.  (Прочитано 497 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Fales

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Fales
Какова гранулярность в этом режиме? Раньше была таблица. Сейчас, как я понял, на экзамене такой ответ не прокатывает. Может кто-нибудь дать развернутый ответ, что хотят услышать?

YanSergey

  • Новичок
  • *
  • Сообщений: 8
Недавно вышла 10 версия Постгреса. Может там гранулярность другая - потому на экзамене и не прокатывает?

Fales

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Fales
провел эксперимент. Провожу документ, в котрором делаются движения по рег накопления. На таблицу регистра устанавливается блокировка ROW EXCLUSIVE,  которая накладывается именно на таблицу.
ссылка на пруф: https://postgrespro.ru/docs/postgrespro/10/explicit-locking

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

headmade

  • Пользователь
  • **
  • Сообщений: 18
  • ФИО: *********
Когда-то тоже искал ответ на этот вопрос. Но ничего внятного не нашел.
На основную таблицу регистра идет блокировка RowExclusiveLock, а на таблицу остатков ExclusiveLock.

Я еще думал что может есть изменения в 9 версии, когда реализовали "честный" Serializable в PG.
см. https://postgrespro.ru/docs/postgrespro/10/transaction-iso#XACT-SERIALIZABLE
"До версии 9.1 в PostgreSQL при запросе режима Serializable поведение системы в точности соответствовало вышеописанному. Таким образом, чтобы сейчас получить старое поведение Serializable, нужно запрашивать режим Repeatable Read."

На обучении весной спрашивали у Богачева. Он сказал что поведение не изменилось. Может слукавил - ХЗ.

YanSergey

  • Новичок
  • *
  • Сообщений: 8
А в Serializable блокируется таблица целиком, потому что PostgreS по другому не умеет в этом режиме изоляции?
Ну то есть 1с здесь не при чем?

MirrorLink

  • Новичок
  • *
  • Сообщений: 5
А почему Вы так сформулировали вопрос?

То есть, как будто блокировка всей таблицы как то связана с реализацией serializable или repeatable read

Выскажу свое мнение:

Postgre и Oracle - версионники, в них мы сами блокируем при необходимости данные до конца транзакции в явном виде с помощью управляемых блокировок

А в автоматическом режиме управляемых блокировок нет

Разработчики платформы могли бы заморочится и блокировать для этих СУБД в автоматическом режиме отдельные записи средствами базы данных до конца транзакции

Но резонный вопрос - зачем? Чтобы сделать из версионника блокировочник?
То есть свести на нет все преимущества Постгри и Оракла?

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

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



« Последнее редактирование: Октябрь 01, 2018, 11:13:32 pm от MirrorLink »

headmade

  • Пользователь
  • **
  • Сообщений: 18
  • ФИО: *********
А в Serializable блокируется таблица целиком, потому что PostgreS по другому не умеет в этом режиме изоляции?
Ну то есть 1с здесь не при чем?
Serializable - это уровень изоляции транзакции т.е. насколько одна транзакция изолирована от другой. А блокироваться с таким уровнем изоляции может и вся таблица и пару строк.