Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

Tablas con índice y opción IGNORE_DUP_KEY=ON problemas en los bloqueos al insertar en la tabla Expand / Collapse
Author
Message
Posted Tuesday, November 12, 2013 1:24 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Friday, November 15, 2013 3:06 AM
Points: 5, Visits: 11
Hola,

Tengo una aplicación en SQL Server 2008 con varias tablas que tienen índices únicos con la opción IGNORE_DUP_KEY=ON que me permite insertar masivamente datos desde otras fuentes sin provocar errores de duplicados del índice. Sin embargo esta opción del índice me da problemas a la hora de realizar inserciones en una tabla desde diferentes transacciones que hacen los diferentes usuarios. Por ejemplo un usuario agrega un registro a una tabla en cuestión dentro de una transacción y hasta que no se termina la transacción otros usuarios no pueden insertar registros en esa tabla por que se encuentra bloqueada. ¿Como puedo solucionar este problema?

Saludos,

José Antonio Muñoz
Post #1513617
Posted Tuesday, November 12, 2013 1:55 PM


Hall of Fame

Hall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of Fame

Group: General Forum Members
Last Login: Yesterday @ 5:43 PM
Points: 3,667, Visits: 8,006
Antes que nada, bienvenido a este sitio.
Te recomiendo que escribas en inglés ya que así recibirás más ayuda y no te quedarás con la ayuda de sólo unos cuantos que hablamos español.
Ahora, estás hablando de 2 problemas distintos, la opción IGNORE_DUP_KEY=ON que evita que toda una operación de insert falle. Sin embargo, no estoy seguro de que se relacione con el otro detalle que comentas.
Cuando se realiza una instrucción de lectura o escritura sobre una tabla, esta (o parte de esta) queda bloqueada para mantener la integridad de las bases de datos. Para evitar problemas, te recomiendo que leas acerca de los TRANSACTION ISOLATION LEVELS para que veas si te puede ayudar a solucionar tu problema.



Luis C.
Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

Forum Etiquette: How to post data/code on a forum to get the best help
Post #1513627
Posted Tuesday, November 12, 2013 2:45 PM


SSCertifiable

SSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiable

Group: General Forum Members
Last Login: Today @ 7:57 AM
Points: 7,164, Visits: 13,259
Ich habe keine Ahnung, wovon du sprichst, Luis!
(I have no idea what you're talking about, Luis!)




Lutz
A pessimist is an optimist with experience.

How to get fast answers to your question
How to post performance related questions
Links for Tally Table , Cross Tabs and Dynamic Cross Tabs , Delimited Split Function
Post #1513641
Posted Tuesday, November 12, 2013 3:31 PM


Hall of Fame

Hall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of Fame

Group: General Forum Members
Last Login: Yesterday @ 5:43 PM
Points: 3,667, Visits: 8,006
LutzM (11/12/2013)
Ich habe keine Ahnung, wovon du sprichst, Luis!
(I have no idea what you're talking about, Luis!)

I'm just trying to help
I just hope people won't rely just on me.



Luis C.
Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

Forum Etiquette: How to post data/code on a forum to get the best help
Post #1513647
Posted Wednesday, November 13, 2013 1:05 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Friday, November 15, 2013 3:06 AM
Points: 5, Visits: 11
Hola Luis, gracias por tu respuesta,

pero quiero comentarte que no son problemas distintos, antes de solicitar ayuda en el foro he analizado todo lo que me comentas. He probado las diferentes configuraciones de TRANSACTION ISOLATION LEVELS pero el problema persiste. En cuanto a la opción IGNORE_DUP_KEY en la creación de índices no es por una intuición mía el hecho de que está provocando el problema en el bloqueo de la tabla en cuestión, si no por que lo he analizado haciendo diversas pruebas: he creado una tabla con un índice único clustered con la opción IGNORE_DUP_KEY=OFF, y funciona perfectamente las inserciones de registros en diferentes transacciones, no se producen bloqueos. Sin embargo la misma tabla la creo con el mismo índice y con la opción IGNORE_DUP_KEY=ON y a partir de ahí se reproducen los problemas que he comentado al principio.

Hi Luis, thanks for your answer,

but I want to tell that there are different problems, before asking for help in the forum I analyzed everything I comets. I've tried different configurations TRANSACTION ISOLATION LEVELS but the problem persists. As for the option IGNORE_DUP_KEY indexing is not my intuition that is causing the problem in locking the table in question, if not I analyzed by various tests: I created a table with a single index with the option clustered IGNORE_DUP_KEY = OFF, and works perfectly insertions in different transaction records, no blockages occur. But I think the same table with the same index and IGNORE_DUP_KEY = ON option and thereafter causes the problems I mentioned at the beginning.
Post #1513721
Posted Wednesday, November 13, 2013 2:08 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Friday, November 15, 2013 3:06 AM
Points: 5, Visits: 11
This is an example:

Example A:

CREATE TABLE Tabla (Codigo Int, Fecha Date);
CREATE UNIQUE NONCLUSTERED INDEX X_Prueba ON Tabla (Codigo) WITH (IGNORE_DUP_KEY=ON);

(In session 1)
BEGIN TRAN
INSERT Tabla VALUES (1,'01/01/2013')

(1 rows affected)

(In session 2)
BEGIN TRAN
INSERT Tabla VALUES (2,'02/01/2013')

Error: Exceeded timeout lock request.

Example B:

CREATE TABLE Tabla (Codigo Int, Fecha Date);
CREATE UNIQUE NONCLUSTERED INDEX X_Prueba ON Tabla (Codigo) WITH (IGNORE_DUP_KEY=OFF);

(In session 1)
BEGIN TRAN
INSERT Tabla VALUES (1,'01/01/2013')

(1 rows affected)

(In session 2)
BEGIN TRAN
INSERT Tabla VALUES (2,'02/01/2013')

(1 rows affected)

as shown in the example to change the option: IGNORE_DUP_KEY=ON into IGNORE_DUP_KEY=OFF pruduce not lock in session 2.

Thanks and regards,
Jose Antonio Muñoz
Post #1513737
Posted Wednesday, November 13, 2013 4:54 AM


SSC Eights!

SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!SSC Eights!

Group: General Forum Members
Last Login: Yesterday @ 6:57 AM
Points: 906, Visits: 2,868
Hi,

Your example shows that the insert with IGNORE_DUP_KEY = ON produces a much more complicated query plan because it needs to filter out the duplicates before performing the insert. This also introduces an extra Key Range Lock as seen in sp_lock.







The SQL Guy @ blogspot

@SeanPearceSQL

About Me


  Post Attachments 
sp_lock.png (47 views, 13.89 KB)
ex plans.png (46 views, 20.24 KB)
Post #1513807
Posted Wednesday, November 13, 2013 5:24 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Friday, November 15, 2013 3:06 AM
Points: 5, Visits: 11
What that means? What no solution? Do I have to set the option IGNORE_DUP_KEY=OFF to work well locks when inserting? Is not there another solution?

thanks and regards
Post #1513811
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse