|
|
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
Два независимых параллельных процесса вставляют данные в партицированные таблицы, которые создаются раз в сутки триггером на вставку. Триггерная функция одна общая. В триггере создается таблица пронаследованная от базовой, для этой таблицы создаются индексы и внешние ключи, раздаются права. При этом возникает ошибка: Код: sql 1. 2. 3. 4. Прочитал тему . Что-нибудь изменилось? Есть ли еще какие-нибудь советы. Кстати на хабре предлагается способ создания партиций через триггер. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 18:19 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trot, текст триггера приведите. я создаю и обвязываю таблицу триггерно, но в автономии, одним полистейтментом. все остальные [автономии] встают в очередь, и обрабатывают ошибку "объект уже есть" или подобные. (при попытке выполнить тот же полистейтмент) проблем нет. единственный раз налетел на проблему, унаследовавшись от наполненного предка. пока он вакуумился-- висели все в очереди. (без дедлока). => не пустые предки -- зло для триггерного ддл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 18:39 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
qwwq, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 19:01 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trot, 2 замечания 1. тело без шапки -- не полно. (но я примерно это видал по ссылке на хабре) 2. я долго думал. хочу ли я например, чтобы в случае отката вставки записи, у меня откатывалось и создание партиции. и понял-- что не хочу. с тех пор на поделия типа хабровского смотрю как на оно. (партман с ним). по проблеме: само создание по вашей технологии, будь вызвано из простых транзакций, вызовет только очереди, но не дедлоки. [навскидку] ищите, где вы вперекрёст посягаете на лок ранее полоченного ресурса-- и вам воздастся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 19:17 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
qwwq, шапка Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 19:25 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trot, Код: sql 1. есть подозрение на fk. и можете ли вы с двух рук одновременно создавать 2 разные партийции ? ps ещё раз настоятельно рекомендую всё ddl вынести в автономии. это конечно налагает [и связывает], но идеологически единственно верно. если уж так хочется именно триггерно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 10:15 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
qwwq, Действительно два разных процесса пытаются одновременно (так совпало) создать одну и туже партицию. Склоняюсь к идее создавать партиции по крону заранее (например, за час), до того как туда начнут записываться данные. Настораживает ситуация, когда крон не отработает по каким-либо причинам, то процессы не смогут вставлять данные в требуемые партиции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:27 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trot, для поденных партиций запускать раз в сутки, проверять наличие и добавлять на неделю вперед. в триггере на вставку в мастер-таблицу обрабатывать исключение несуществования нужной партиции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:42 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trotqwwq, Действительно два разных процесса пытаются одновременно (так совпало) создать одну и туже партицию. нет. если "одну и ту же" -- они должны встать в очередь. и второй процесс вылезет на блок обработки исключения. //*если UNLOGGED TABLE не привносит особостей т.е. вы так и не привели regclass -ов. они оба -- так и не создались, или один из них -- тот мастер, на который ФК смотрит ? big-trotСклоняюсь к идее создавать партиции по крону заранее (например, за час), до того как туда начнут записываться данные. Настораживает ситуация, когда крон не отработает по каким-либо причинам, то процессы не смогут вставлять данные в требуемые партиции.вы можете крон запускать раз в минуту, с обработкой ошибок. за 60*24 он уж точно что--то создаст. и оставить ветку создания в триггере. ещё раз -- человек, создающий таблицу в контексте вызвавшей dml транзакции -- ССЗБ. все они, и на хабре, и в портмане, и вообще. Вынесите создание в автономию. Или напишите стороннего воркера (одного на всех) и все создания делайте как вызов этого воркера. (с очередью хотя бы по (parent|childe)--ам). 2--е сложнее -- надо каким--нито языком владеть, кроме sql / plpgsql. и как правило -- платформозависимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:51 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
qwwqт.е. вы так и не привели regclass -ов. они оба -- так и не создались, или один из них -- тот мастер, на который ФК смотрит ? oi.base_crm_t2 (12530961) cls (10067977) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 12:10 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trotqwwqт.е. вы так и не привели regclass -ов. они оба -- так и не создались, или один из них -- тот мастер, на который ФК смотрит ? oi.base_crm_t2 (12530961) cls (10067977)вот видите -- мастера фк эсклюзивно хотят (это к Максу, он на них собаку съел) а oi.base_crm_t2 -- это предок одной из ваших иерархий ? или что ? PS вы написать Код: sql 1. в вашем триггере ленитесь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 12:32 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
qwwqа oi.base_crm_t2 Это предок. Вы предлагает использовать dblink для созданию партиций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 14:40 |
|
||
|
Причины deadlock
|
|||
|---|---|---|---|
|
#18+
big-trotqwwqа oi.base_crm_t2 Это предок. Вы предлагает использовать dblink для созданию партиций?а как иначе сделать автономию. или у вас уже можно ? сделать, но одним вызовом --ВЕСЬ ddl. [тут думать: не нужно ли обособить создание ФК т.е. что с чем в дедлок сцепляется.] это [автономия], кстати говоря чревато некими обременениями по части правила писания кода. [пояляется возможность словить дедлока по ожиданию возврата - вы там в тему с ёшем ходили. т.е. неразрешимого в автомате] По хорошему надо таймаут автономии давать через асинхронный вызов и/или pg_cancel_backend() и т.п. но это лишние сложности, пока логика вставки первичных данных проста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39204917&tid=1997319]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 449ms |

| 0 / 0 |
