powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
25 сообщений из 51, страница 1 из 3
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766279
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

По этой ссылке описывается, каким образом PostgreSQL сериализует транзакции и от чего зависит результирующий порядок их выполнения:
https://wiki.postgresql.org/wiki/Serializable#Apparent_Serial_Order_of_Execution

Вопрос такой: А как этот порядок узнать? Например, для блокировочника я могу делать INSERT в таблицу c SEQUENCE в конце каждой транзакции и получить таблицу с этим порядком, что-то вроде:

Sequence_Num Описание транзакции1 внесение N руб на счёт A по документу B.2 снятие M руб со счёта A по документу C.



А как это сделать в PostgreSQL?
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766323
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

Вариант с последовательностями тут тоже подойдет, с оговоркой: т.к. нормальным поведением является откат транзакций из-за нарушения изоляции, то последовательность будет с “дырками”.

Можно смотреть в сторону системных колонок , xmin в частности. Но завязываться на них я бы не стал, все-таки это особенности физической реализации СУБД, могут измениться в будущем. Ну и ситуацию с wraparound'ом идентификаторов транзакций никто не отменял.

Также можно добавить поле `timestamptz NOT NULL DEFAULT clock_timestamp()` и сортировать по дате добавления записи в таблицу.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766458
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovВариант с последовательностями тут тоже подойдет, с оговоркой: т.к. нормальным поведением является откат транзакций из-за нарушения изоляции, то последовательность будет с “дырками”.

Можно смотреть в сторону системных колонок , xmin в частности. Но завязываться на них я бы не стал, все-таки это особенности физической реализации СУБД, могут измениться в будущем. Ну и ситуацию с wraparound'ом идентификаторов транзакций никто не отменял.

Также можно добавить поле `timestamptz NOT NULL DEFAULT clock_timestamp()` и сортировать по дате добавления записи в таблицу.

Я не понял, как это связано с порядком, в котором эти транзакции сериализованы? Меня же интересует именно он.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766479
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
  if not (select current_setting('transaction_isolation') in ('serializable', 'repeatable read'))
  then
    raise exception 'ты кто такой, давай до свидания ....';
  end if;
  begin
    select * from "счёт" where id = "id счёт a" for update no wait;
    --....
    insert into "какая-то таблица" (nextval('sq_транзакции') .....);
  exception when lock_not_available
    raise 'со счётом выполняется другая операция, приходите завтра ...';
  end;
end;
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766487
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V&N
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
  if not (select current_setting('transaction_isolation') in ('serializable', 'repeatable read'))
  then
    raise exception 'ты кто такой, давай до свидания ....';
  end if;
  begin
    select * from "счёт" where id = "id счёт a" for update no wait;
    --....
    insert into "какая-то таблица" (nextval('sq_транзакции') .....);
  exception when lock_not_available
    raise 'со счётом выполняется другая операция, приходите завтра ...';
  end;
end;


А это причём тут? Это явные блокировки, а меня интересует Serilalizable SSI без всяких hints, и мне нужно не заставить транзакции выполняться в каком-то порядке, а узнать , каким был порядок сериализации.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766490
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
PgSQLanonymous... узнать , каким был порядок сериализации.
Зачем?
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766499
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V&NЗачем?

Пока в основном теоретический интерес, мне просто непонятно, как это в принципе сделать. На практике может быть нужно для аудита, например.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766500
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
и чем обычный SEQUENCE не подошел?
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766526
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V&Nи чем обычный SEQUENCE не подошел?
Очевидно, тем, что к порядку сериализации он отношения не имеет (или я чего-то не знаю). ;)
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766535
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymousV&Nи чем обычный SEQUENCE не подошел?
Очевидно, тем, что к порядку сериализации он отношения не имеет (или я чего-то не знаю). ;)
Почему же не имеет? Значения будут отдаваться в порядке транзакций. Нумерация может прыгать, но порядок будет соответствовать.

Вы бы попробовали что-нить протестировать, все сразу встанет на свои места.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766552
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
PgSQLanonymous , и чё, в блокировочнике SEQUENCE имеет какое-то отношение к уровню изоляции транзакции?

мне вот сразу интересно стало, в каких случаях вы собираетесь использовать SERIALIZABLE
и чем не понравился repeatable read?

№ транзакции
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766557
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovПочему же не имеет? Значения будут отдаваться в порядке транзакций. Нумерация может прыгать, но порядок будет соответствовать.

Порядку их сериализации она может не соответствовать .

vyegorovВы бы попробовали что-нить протестировать, все сразу встанет на свои места.


А Вы бы попробовали по ссылке (на wiki) про это почитать, всё сразу встанет на свои места. ;)
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766565
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

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

мне кажется SERIALIZABLE вам и не нужен. какую задачу вы решаете изначально?
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766570
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V&N PgSQLanonymous , и чё, в блокировочнике SEQUENCE имеет какое-то отношение к уровню изоляции транзакции?

Нет, не имеет. SEQUNCE тут при том, что, при наличии конфликта, в блокировочнике последовательность COMMIT-ов совпадает с последовательностью сериализации.

V&Nмне вот сразу интересно стало, в каких случаях вы собираетесь использовать SERIALIZABLE
и чем не понравился repeatable read?

Во всех. Не понравился проблемами с консистентостью.

V&N № транзакции

И причём тут это? XID показывает, какая транзакция раньше началась физически , и всё.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766573
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

> мне нужно не заставить транзакции выполняться в каком-то порядке, а узнать, каким был порядок сериализации.

вы не поверите, но "сериализация" внутри работает на блокировках. явного механизма "сортировки" "транзакций" нету.

> Вопрос такой: А как этот порядок узнать?

где узнать то? в какой момент?
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766575
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurinсделайте единое узкое горло на какой нибудь блокировке. и под этой блокировкой уже крутите +1. это может быть блокировка таблицы, строки, или адвизори. или просто одна сессия -- однопоточная обработка.

Спасибо, но мне это не нужно, мне нужен ответ на мой вопрос. ;)

Misha TyurinМне кажется SERIALIZABLE вам и не нужен. какую задачу вы решаете изначально?


А мне вот кажется, тому, кому SERIALIZABLE не нужен, и с базами данных не стоило связываться, и что из того? ;)

Моя задача сформулирована в первом сообщении этой темы. ;)
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766578
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть полезно такое правило: если мне чего-то не хватает, значит я не так взялся реализовывать свой велосипед. тогда надо описать велосипел сначала, скорее всего его уже 100500 раз делали. а вот потом уже, если вдруг, будем что-то новенькое городить
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766581
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

общий ответ на ваш топик -- никак
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766584
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha TyurinPgSQLanonymous,
вы не поверите, но "сериализация" внутри работает на блокировках. явного механизма "сортировки" "транзакций" нету.


Что Вы имеете в виду? Какие блокировки?

Конечно, явного механизма "сортировки" транзакций нет, но, т.к. они сериализованы, их можно расположить в какой-то последовательности, вопрос в том, как её выяснить (там, где это имеет значение, если транзакции не могли пересечься в принципе, их взаимная последовательность, конечно, значения не имеет).

Misha Tyurinгде узнать то? в какой момент?

Получить из базы каким-то образом. После COMMIT-а всех интересующих транзакций, например.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766586
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

> Что Вы имеете в виду? Какие блокировки?

предикатные в том числе
http://www.postgresql.org/docs/9.3/static/transaction-iso.html To guarantee true serializability PostgreSQL uses predicate locking
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766589
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

вы решает что-то скорее всего не так. опишите что и зачем вы хотите
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766590
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha TyurinМожет быть полезно такое правило: если мне чего-то не хватает, значит я не так взялся реализовывать свой велосипед. тогда надо описать велосипел сначала, скорее всего его уже 100500 раз делали. а вот потом уже, если вдруг, будем что-то новенькое городить

А разработчики PostgreSQL тоже что-то не так делают? ;)
Например, вот это связано с обсуждаемым вопросом:

http://www.postgresql.org/docs/9.4/static/hot-standby.html

The Serializable transaction isolation level is not yet available in hot standby. (See Section 13.2.3 and Section 13.4.1 for details.) An attempt to set a transaction to the serializable isolation level in hot standby mode will generate an error.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766592
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLanonymous,

угу, давайте удивите мир. ветка хакерс открытая, велкам
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766594
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurinпредикатные в том числе

Да это понятно.
...
Рейтинг: 0 / 0
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
    #38766596
PgSQLanonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha TyurinPgSQLanonymous,

общий ответ на ваш топик -- никак
Вы уверены? Т.е. в блокировочнике тривиально, а здесь - никак?

Misha Tyurinугу, давайте удивите мир. ветка хакерс открытая, велкам

Мне лично hot standby пока настолько не нужен. ;)
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]