|
|
|
Непонятное поведение sequence
|
|||
|---|---|---|---|
|
#18+
Привет, всем. Есть непонятная ситуация которая случилась сегодня ночью на боевом сервере. Дано: Сервер с входящим потоком INSERT с частотой примерно 2000-4000 tps ( в зависимости от нагрузки ) Всё это счастье пишется в таблицу, на которой есть SERIAL поле с первичным ключем. Работало это всё стабильно, несколько месяцев, логика не менялась, ночью внезапно, запись в таблицу остановилась, а в лог посыпалась куча ошибок вида: 2015/06/17 23:33:30 [error] 438#0: *4337002441 postgres: failed to receive result: PGRES_FATAL_ERROR: ERROR: duplicate key value violates unique constraint "rawlogs_2_pkey" DETAIL: Key (id)=(108797936) already exists. На каждый инсерт. Вообщем-то спасло ситуацию, перенесении записи на другую такую же таблицу и дальнейший рестарт сиквенса. Из дополнительного: если совсем вдаваться в особенности то таблиц у нас таких две и они подменяются раз в час, после чего данные с неактивной таблицы сливаются в аггрегированном виде в другие таблицы, и происходит truncate с рестартом сиквенса В логах выудить что либо более конкретное не удалось. Кто нибудь может предположить что произошло ? Данных в таблице с такими ID (выборочно взяли несколько из логов) не оказалось. Могли ли так "слететь" индексы ? или что могло инициировать подобное поведение ? PS: версия 9.4.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 11:31 |
|
||
|
Непонятное поведение sequence
|
|||
|---|---|---|---|
|
#18+
dezconnect, расскажите по подробнее про " то таблиц у нас таких две и они подменяются раз в час, после чего данные с неактивной таблицы сливаются в аггрегированном виде в другие таблицы, и происходит truncate с рестартом сиквенса" так как это не подробное описание и даже не поверхностное. Подробное - все sql запросы которые в этом процессе проходят и структура таблиц. Так как косяк где то на этом уровне. Особенно меня смущает "truncate с рестартом сиквенса". -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 11:37 |
|
||
|
Непонятное поведение sequence
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Немного наврал, с описанием процесса =\ есть две таблицы rawlogs_1 и rawlogs_2 идентичной структуры, есть вью rawlogs (который указывает на одну из двух этих таблиц) в который происходит запись, есть хранимки вызываемые раз в сутки, которые: 1) меняет во вьюхе, имя таблицы куда происходит вставка(rawlogs_1 или rawlogs_2) - change_current_rawlogs_table() 2) бекапит переименовывает текующую таблицу из вьюхи, в таблицу с суточными данными, и делает собственно рестарт сиквенса - backup_rawlogs_table() Инсерт типовой, как указанный тут. Разве что еще таблицы rawlogs_1/rawlogs_2 наследуются от шаблонной таблицы. Код: 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. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 12:16 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=109&tid=1997927]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 273ms |
| total: | 376ms |

| 0 / 0 |
