|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
Устроил эксперимент по стресс-тестированию функции, которая должна выполняться в режиме SERIALIZABLE Проверку проводил так: 4 разных клиента почти одновременно запускали функцию с интервалом от 90 до 200 миллисекунд с разными параметрами (в цикле - по 100 запусков каждый клиент), код запуска со стороны клиента примерно такой: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; select test.f_change_data(аргумент1, аргумент2, ..., аргументN); Несмотря на заданный уровень изоляции, иногда функция выдавала EXCEPTION типа serialization_failure. Значение переменной current_setting('transaction_isolation') из функции видно как 'serializable'. В голову лезут мысли написать свою "велосипедную" логику выстраивания очереди на выполнение функции, например, создать таблицу очередей на выполнение. Как думаете, есть смысл писать свою сериализацию, или она ничем не будет лучше уже имеющейся? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 15:13 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
Я вам не Димон.Несмотря на заданный уровень изоляции, иногда функция выдавала EXCEPTION типа serialization_failure. Значение переменной current_setting('transaction_isolation') из функции видно как 'serializable'. Не "не смотря", а "потому что". Т.е. так и должно быть! Прочитайте http://www.postgresql.org/docs/current/static/transaction-iso.html . Я вам не Димон.В голову лезут мысли написать свою "велосипедную" логику выстраивания очереди на выполнение функции, например, создать таблицу очередей на выполнение. Как думаете, есть смысл писать свою сериализацию, или она ничем не будет лучше уже имеющейся? Так что вам нужно, очередь (когда какие-то "задания" должны быть обработаны, каждое один раз) или строго последовательное выполнение (когда только одна из конкурентных транзакций может выполнять эту функцию, а остальные ждать или получать ошибку)? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 15:25 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
вот это нужно: PgSQLanonymous3строго последовательное выполнение (когда только одна из конкурентных транзакций может выполнять эту функцию, а остальные ждать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 15:55 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
Я вам не Димон.вот это нужно: PgSQLanonymous3строго последовательное выполнение (когда только одна из конкурентных транзакций может выполнять эту функцию, а остальные ждать advisory locks внутри хранимки вам в помощь https://www.postgresql.org/docs/10/static/explicit-locking.html#ADVISORY-LOCKS -- Maxim Boguk dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 16:36 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
Я вам не Димон., смешалисьфкучуконилюди иядра ты сячиа рудий субд реализует очередность подхода к снаряду == данным а очередность доступа и исполнения хфункцей -- дело кодера. на строго монопольную ф-ю вна входе вешаем транзакционный адвайзори на ее процид например. если адвайзори забиты -- заводим табличку локов, доступом к которым будет рулить бд. в ридкоммитеде. а скрипач не нужен. сериалазебл бишь он представляет академический интерес --"как работать с базой, если никто не знает что делает другой." и именно этот случай нихера не покрывает. посколь другой дропнет вам ваши серийные данные кхерам, снесёт инстанс, на. а то спалит халабуду , и пойдёт пиво пит. всё в рид--коммитед пишецца и фурыкает. и очередицца. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 20:42 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
qwwqЯ вам не Димон., а очередность доступа и исполнения хфункцей -- дело кодера. Я бы не сказал. IMHO, для того, чтобы управлять очередностью, должна быть веская причина (которую автор темы не указал, к сожалению). qwwqна строго монопольную ф-ю вна входе вешаем транзакционный адвайзори на ее процид например. если адвайзори забиты -- заводим табличку локов, доступом к которым будет рулить бд. Можно ещё создать отдельную таблицу (под эту функцию), а потом "BEGIN; LOCK TABLE my_function_lock; ... ;". qwwqв ридкоммитеде. Не обязательно. Но при такой постановке может и помочь. qwwqа скрипач не нужен. сериалазебл бишь он представляет академический интерес --"как работать с базой, если никто не знает что делает другой." Вполне практический интерес, и нормальная ситуация. Но на самом деле "не быть вынужденным думать, что делает каждый другой". qwwqи именно этот случай нихера не покрывает. посколь другой дропнет вам ваши серийные данные кхерам, снесёт инстанс, на. а то спалит халабуду , и пойдёт пиво пит. Что-что? qwwqвсё в рид--коммитед пишецца и фурыкает. и очередицца. Да-да, слышали уже... — Я печатаю 1200 знаков в минуту! — Какая скорость!!! (Тихо, в сторону): — Но такая ерунда получается... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2018, 22:44 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
PgSQLanonymous3Можно ещё создать отдельную таблицу (под эту функцию), а потом "BEGIN; LOCK TABLE my_function_lock; ... ;". тоже вариант. так дешевле : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 18:10 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
qwwqтак дешевле : Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Только вот работает только для superuser-a. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 23:12 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
а главное зачем извращаться если есть штатные advisory locks? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 09:57 |
|
стоит ли выдумывать свою сериализацию
|
|||
---|---|---|---|
#18+
Melkijа главное зачем извращаться если есть штатные advisory locks? товарищу ононимусу похер, он за идею фикс сражаица. за насериалазебл. кучкой. а вам-то грех не въезжать, что на хера расходовать общий ресурс адвайзори весьма ограниченный //кстати не столь родной как роу-лок, и не настолько давно штатный когда у ф--ии есть свой природный ресурс -- её роу в плпроке. ну и секьюрити дефайнер никто не отменял. это если про шашечки. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 10:04 |
|
|
start [/forum/topic.php?fid=53&msg=39653057&tid=1995751]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
193ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 577ms |
0 / 0 |