|
|
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Добрый день. По этой ссылке описывается, каким образом 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 15:55:48 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, Вариант с последовательностями тут тоже подойдет, с оговоркой: т.к. нормальным поведением является откат транзакций из-за нарушения изоляции, то последовательность будет с “дырками”. Можно смотреть в сторону системных колонок , xmin в частности. Но завязываться на них я бы не стал, все-таки это особенности физической реализации СУБД, могут измениться в будущем. Ну и ситуацию с wraparound'ом идентификаторов транзакций никто не отменял. Также можно добавить поле `timestamptz NOT NULL DEFAULT clock_timestamp()` и сортировать по дате добавления записи в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 16:19:03 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
vyegorovВариант с последовательностями тут тоже подойдет, с оговоркой: т.к. нормальным поведением является откат транзакций из-за нарушения изоляции, то последовательность будет с “дырками”. Можно смотреть в сторону системных колонок , xmin в частности. Но завязываться на них я бы не стал, все-таки это особенности физической реализации СУБД, могут измениться в будущем. Ну и ситуацию с wraparound'ом идентификаторов транзакций никто не отменял. Также можно добавить поле `timestamptz NOT NULL DEFAULT clock_timestamp()` и сортировать по дате добавления записи в таблицу. Я не понял, как это связано с порядком, в котором эти транзакции сериализованы? Меня же интересует именно он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 17:14:08 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 17:22:27 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
V&N Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. А это причём тут? Это явные блокировки, а меня интересует Serilalizable SSI без всяких hints, и мне нужно не заставить транзакции выполняться в каком-то порядке, а узнать , каким был порядок сериализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 17:26:40 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous... узнать , каким был порядок сериализации. Зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 17:30:19 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
V&NЗачем? Пока в основном теоретический интерес, мне просто непонятно, как это в принципе сделать. На практике может быть нужно для аудита, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 17:36:52 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
и чем обычный SEQUENCE не подошел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 17:38:15 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
V&Nи чем обычный SEQUENCE не подошел? Очевидно, тем, что к порядку сериализации он отношения не имеет (или я чего-то не знаю). ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:01:45 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymousV&Nи чем обычный SEQUENCE не подошел? Очевидно, тем, что к порядку сериализации он отношения не имеет (или я чего-то не знаю). ;) Почему же не имеет? Значения будут отдаваться в порядке транзакций. Нумерация может прыгать, но порядок будет соответствовать. Вы бы попробовали что-нить протестировать, все сразу встанет на свои места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:11:07 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous , и чё, в блокировочнике SEQUENCE имеет какое-то отношение к уровню изоляции транзакции? мне вот сразу интересно стало, в каких случаях вы собираетесь использовать SERIALIZABLE и чем не понравился repeatable read? № транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:34:29 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
vyegorovПочему же не имеет? Значения будут отдаваться в порядке транзакций. Нумерация может прыгать, но порядок будет соответствовать. Порядку их сериализации она может не соответствовать . vyegorovВы бы попробовали что-нить протестировать, все сразу встанет на свои места. А Вы бы попробовали по ссылке (на wiki) про это почитать, всё сразу встанет на свои места. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:40:00 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, сделайте единое узкое горло на какой нибудь блокировке. и под этой блокировкой уже крутите +1. это может быть блокировка таблицы, строки, или адвизори. или просто одна сессия -- однопоточная обработка. мне кажется SERIALIZABLE вам и не нужен. какую задачу вы решаете изначально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:45:10 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
V&N PgSQLanonymous , и чё, в блокировочнике SEQUENCE имеет какое-то отношение к уровню изоляции транзакции? Нет, не имеет. SEQUNCE тут при том, что, при наличии конфликта, в блокировочнике последовательность COMMIT-ов совпадает с последовательностью сериализации. V&Nмне вот сразу интересно стало, в каких случаях вы собираетесь использовать SERIALIZABLE и чем не понравился repeatable read? Во всех. Не понравился проблемами с консистентостью. V&N № транзакции И причём тут это? XID показывает, какая транзакция раньше началась физически , и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:47:02 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, > мне нужно не заставить транзакции выполняться в каком-то порядке, а узнать, каким был порядок сериализации. вы не поверите, но "сериализация" внутри работает на блокировках. явного механизма "сортировки" "транзакций" нету. > Вопрос такой: А как этот порядок узнать? где узнать то? в какой момент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:49:20 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinсделайте единое узкое горло на какой нибудь блокировке. и под этой блокировкой уже крутите +1. это может быть блокировка таблицы, строки, или адвизори. или просто одна сессия -- однопоточная обработка. Спасибо, но мне это не нужно, мне нужен ответ на мой вопрос. ;) Misha TyurinМне кажется SERIALIZABLE вам и не нужен. какую задачу вы решаете изначально? А мне вот кажется, тому, кому SERIALIZABLE не нужен, и с базами данных не стоило связываться, и что из того? ;) Моя задача сформулирована в первом сообщении этой темы. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:51:45 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Может быть полезно такое правило: если мне чего-то не хватает, значит я не так взялся реализовывать свой велосипед. тогда надо описать велосипел сначала, скорее всего его уже 100500 раз делали. а вот потом уже, если вдруг, будем что-то новенькое городить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:53:41 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, общий ответ на ваш топик -- никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:56:06 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Misha TyurinPgSQLanonymous, вы не поверите, но "сериализация" внутри работает на блокировках. явного механизма "сортировки" "транзакций" нету. Что Вы имеете в виду? Какие блокировки? Конечно, явного механизма "сортировки" транзакций нет, но, т.к. они сериализованы, их можно расположить в какой-то последовательности, вопрос в том, как её выяснить (там, где это имеет значение, если транзакции не могли пересечься в принципе, их взаимная последовательность, конечно, значения не имеет). Misha Tyurinгде узнать то? в какой момент? Получить из базы каким-то образом. После COMMIT-а всех интересующих транзакций, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 18:58:10 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, > Что Вы имеете в виду? Какие блокировки? предикатные в том числе http://www.postgresql.org/docs/9.3/static/transaction-iso.html To guarantee true serializability PostgreSQL uses predicate locking ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 19:00:36 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, вы решает что-то скорее всего не так. опишите что и зачем вы хотите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 19:03:19 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 19:04:25 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous, угу, давайте удивите мир. ветка хакерс открытая, велкам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 19:05:54 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinпредикатные в том числе Да это понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 19:06:41 |
|
||
|
Как узнать порядок, в которым следовали SERIALIZABLE транзакции?
|
|||
|---|---|---|---|
|
#18+
Misha TyurinPgSQLanonymous, общий ответ на ваш топик -- никак Вы уверены? Т.е. в блокировочнике тривиально, а здесь - никак? Misha Tyurinугу, давайте удивите мир. ветка хакерс открытая, велкам Мне лично hot standby пока настолько не нужен. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2014, 19:10:33 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38766458&tid=1998458]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 476ms |

| 0 / 0 |
