Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
Привет, коллеги.

Есть табла размером 41 гигабайт в SQL2008.

Вот структура базы (база секционирована) и стоит в BULK LOGGED:
+

CREATE DATABASE [v] ON  PRIMARY 
( NAME = N'Votpusk_Binary', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_0.mdf' , SIZE = 7229824KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group10] 
( NAME = N'Votpusk_Binary_10', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_10.ndf' , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group2] 
( NAME = N'Votpusk_Binary_2', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_2.mdf' , SIZE = 3227456KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group3] 
( NAME = N'Votpusk_Binary_3', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_3.ndf' , SIZE = 3228224KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group4] 
( NAME = N'Votpusk_Binary_4', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_4.ndf' , SIZE = 3227584KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group5] 
( NAME = N'Votpusk_Binary_5', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_5.ndf' , SIZE = 3228224KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group6] 
( NAME = N'Votpusk_Binary_6', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_6.ndf' , SIZE = 3227584KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group7] 
( NAME = N'Votpusk_Binary_71', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_7.ndf' , SIZE = 3228224KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group8] 
( NAME = N'Votpusk_Binary_8', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_8.ndf' , SIZE = 3227584KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ), 
 FILEGROUP [Group9] 
( NAME = N'Votpusk_Binary_9', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v_9.ndf' , SIZE = 3228224KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB )
 LOG ON 
( NAME = N'Votpusk_Binary_log', FILENAME = N'D:\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\v1.ldf' , SIZE = 8960000KB , MAXSIZE = 2048GB , FILEGROWTH = 102400KB )
GO

ALTER DATABASE [vOtpusk_Image] SET COMPATIBILITY_LEVEL = 90
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [vOtpusk_Image].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO

ALTER DATABASE [vOtpusk_Image] SET ANSI_NULL_DEFAULT OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET ANSI_NULLS OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET ANSI_PADDING OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET ANSI_WARNINGS OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET ARITHABORT OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET AUTO_CLOSE OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET AUTO_CREATE_STATISTICS ON 
GO

ALTER DATABASE [vOtpusk_Image] SET AUTO_SHRINK OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET AUTO_UPDATE_STATISTICS ON 
GO

ALTER DATABASE [vOtpusk_Image] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET CURSOR_DEFAULT  GLOBAL 
GO

ALTER DATABASE [vOtpusk_Image] SET CONCAT_NULL_YIELDS_NULL OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET NUMERIC_ROUNDABORT OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET QUOTED_IDENTIFIER OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET RECURSIVE_TRIGGERS OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET  DISABLE_BROKER 
GO

ALTER DATABASE [vOtpusk_Image] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET TRUSTWORTHY OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET PARAMETERIZATION SIMPLE 
GO

ALTER DATABASE [vOtpusk_Image] SET READ_COMMITTED_SNAPSHOT OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET HONOR_BROKER_PRIORITY OFF 
GO

ALTER DATABASE [vOtpusk_Image] SET  READ_WRITE 
GO

ALTER DATABASE [vOtpusk_Image] SET RECOVERY BULK_LOGGED 
GO

ALTER DATABASE [vOtpusk_Image] SET  MULTI_USER 
GO

ALTER DATABASE [vOtpusk_Image] SET PAGE_VERIFY CHECKSUM  
GO

ALTER DATABASE [vOtpusk_Image] SET DB_CHAINING OFF 
GO


в базе есть табла BIN1

CREATE TABLE [dbo].[Bin1](
	[i] [int] IDENTITY(1,1) NOT NULL,
	[ToUserData] [int] NOT NULL,
	[Part] [int] NOT NULL,
	[Data] [varbinary](max) NOT NULL,
 CONSTRAINT [PK_Bin1] PRIMARY KEY NONCLUSTERED 
(
	[i] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
)


в ней есть такая проца вставки записи:


CREATE procedure [dbo].[InsertUserDataBinary] 
@ToUserData int,
@Data varbinary(max),
@Parts int
as 
declare @NullableToGroup int
declare @SectionNumber int

--INSERT dbo.Bin1(ToUserData,Part,Data) Values (@ToUserData,@Parts,@Data)
--return 0

Begin Tran



	BEGIN TRY
		-- эта проца вставляет только данные по готовому заголовку
        INSERT vOtpusk_Image.dbo.Bin1(ToUserData,Part,Data) Values (@ToUserData,@Parts,@Data)
        IF @@ERROR <> 0 Begin
		   Select NULL as SectionNumber, ERROR_MESSAGE() AS ErrorMessage
		   rollback tran
		END
		select @SectionNumber=scope_Identity()

		Select @SectionNumber as SectionNumber, NULL AS ErrorMessage
		commit tran
		return 0

	END TRY

	BEGIN CATCH
		Select  NULL as SectionNumber, ERROR_MESSAGE() AS ErrorMessage
		rollback tran
	END CATCH


GO



Все чудесно работало много лет, однако в какой-то момент умерло железо. И я заменил его, по возможности точно постаравшись склонировать весь софт. Все склонировалось удачно, но обнаружилась вот такая проблема.
В эту таблу перестали добавляться нормально записи. Точнее говоря, иногда (наверное один раз из 50-ти) добавляются успешно. Иногда все жестко тормозит до невозможности (на минуту и более), иногда все валится с сообщением в заголовке топика.

Каковы мои предположения отказа SQL-сервера в выполнении команды INSERT?

- может быть в SQL-сервере возникает какая-то блокировка, препятствующая выполнению команды INSERT ? Но закоментил по возможности все транзакции (типа если в проце выше раскоментить две строчки) - ничего не меняется
- может какие-то другие блокировки возникают на уровне ядра SQL? допустим что-то он не успевает сделать на таких больших обьемах базы и страничка с данными остается заблокированной?
- может возникает торможение железа, дискового РЕЙДА, что-то он начинает делать сам, да так долго, что команда INSERT просто не выполняется- прогнал тесты дискового РЕЙДа - не нашел ничего
- может какие-то параметры глобальные в SQL-сервере я ставил на старой машине, а сейчас уже не помню какие именно? А с дефолтными параметрами это вообще работать не может на объемах базы в 41 гигабайт?


Куда вообще копать посоветуете, коллеги? Как решить этот вопрос? Может кто сталкивался с таким?
5 фев 15, 11:50    [17221350]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
Glory
Member

Откуда:
Сообщений: 104760
bg1
- может быть в SQL-сервере возникает какая-то блокировка, препятствующая выполнению команды INSERT ? Но закоментил по возможности все транзакции (типа если в проце выше раскоментить две строчки) - ничего не меняется
- может какие-то другие блокировки возникают на уровне ядра SQL? допустим что-то он не успевает сделать на таких больших обьемах базы и страничка с данными остается заблокированной?
- может возникает торможение железа, дискового РЕЙДА, что-то он начинает делать сам, да так долго, что команда INSERT просто не выполняется- прогнал тесты дискового РЕЙДа - не нашел ничего
- может какие-то параметры глобальные в SQL-сервере я ставил на старой машине, а сейчас уже не помню какие именно? А с дефолтными параметрами это вообще работать не может на объемах базы в 41 гигабайт?

Никакие блокировки и параметры не влияют на возможность нарушения duplicate key

А сравнение текста ошибки "with unique index 'Unique1' " и скрипта вашей таблицы говорит о том, что
либо вы не про все индексы знаете
либо вообще не ту таблицу проверяете
5 фев 15, 11:53    [17221388]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
bg1
В эту таблу перестали добавляться нормально записи. Точнее говоря, иногда (наверное один раз из 50-ти) добавляются успешно. Иногда все жестко тормозит до невозможности (на минуту и более), иногда все валится с сообщением в заголовке топика.

Ну так исчите with unique index 'Unique1' ю
В ДДЛ таблицы которую вы привели такого идекса нет
5 фев 15, 11:55    [17221400]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
Увы, я все точно знаю и про таблу BIN1

К сообщению приложен файл. Размер - 7Kb
5 фев 15, 14:51    [17222944]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
Glory
Member

Откуда:
Сообщений: 104760
bg1
Увы, я все точно знаю и про таблу BIN1

А сообщение об ошибке вы читали ?
И почему индексы вы ищите в Keys ?

Сообщение было отредактировано: 5 фев 15, 14:51
5 фев 15, 14:51    [17222950]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
И все точно знаю про эту ошибку, и все точно знаю про INSERT, на котором она воникает

К сообщению приложен файл. Размер - 2Kb
5 фев 15, 14:51    [17222955]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
Glory
Member

Откуда:
Сообщений: 104760
bg1
И все точно знаю про эту ошибку, и все точно знаю про INSERT, на котором она воникает

Осталось только узанть ваше мнение о том, как связаны Pk_Bin1 и Unique1
5 фев 15, 14:52    [17222963]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
Упс, понял

К сообщению приложен файл. Размер - 7Kb
5 фев 15, 14:53    [17222965]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
DBCC CHECKDB после "умерло железо" вы делали?
5 фев 15, 14:53    [17222968]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
Нет пока,
я уже понял в чем я затупил - все дело в этом индексе, он просто развалился
5 фев 15, 14:57    [17223005]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
bg1
Нет пока,
я уже понял в чем я затупил - все дело в этом индексе, он просто развалился
А не в том, что Вы пытаетесь вставить @ToUserData и @Parts, которые в таблице уже есть?
5 фев 15, 14:59    [17223027]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
iap, хм...
ну вообще-то логика проги, расположенной выше SQL не должна позволять это
иначе была бы полная каша вообще, это приложение вообще бы врядли работало
да, это вопрос...
5 фев 15, 15:10    [17223116]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
bg1
ну вообще-то логика проги, расположенной выше SQL не должна позволять это
иначе была бы полная каша вообще, это приложение вообще бы врядли работало
Вот уникальные индексы и служат для того, что бы проги, не позволяющие делать кашу в данных, её в итоге всё таки не делали :-)
5 фев 15, 15:14    [17223160]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
да, спасибо коллективному разуму форума
дополняю свои три варианта еще двумя, возможно даже более реалистичными

4. Развалился уникальный индекс 'Unique1'
5. Была какая-то незавершенная транзакция, или какой-то сбой оборудования на старом сервере (а они были и много!!!), рестарт сервера в неудачный момент - из-за чего запортилась какая-то логика более высокого порядка, и прога пытается пихать в эту базу какие-то неверные данные - этот вариант требует дальнейшего обдумывания, как такое могло произойти
5 фев 15, 15:19    [17223211]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
bg1
дополняю свои три варианта еще двумя, возможно даже более реалистичными

4. Развалился уникальный индекс 'Unique1'
Это маловероятно. Но проверьте базу CHECKDB, на всякий.
5 фев 15, 15:25    [17223266]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
alexeyvg
bg1
дополняю свои три варианта еще двумя, возможно даже более реалистичными

4. Развалился уникальный индекс 'Unique1'
Это маловероятно. Но проверьте базу CHECKDB, на всякий.
Или можно пересоздать индекс, только прогу отключите, а то она вам насуёт...
5 фев 15, 15:26    [17223279]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
bg1
Member

Откуда:
Сообщений: 42
CHECKDB found 0 allocation errors and 0 consistency errors in database 'v' - да, индекс нормальный

значит остается только вариант, что прога вставляет не уникальные данные (иногда, примерно в 90% случаев, процентов в 10% случаев вставляет уникальные), но это уже вопрос не по SQL

Спасибо за помощь
5 фев 15, 15:30    [17223314]     Ответить | Цитировать Сообщить модератору
 Re: Cannot insert duplicate key row in object <dbo.> with unique index 'Unique1'  [new]
Вот структура
Guest
bg1,

колонка вроде Part, а в сообщении Parts
триггеров нет на таблице?
9 фев 15, 00:06    [17235931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить