|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
День добрый. Может у кого было, я уже не знаю куда копать. Microsoft SQL Server 2016 (SP2-CU17) (KB5001092) - 13.0.5888.11 (X64) Mar 19 2021 19:41:38 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) Есть таблица target. На ней кластер и PK(field1 int, field2 int, field3 int, field4 int, field5 varchar(255)) Есть джоб. Он выполняет селект, в нем парсинг и помещает данные во временную #tmp. И финальная часть: Код: sql 1. 2. 3. 4. 5. 6.
И эта тривиальная конструкция когда раз в день, когда десяток раз в день выдает ошибку "Violation of PRIMARY KEY constraint 'pk_target'. Cannot insert duplicate key in object target". Джоб единственный и только он заполняет эту таблицу. Коллейт- такой же, стринга- только английские символы. Этот сервак сейчас включили в always on кластер и с этого же момента начались эти чудеса. На пассивной ноде джоб не отрабатает. Запихнул в catch сохранение данных из #tmp. После ошибки- в target обнаружил запись на которой происходило задвоение. Т.е. не работает "not exists (select 1 from target". И такие ошибки появились еще других запросах. Этот самый простой и наглядный. Какие еще могут быть идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 11:20 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest, Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 11:28 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
Oleg_SQL, в моем примере сравнение идет по PK, там нет null ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 11:37 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest День добрый. Может у кого было, я уже не знаю куда копать. Microsoft SQL Server 2016 (SP2-CU17) (KB5001092) - 13.0.5888.11 (X64) Mar 19 2021 19:41:38 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) Есть таблица target. На ней кластер и PK(field1 int, field2 int, field3 int, field4 int, field5 varchar(255)) Есть джоб. Он выполняет селект, в нем парсинг и помещает данные во временную #tmp. И финальная часть: Код: sql 1. 2. 3. 4. 5. 6.
И эта тривиальная конструкция когда раз в день, когда десяток раз в день выдает ошибку "Violation of PRIMARY KEY constraint 'pk_target'. Cannot insert duplicate key in object target". Джоб единственный и только он заполняет эту таблицу. Коллейт- такой же, стринга- только английские символы. Этот сервак сейчас включили в always on кластер и с этого же момента начались эти чудеса. На пассивной ноде джоб не отрабатает. Запихнул в catch сохранение данных из #tmp. После ошибки- в target обнаружил запись на которой происходило задвоение. Т.е. не работает "not exists (select 1 from target". И такие ошибки появились еще других запросах. Этот самый простой и наглядный. Какие еще могут быть идеи? Ну щас нам расскажут сказку "Т.е. не работает "not exists (select 1 from target". Ты не понимаешь как оно работает. Чудес не бывает. Зато бывает параллельная вставка. Варианты: 1. Код: sql 1. 2. 3. 4. 5. 6.
2. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 12:15 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
aleks222 Код: sql 1.
Зачем таблок то сразу? xlock, rowlock на селект вполне достаточно Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 12:47 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
msLex aleks222 Код: sql 1.
Зачем таблок то сразу? xlock, rowlock на селект вполне достаточно Код: sql 1. 2. 3. 4. 5. 6.
Очень миленько так... пытаться блокировать несуществующие строки. Сервер будет в восхищении. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 12:52 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
aleks222 Очень миленько так... пытаться блокировать несуществующие строки. Для этого и указывается holdlock, что является синонимом SERIALIZABLE Для несуществующих строк будет наложена range блокировка ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 12:59 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest, В таком виде гарантируется отсутствие дубликатов, только на TIL serializable. Поэтому перепишите так Код: sql 1. 2.
Либо перепишите через merge, но тоже с serializable ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 13:06 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
invm drakest, В таком виде гарантируется отсутствие дубликатов, только на TIL serializable. Спасибо, попробую. Но это подразумевает, что писателей все же несколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 13:35 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest, Ну либо несколько писателей, либо дубликаты в исходных данных. Третьего не дано. Хотя еще триггер может так гадить. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 13:43 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
invm либо дубликаты в исходных данных. Там group by по ключу ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 14:08 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
собрали аудит- нашелся второй писатель. И этот второй писатель- засветился под учеткой агента который на read only ноде крутится. Текущая RO нода- старый сервер, на след.неделе окончательный переезд будет и отключение старого. Джобы на нем не поотключали, но почему они не обламываются и выполняются на активной ноде? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 16:13 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest собрали аудит- нашелся второй писатель. И этот второй писатель- засветился под учеткой агента который на read only ноде крутится. Текущая RO нода- старый сервер, на след.неделе окончательный переезд будет и отключение старого. Джобы на нем не поотключали, но почему они не обламываются и выполняются на активной ноде? Дык нефиг имя сервера явно указывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2021, 16:17 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
Коллеги, кто сможет пояснить, каким образом job работающий на пассивной ноде в anways on ag умудряется работать по активной ноде? Агенты на разных нодах под разными учетками- поэтому удалось идентифицировать автора инсертов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 11:30 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest Коллеги, кто сможет пояснить, каким образом job работающий на пассивной ноде в anways on ag умудряется работать по активной ноде? Агенты на разных нодах под разными учетками- поэтому удалось идентифицировать автора инсертов. 1. Джоб выполняет какое-нибудь внешнее приложение или ssis пакет, и в нем указан коннект к определённой ноде, или вообще к listener-у 2. В Джобе крутится бесконечный цикл (что-то вроде while 1=1 begin --do smth waitfor ... end) В момент переключения активной ноды AG группы SQL SERVER может не "отстрелить" коннекты, а перенести их на новую активную ноду, если эти коннекты находятся в состоянии, походящим для такого переноса. коннект в момент waitfor ... без открытых транзакций вполне подходит для переноса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 11:52 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
Интересно, как-то можно отследить событие переключения? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 12:29 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
drakest Коллеги, кто сможет пояснить, каким образом job работающий на пассивной ноде в anways on ag умудряется работать по активной ноде? Агенты на разных нодах под разными учетками- поэтому удалось идентифицировать автора инсертов. Странный, какой-то тредстартер. Вместо того, чтобы заглянуть в настройки джоба, требует чтобы все начали протирать хрустальные шары и мешать кофейную гущу. ЗЫ. Ващето, MS SQL Agent - обычное приложение, работающее с тем источником данных, который указан в настройках. А AlwayOn - хрень, которая должна прикидываться ОДНИМ сервером и, внутре себя, работать на активной ноде. Медитация на эту тему ведет к неизбежному просветлению. ЗЗЫ. Про "непрерываемый коннект" - я лучше помолчу. А то меня забанят. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 13:17 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
msLex 1. Джоб выполняет какое-нибудь внешнее приложение или ssis пакет, и в нем указан коннект к определённой ноде, или вообще к listener-у нет, в данном случае джоб дергает хп. Она без линков, в рамках одного инстанса раз в 15минут ищет свежие данные. msLex 2. В Джобе крутится бесконечный цикл (что-то вроде while 1=1 begin --do smth waitfor ... end) В момент переключения активной ноды AG группы SQL SERVER может не "отстрелить" коннекты, а перенести их на новую активную ноду, если эти коннекты находятся в состоянии, походящим для такого переноса. коннект в момент waitfor ... без открытых транзакций вполне подходит для переноса. Теоретически, может быть в момент переключения джоб работал... Но за 2 недели уже бы и пора "протухнуть" ему. В любом случае, спасибо за идеи ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 13:53 |
|
Violation of PRIMARY KEY constraint
|
|||
---|---|---|---|
#18+
Владислав Колосов Интересно, как-то можно отследить событие переключения? Мы на новом сервере подобавляли в джобы первый шаг, чтоб они стопились на пассивной ноде. На этом не стали, т.к. в понедельник он перестанет существовать. За что и поплатились временем ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 13:57 |
|
|
start [/forum/topic.php?fid=46&msg=40094051&tid=1684354]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
140ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 494ms |
0 / 0 |