Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) 
Aug 15 2017 10:23:29
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: )

source ~100M
target ~200M

MERGE(upsert) валиться с ошибкой
Cannot insert duplicate key row in object 'dbo.target' with unique index 'IX_target_ColA_w_ColB'. The duplicate key value is (66, 0x69a3760001000200).

object_id   name                                                                                                                             index_id    type type_desc                                                    is_unique data_space_id ignore_dup_key is_primary_key is_unique_constraint fill_factor is_padded is_disabled is_hypothetical allow_row_locks allow_page_locks has_filter filter_definition
----------- -------------------------------------------------------------------------------------------------------------------------------- ----------- ---- ------------------------------------------------------------ --------- ------------- -------------- -------------- -------------------- ----------- --------- ----------- --------------- --------------- ---------------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2005582323 IX_target_ColA_w_ColB 24 2 NONCLUSTERED 0 1 0 0 0 90 0 0 0 1 1 0 NULL

собсна странность в тексте ошибки, т.к. индекс некласнерніьй... 0_о

CREATE NONCLUSTERED INDEX [IX_target_ColA_w_ColB] ON [dbo].[target]
(
	[ColA] ASC
)
INCLUDE ( 	[ColB]) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO


Пока что единственная идея - index re-build

Мож кто что знает ?
18 июн 19, 17:24    [21910869]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
при чем тут некластерность?

заскриптован не тот индекс, который в ошибке.
тот, что в ошибке, уникальный, и по двум полям,
вам же предъявили значение ключа, ключ составной

в вашем скрипте ключ -- одно поле.
второе инклудное.
и уникальности тоже нет.

какой индекс на самом деле можно понять, рассмотрев любую нелистовую страницу.
если там 2 поля, то индекс по двум полям.
если одно, то второе действительно инклудное
18 июн 19, 17:39    [21910887]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
Yasha123,

Заскриптован тот индекс
На таблице есть еще 1-н индекс, но он так же неуникальньій/некласнерньій

Ради експеремента сделал копию таблицьі - инсерт как и мердж вьіполнился без ошибок

dbcc page ('db', 1, 9872314, 3)


+
FileId PageId      Row    Level  ChildFileId ChildPageId ColA (key)     HEAP RID (key)     KeyHashValue     Row Size
------ ----------- ------ ------ ----------- ----------- -------------- ------------------ ---------------- --------
1 9872314 0 2 1 9872312 23101 0x0001010001000300 NULL 22
1 9872314 1 2 1 9872313 23139 0x1F84140001002400 NULL 22
1 9872314 2 2 1 9872315 23167 0xBBB01C0001001F00 NULL 22
1 9872314 3 2 1 9872316 23182 0x5DDF4A0001000E00 NULL 22
1 9872314 4 2 1 9872317 23182 0xC279140001002900 NULL 22
1 9872314 5 2 1 9872318 23201 0x24B24F0001000E00 NULL 22
1 9872314 6 2 1 9872319 23225 0x04EC1D0001000700 NULL 22
1 9872314 7 2 1 9872320 23225 0x8644160001000F00 NULL 22
1 9872314 8 2 1 9872321 23240 0x24E0220001000B00 NULL 22
1 9872314 9 2 1 9872322 23264 0x275A110001000A00 NULL 22
1 9872314 10 2 1 9872323 23266 0xB3BF080001001100 NULL 22
1 9872314 11 2 1 9872324 23308 0xD1882B0001000000 NULL 22
1 9872314 12 2 1 9872325 23313 0x8305490001002900 NULL 22
1 9872314 13 2 1 9872326 23335 0x84231C0001001F00 NULL 22
1 9872314 14 2 1 9872327 23359 0x8118350001002600 NULL 22
1 9872314 15 2 1 9872328 23362 0x4B1B280001002800 NULL 22
1 9872314 16 2 1 9872329 23362 0xD918370001001E00 NULL 22
1 9872314 17 2 1 9872330 23384 0x46AA4A0001002700 NULL 22
1 9872314 18 2 1 9872331 23384 0xA9612E0001001B00 NULL 22
1 9872314 19 2 1 9872332 23406 0x5D3E1D0001001700 NULL 22
1 9872314 20 2 1 9872333 23450 0x2FC8580001000100 NULL 22
1 9872314 21 2 1 9872334 23505 0x062A1D0001002800 NULL 22
1 9872314 22 2 1 9872335 23523 0x1F93110001001E00 NULL 22
1 9872314 23 2 1 9872336 23569 0x40870A0001002900 NULL 22
1 9872314 24 2 1 9872337 23595 0x0C39300001000500 NULL 22
1 9872314 25 2 1 9872338 23595 0xF6B8510001002900 NULL 22
1 9872314 26 2 1 9872339 23619 0x03FB0A0001001600 NULL 22
1 9872314 27 2 1 9872340 23625 0xCBB01C0001002500 NULL 22
1 9872314 28 2 1 9872341 23637 0x202B4F0001002400 NULL 22
1 9872314 29 2 1 9872342 23637 0x4424150001000F00 NULL 22
1 9872314 30 2 1 9872343 23637 0x673D5C0001000200 NULL 22
1 9872314 31 2 1 5684408 23637 0x8B3E240001000000 NULL 22
1 9872314 32 2 1 5684409 23637 0xAEFE490001001D00 NULL 22
1 9872314 33 2 1 5684410 23637 0xD04D090001001100 NULL 22
1 9872314 34 2 1 5684411 23637 0xF483530001002A00 NULL 22
1 9872314 35 2 1 5684412 23688 0xA124370001000300 NULL 22
1 9872314 36 2 1 5684413 23798 0xDFEC1D0001001E00 NULL 22
1 9872314 37 2 1 5684414 23823 0xB418500001000D00 NULL 22
1 9872314 38 2 1 5684415 23842 0xFA2E590001002900 NULL 22
1 9872314 39 2 1 5684416 23917 0x3A25540001000700 NULL 22
1 9872314 40 2 1 5684417 23924 0xE3672C0001000D00 NULL 22
1 9872314 41 2 1 5684418 23959 0xBAC80B0001000600 NULL 22
1 9872314 42 2 1 5684419 23996 0x7A98160001002200 NULL 22
1 9872314 43 2 1 5684420 24001 0x070D020001001000 NULL 22
1 9872314 44 2 1 5684421 24007 0x95460A0001002100 NULL 22
1 9872314 45 2 1 5684422 24028 0x07E64C0001002900 NULL 22
1 9872314 46 2 1 5684423 24028 0x27713C0001002C00 NULL 22
1 9872314 47 2 1 5684424 24028 0x4993110001002500 NULL 22
1 9872314 48 2 1 5684425 24028 0x6B92050001000600 NULL 22
1 9872314 49 2 1 5684426 24028 0x8DE8030001000D00 NULL 22
1 9872314 50 2 1 5684427 24028 0xAF5B0D0001000100 NULL 22
1 9872314 51 2 1 5684428 24028 0xCFEA080001002100 NULL 22
1 9872314 52 2 1 5684429 24028 0xF078040001000800 NULL 22


тригеров нет
целевая таблица - факт в двх, есть пачка внешних ключей
несколько DF
все что вьіше не может завалить мердж с такой ошибкой
18 июн 19, 18:41    [21910940]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4374
_human,

Здесь ошибка хоть и упоминает индекс, но она относиться к самому MERGE.

Когда MERGE сопоставлял один набор строк с другим у него с какой-то строкой DESTINATION сопоставилось боле одной строки в SOURCE.

SELECT * INTO #SOURCE FROM (VALUES (2, 'x'), (2, 'y')) source(a, b);

SELECT * INTO #DEST FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) dest(a, b);

MERGE INTO #DEST d
USING #SOURCE s 
ON s.a = d.a
WHEN MATCHED THEN UPDATE SET b = s.b;
18 июн 19, 19:19    [21910965]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
_human
Заскриптован тот индекс
Вам уже писали - заскриптован неуникальный индекс с одним ключевым столбцом.
Ошибка же на уникальном индексе с двумя ключевыми столбцами.

Проверяйте на какой БД/сервере скриптуете и на какой БД/сервере выполняете.
18 июн 19, 19:55    [21910975]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
a_voronin,

И ошибка будет так и звучать, а никак не про индексы
19 июн 19, 01:17    [21911124]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
_human
dbcc page ('db', 1, 9872314, 3)


+
FileId PageId      Row    Level  ChildFileId ChildPageId ColA (key)     HEAP RID (key)     KeyHashValue     Row Size
------ ----------- ------ ------ ----------- ----------- -------------- ------------------ ---------------- --------
1 9872314 0 2 1 9872312 23101 0x0001010001000300 NULL 22
1 9872314 1 2 1 9872313 23139 0x1F84140001002400 NULL 22
1 9872314 2 2 1 9872315 23167 0xBBB01C0001001F00 NULL 22
1 9872314 3 2 1 9872316 23182 0x5DDF4A0001000E00 NULL 22
1 9872314 4 2 1 9872317 23182 0xC279140001002900 NULL 22
1 9872314 5 2 1 9872318 23201 0x24B24F0001000E00 NULL 22
1 9872314 6 2 1 9872319 23225 0x04EC1D0001000700 NULL 22
1 9872314 7 2 1 9872320 23225 0x8644160001000F00 NULL 22
1 9872314 8 2 1 9872321 23240 0x24E0220001000B00 NULL 22
1 9872314 9 2 1 9872322 23264 0x275A110001000A00 NULL 22
1 9872314 10 2 1 9872323 23266 0xB3BF080001001100 NULL 22
1 9872314 11 2 1 9872324 23308 0xD1882B0001000000 NULL 22
1 9872314 12 2 1 9872325 23313 0x8305490001002900 NULL 22
1 9872314 13 2 1 9872326 23335 0x84231C0001001F00 NULL 22
1 9872314 14 2 1 9872327 23359 0x8118350001002600 NULL 22
1 9872314 15 2 1 9872328 23362 0x4B1B280001002800 NULL 22
1 9872314 16 2 1 9872329 23362 0xD918370001001E00 NULL 22
1 9872314 17 2 1 9872330 23384 0x46AA4A0001002700 NULL 22
1 9872314 18 2 1 9872331 23384 0xA9612E0001001B00 NULL 22
1 9872314 19 2 1 9872332 23406 0x5D3E1D0001001700 NULL 22
1 9872314 20 2 1 9872333 23450 0x2FC8580001000100 NULL 22
1 9872314 21 2 1 9872334 23505 0x062A1D0001002800 NULL 22
1 9872314 22 2 1 9872335 23523 0x1F93110001001E00 NULL 22
1 9872314 23 2 1 9872336 23569 0x40870A0001002900 NULL 22
1 9872314 24 2 1 9872337 23595 0x0C39300001000500 NULL 22
1 9872314 25 2 1 9872338 23595 0xF6B8510001002900 NULL 22
1 9872314 26 2 1 9872339 23619 0x03FB0A0001001600 NULL 22
1 9872314 27 2 1 9872340 23625 0xCBB01C0001002500 NULL 22
1 9872314 28 2 1 9872341 23637 0x202B4F0001002400 NULL 22
1 9872314 29 2 1 9872342 23637 0x4424150001000F00 NULL 22
1 9872314 30 2 1 9872343 23637 0x673D5C0001000200 NULL 22
1 9872314 31 2 1 5684408 23637 0x8B3E240001000000 NULL 22
1 9872314 32 2 1 5684409 23637 0xAEFE490001001D00 NULL 22
1 9872314 33 2 1 5684410 23637 0xD04D090001001100 NULL 22
1 9872314 34 2 1 5684411 23637 0xF483530001002A00 NULL 22
1 9872314 35 2 1 5684412 23688 0xA124370001000300 NULL 22
1 9872314 36 2 1 5684413 23798 0xDFEC1D0001001E00 NULL 22
1 9872314 37 2 1 5684414 23823 0xB418500001000D00 NULL 22
1 9872314 38 2 1 5684415 23842 0xFA2E590001002900 NULL 22
1 9872314 39 2 1 5684416 23917 0x3A25540001000700 NULL 22
1 9872314 40 2 1 5684417 23924 0xE3672C0001000D00 NULL 22
1 9872314 41 2 1 5684418 23959 0xBAC80B0001000600 NULL 22
1 9872314 42 2 1 5684419 23996 0x7A98160001002200 NULL 22
1 9872314 43 2 1 5684420 24001 0x070D020001001000 NULL 22
1 9872314 44 2 1 5684421 24007 0x95460A0001002100 NULL 22
1 9872314 45 2 1 5684422 24028 0x07E64C0001002900 NULL 22
1 9872314 46 2 1 5684423 24028 0x27713C0001002C00 NULL 22
1 9872314 47 2 1 5684424 24028 0x4993110001002500 NULL 22
1 9872314 48 2 1 5684425 24028 0x6B92050001000600 NULL 22
1 9872314 49 2 1 5684426 24028 0x8DE8030001000D00 NULL 22
1 9872314 50 2 1 5684427 24028 0xAF5B0D0001000100 NULL 22
1 9872314 51 2 1 5684428 24028 0xCFEA080001002100 NULL 22
1 9872314 52 2 1 5684429 24028 0xF078040001000800 NULL 22




dbcc page показывает страницу одноколоночного неуникального некластерного индекса на куче.
если вы так уверены, что все делаете там,
то делали ли вы базе чекдб в ближайшее время?
19 июн 19, 10:08    [21911255]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
invm
Проверяйте на какой БД/сервере скриптуете и на какой БД/сервере выполняете.


проверил. тот сервер и та БД.
1-н продакшн сервер, 1-а БД, 1-а таблица, 1-н индекс

Индекс указаньій в ошибке существует - неуникальньій.
Я уже проверил может он в рантайм создается - нет.

Yasha123
то делали ли вы базе чекдб в ближайшее время?

я не делал.
сейсас попробую с physical only
19 июн 19, 17:44    [21911766]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Репро на небольшом кол-ве данных не собирается?
19 июн 19, 17:45    [21911767]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
Гавриленко Сергей Алексеевич
Репро на небольшом кол-ве данных не собирается?

уже
_human
Ради експеремента сделал копию таблицьі - инсерт как и мердж вьіполнился без ошибок


Сколько врмени займет ориентировочно checkdb ~150 GB ?
19 июн 19, 17:54    [21911778]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
_human
Сколько врмени займет ориентировочно checkdb ~150 GB ?

если база в порядке, полчаса хватит на полноценный чекдб вашиx 160Гб.
если блобов нет, времени надо еще меньше.
если ошибки есть, то время увеличивается.
19 июн 19, 18:03    [21911785]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
Yasha123
полноценный чекдб вашиx 160Гб.

где-то спустя 40 минут сессию дисконектнуло
вернуло сообщения по таблице и индексу которьіе в мердж-ошибке

Msg 8952, Level 16, State 1, Line 1
Table error: table 'target' (ID 2005582323). Index row in index 'IX_target_ColA_w_ColB' (ID 24) does not match any data row. Possible extra or invalid keys for:
Msg 8956, Level 16, State 1, Line 1
Index row (1:1264298:49) with values (ColA = 8 and HEAP RID = (1:7516416:17)) pointing to the data row identified by (HEAP RID = (1:7516416:17)).

Таких сообщений ровно 500
По другим обьектам ошибок не вернуло, хотя не исключено
19 июн 19, 19:42    [21911829]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
_human,

может, rebuild индекса сделать?
19 июн 19, 22:14    [21911896]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
iap
может, rebuild индекса сделать?

Да,
только пишут что нужен drop->create

мои dbcc check% никогла полностью не были завешены, т.к. или сессия была disconnect или студия умирала c SystemOutOfMemory, это на сервере ничего не выполнялось + 128 ГБ RAM
сейчас запустил с sqlcmd + output to file
Собственно вопрос, как dbcc check на продакшн делают ?
19 июн 19, 22:37    [21911907]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
_human
Собственно вопрос, как dbcc check на продакшн делают ?

ну так и делают, агентом по расписанию, во время минимальной активности.
у вас наверное круто база попорчена, раз все так трагически завершается вылетанием.
можно конечно и на отресторенной копии запускать на другом сервере,
но только это пока все без ошибок.
ошибки все равно же надо на основном исправлять.
20 июн 19, 09:59    [21912027]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
_human
SystemOutOfMemory, это на сервере ничего не выполнялось + 128 ГБ RAM

на прежнем месте работы была пара баз по 2Тб,
24Гб оперативки и никто не умирал,
чекдб лопатил их каждую неделю.
на новой чекдб настроен даже на девелоперском сервере с 4(!!!) Гб,
база 500Гб и тоже никто не умер
20 июн 19, 10:06    [21912030]     Ответить | Цитировать Сообщить модератору
 Re: Merge Cannot insert duplicate into nonclustered index  [new]
_human
Member

Откуда:
Сообщений: 556
После фикса индекса мердж ошил
Всем спасибо
Хепи енд
21 июн 19, 02:29    [21912557]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить