|
|
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnКстати, чтобы Вы понимали ситуацию, "собственный менеджер транзакционных блокировок 1С:Предприятия" писал я. Ну в таком случае снимаю шляпу и отхожу в сторону. Согласен, дал маху насчет просто отключения режима, минимальные изменения в конфигурацию в любом случае придется вносить и ставить блокировку как минимум на контроль остатков при списании. В таком случае уточню свой тезис: 1. Снять конфигурацию с поддержки и переключить режим на управляемый + по аналогии с БП2 для России смотрите места где устанавливается блокировка и делаете по аналогии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 16:41 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnlaskin82Управляемый режим - это дополнительный режим работы, позволяющий использовать собственный менеджер транзакционных блокировок 1С:Предприятия, независимый от используемой СУБД. В результате любой запрос к данным прежде всего обрабатывается собственным менеджером транзакционных блокировок 1С:Предприятия. Если на уровне 1С конфликт управляемых блокировок не обнаруживается, то запрос передается далее, на исполнение СУБД. СУБД также использует собственный механизм блокировок для определения конфликтующих транзакций, но уже с более низким уровнем изоляции транзакций, чем в режиме автоматических блокировок. То что Вы написали или процитировали не что чтобы неверно, но бессмысленно с практической точки зрения. Те транзакции, которые не являются конфликтующими с точки зрения PostgreSQL'ного READ COMMITED, легко могут нарушать необходимый для 1C SERIALIZABLE. Кстати, чтобы Вы понимали ситуацию, "собственный менеджер транзакционных блокировок 1С:Предприятия" писал я. Раз пошла такая пьянка. Может объясните чем корректный откат и перепроведение плохой метод? Да, есть проблема с внешним последействием (если вы скажем e-mail шлете), но его вообще лучше в асинхронный поток выносить, так как это точка отказа которая может повесить всю транзакцию со всеми вытекающими. Больше я придумать не могу. Собсно потому как часто использовали такой метод и практически всегда все было ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 18:41 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieчем корректный откат и перепроведение плохой метод? Он не то чтобы плохой метод, он скорее вообще не метод, который может предложить Платформа. Эти операции не будут прозрачны для писателя конфигурации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 19:11 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_Junkieчем корректный откат и перепроведение плохой метод? Он не то чтобы плохой метод, он скорее вообще не метод, который может предложить п латформа. Эти операции не будут прозрачны для писателя конфигурации. потому, что писание конфигурации -- само-по-себе -- порочное дело и да, жаль, что вы на инструментарий конфигураста убили столько сил и времени, что теперь кроме как с большой п эту гомосятину не упоминаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 22:19 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_Junkieчем корректный откат и перепроведение плохой метод? Он не то чтобы плохой метод, он скорее вообще не метод, который может предложить Платформа. Эти операции не будут прозрачны для писателя конфигурации. Почему не прозрачны. Все что происходит в транзакции остается в транзакции. В конечном итоге если вы отменяете проведение, то все изменения внутри проведения "откатываются", и разработчик же это понимает. Что сложного в понимании того что платформа может при необходимости сама откатить транзакцию и запустить заново (то есть грубо говоря самопроизвольно выполнить cancel в определенных местах) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 09:47 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, что должно вызвать решение об отмене транзакции? Факт изменения некоторой таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 12:23 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_Junkie, что должно вызвать решение об отмене транзакции? Факт изменения некоторой таблицы? Например, если СУБД кинула update conflict (то есть с начала транзакции, кто-то уже поменял записываемое значение), или unique violation (когда в одну таблицу 2 раза ключ добавляют)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 12:31 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_Junkie, что должно вызвать решение об отмене транзакции? Факт изменения некоторой таблицы? стандартная техника клиентов ко всем, что угодно -- проверять актуальность на момент выполнения следующего псевдокод: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:06 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_Junkie, что должно вызвать решение об отмене транзакции? Факт изменения некоторой таблицы? В теории если использовать Serializable уровень изоляции начиная с PostgreSQL 9.3 - то там вообще никаких аномалий не должно возникать. Или все нормально прошло или ошибка сериализации и "извините ваши данные были изменены другим пользователем попробуйте провести операцию еще раз". В низконкурентной среде должно работать. А в высококонурентной как ни делай - всегда будет плохо с такими задачами. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:24 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieilejnNitro_Junkie, что должно вызвать решение об отмене транзакции? Факт изменения некоторой таблицы? Например, если СУБД кинула update conflict (то есть с начала транзакции, кто-то уже поменял записываемое значение), или unique violation (когда в одну таблицу 2 раза ключ добавляют)... Если бы СУБД, работающая в режиме изоляции READ COMMITED, могла детектировать все нарушения уровня SERIALIZABLE, то Вашу идею можно было бы реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 17:31 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukесли использовать Serializable уровень изоляции начиная с PostgreSQL 9.3 - то там вообще никаких аномалий не должно возникать. Очень может быть, что это хороший вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 17:35 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_Junkieпропущено... Например, если СУБД кинула update conflict (то есть с начала транзакции, кто-то уже поменял записываемое значение), или unique violation (когда в одну таблицу 2 раза ключ добавляют)... Если бы СУБД, работающая в режиме изоляции READ COMMITED, могла детектировать все нарушения уровня SERIALIZABLE, то Вашу идею можно было бы реализовать. Естественно речь идет о работе СУБД в режиме изоляции уровня SERIALIZABLE, в read commited update conflict'ов ЕМНИП вообще не бывает. Для меня просто загадка нахрена 1С мало того что решил переписать стандартные механизмы СУБД (а обеспечение целостности одна из самых важных их функций), так еще это решили сделать в ручном режиме и переложить всю ответственность на разработчика. Причем с первым пунктом понятно, они все переписывают, у них это видимо в крови, а вот со вторым... Причем что самое забавное большинство 1С разработчиков этого даже не понимают (что на них возложили абсолютно не нужную ответственность). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 09:22 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Имхо для автора достаточно донести вывод: Его конфигурация не совместима с PostgreSQL. Из выбора - либо сильно менять конфигурацию либо переходить на 3 версию. У обоих решений куча минусов. Минусы первого - затраты на модификацию. (По теме понятно, что автору сделать это самому сложно) - затраты на ручное изменение (теряем автоматическую поддержку) Минусы второго - Затраты на внедрение. 3 Версия и УФ вызывает искреннее восхищение бухгалтерии и ЛПР. И поток этого восхищения свалится на вас. Третий вариант - перейти на файловую БД Четвертый вариант - MS SQL На месте автора я бы замерил скорость файлового варианта на быстром диске. Для 2 пользователей - вполне может помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:02 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
[quot Nitro_J Естественно речь идет о работе СУБД в режиме изоляции уровня SERIALIZABLE[/quot] В PostgreSQL до недавнего времени не было работающего SERIALIZABLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:55 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejn[quot Nitro_J Естественно речь идет о работе СУБД в режиме изоляции уровня SERIALIZABLE В PostgreSQL до недавнего времени не было работающего SERIALIZABLE.[/quot] Ну Repeatable Read был. Его в 97% случаев (например те же остатки) более чем достаточно. А SERIALIZABLE в крайнем случае виртуальными агрегациями можно было сэмулировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:59 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieНу Repeatable Read был. Не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:12 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_JunkieНу Repeatable Read был. Не было. С чего это? В смысле, что там было не так, по-Вашему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:19 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnNitro_JunkieНу Repeatable Read был. Не было. Да был он, был. Просто была путаница: они называли “serializable” то, что было “repeatable read” на самом деле. На официальном сайте в самой старой из версий он присутствует, так что код, наверно, еще старше. С версии 8.0 они уже оговариваются насчет “True Serializability”. Ну и начиная с 9.1 , когда появился настоящий Serializable, Repeatable Read обзывается правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 16:25 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
PGSQLAnonymousС чего это? В смысле, что там было не так, по-Вашему? Это все происходило во времена 8.1, и документация на эту версию говорит нам == - FOR UPDATE and FOR SHARE cannot be used in contexts where returned rows can't be clearly identified with individual table rows; for example they can't be used with aggregation. == Там есть еще ряд ограничений, делающих сколько-нибудь сложные запросы невозможными. Кроме того, наблюдалось серьезное ухудшение производительности (вплоть до двукратного). Дело было не вчера, и могли быть какие-то другие проблемы, исчезнувшие из памяти, но и перечисленных в общем-то достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:23 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Я попробую вспомнить, чем был нехорош SET TRANSACTION SERIALIZABLE. Но что-то с ним было не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:32 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnPGSQLAnonymousС чего это? В смысле, что там было не так, по-Вашему? Это все происходило во времена 8.1, и документация на эту версию говорит нам == - FOR UPDATE and FOR SHARE cannot be used in contexts where returned rows can't be clearly identified with individual table rows; for example they can't be used with aggregation. == Там есть еще ряд ограничений, делающих сколько-нибудь сложные запросы невозможными. Кроме того, наблюдалось серьезное ухудшение производительности (вплоть до двукратного). Ну и что?! Repeatable Read тут причём, вообще? И, кстати, в текущей версии всё так же ( http://www.postgresql.org/docs/devel/static/sql-select.html ): == The locking clauses cannot be used in contexts where returned rows cannot be clearly identified with individual table rows; for example they cannot be used with aggregation. == В чём тут проблема? И о каких ограничениях Вы говорите? Ухудшение производительности в каком случае? ilejnДело было не вчера, и могли быть какие-то другие проблемы, исчезнувшие из памяти, но и перечисленных в общем-то достаточно. Извините, но пока Вы не перечислили ни одной. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 20:18 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
ilejnЯ попробую вспомнить, чем был нехорош SET TRANSACTION SERIALIZABLE. Но что-то с ним было не так. Я могу сказать чем он нехорош, особенно в случае платформ. Любая программа де-факто работает в двух парадигмах - процедурной и SQL. Так вот когда вы начинаете транзакцию, вам нужно обеспечить ее откат в обоих парадигмах. И если в SQL это достигается автоматически, то в процедурной все нужно делать руками. Например если вы используете pooling временных таблиц, то при откате транзакции у вас и все действия с временными таблицами откатятся, а значит их надо будет вручную отслеживать и очищать из пула. Тоже самое касается любых кэшей, "локальных" переменных и т.п. Плюс ко всему нужно абсолютно корректно обрабатывать исключения в любом месте где внутри может быть DML (то есть по сути везде). И если ошибки можно классифицировать как нестандартную ситуацию и грубо говоря "забить" на некоторые побочные эффекты, то с update conflict'ами такое не прокатит. В общем, ИМХО, на C++ с не самой удобной обработкой исключений, без сборщика мусора и т.п. просто "кишка оказалась тонка". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 09:45 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieilejnЯ попробую вспомнить, чем был нехорош SET TRANSACTION SERIALIZABLE. Но что-то с ним было не так. Я могу сказать чем он нехорош, особенно в случае платформ. Любая программа де-факто работает в двух парадигмах - процедурной и SQL. Так вот когда вы начинаете транзакцию, вам нужно обеспечить ее откат в обоих парадигмах. И если в SQL это достигается автоматически, то в процедурной все нужно делать руками. Например если вы используете pooling временных таблиц, то при откате транзакции у вас и все действия с временными таблицами откатятся, а значит их надо будет вручную отслеживать и очищать из пула. Тоже самое касается любых кэшей, "локальных" переменных и т.п. Плюс ко всему нужно абсолютно корректно обрабатывать исключения в любом месте где внутри может быть DML (то есть по сути везде). И если ошибки можно классифицировать как нестандартную ситуацию и грубо говоря "забить" на некоторые побочные эффекты, то с update conflict'ами такое не прокатит. А любую программу, которая этого не делает, нужно, грубо говоря, выбросить. ;) Хотя бы потому, что нормальной обработки DEADLOCK-ов в ней почти наверняка тоже нет. Nitro_JunkieВ общем, ИМХО, на C++ с не самой удобной обработкой исключений, без сборщика мусора и т.п. просто "кишка оказалась тонка". Так они же удобной обработкой исключений, наоборот, хвалятся (как я слышал), RAII там какое-то есть. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 11:13 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
PGSQLAnonymousА любую программу, которая этого не делает, нужно, грубо говоря, выбросить. ;) Ну 1Сом как видите пользуются... Хотя бы потому, что нормальной обработки DEADLOCK-ов в ней почти наверняка тоже нет. Так DEADLOCK то как раз теоретически можно считать "ошибкой" - "недетерминированный" (цикличный) порядок записи \ чтения. С UPDATE CONFLICT так не получится. PGSQLAnonymousТак они же удобной обработкой исключений, наоборот, хвалятся (как я слышал), RAII там какое-то есть. ;) В последних версиях. Но в любом случае это субъективная инфа, от тех кто, скажем, на C++ и Java писал. Так что просто догадка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 14:04 |
|
||
|
PostgreSQL 9.1 + 1С 8.2 = deadlock detected
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieНу 1Сом как видите пользуются... А причём тут 1C? Разве там нет обработки ошибок? Nitro_JunkieТак DEADLOCK то как раз теоретически можно считать "ошибкой" - "недетерминированный" (цикличный) порядок записи \ чтения. С UPDATE CONFLICT так не получится. Да какая разница, что там "теоретически". ;) Я говорю о том, что DEADLOCK должен обрабатываться в любой программе, которая что-то пишет в базу данных. Отсутствие такой обработки является ошибкой в этой программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 17:40 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=1998156]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 471ms |

| 0 / 0 |
