Bloqueo de Procedimiento Almacenado
Tengo un problema con un procedimiento almacenado el cual utiliza un select que en algún momento del día se bloquea y no me envía el resultado del mismo, este procedimiento utiliza cursores 2 para ser exactos y tablas temporales 2 también, reemplace los stored procedures por ciclos while usando más tablas temporales y aun así ejecuto el query desde sql y todo funciona bien hasta que en cierto momento me bloquea, pasan y pasan minutos sin enviarme un solo registro... Ya use indices, ya use with (no lock), optimice la consulta reduciéndola a un solo cursor y a una sola temporal y aun así me bloquea, tendrá algo que ver que la consulta del cursor intervienen 2 tablas de 5 y 6 millones de registros y sigue aumentado día a día... Claro que usando los filtros correspondientes los registros se reducen... Dejo la estructura de las tablas y las consultas... Espero y me puedas ayudar
--Select del cursor
SELECT ld.id_socio, ld.regpatronal, COUNT(*) AS dias, ld.baseem, ld.baseivcm, MIN(ld.fecha) AS fechamin,MAX(ld.fecha) AS fechamax,lda.cvecliente,lda.id_sucursal_cliente-- isnull(lda.cvecliente,@V_cvectedelphi),ISNULL(lda.id_sucursal_cliente,@V_id_sucursal_matriz)
FROM CAPLISTADIARIA ld
LEFT OUTER JOIN CAPLISTADIARIA_ASIGNADOS lda ON lda.id_plaza = ld.id_plaza and lda.id_sucursal = ld.id_sucursal and lda.id_empresa = ld.id_empresa and lda.fecha = ld.fecha AND lda.id_socio = ld.id_socio
WHERE ld.id_plaza = @V_id_plaza AND ld.id_sucursal = @V_id_sucursal AND ld.id_empresa = @V_id_empresa AND ld.fecha >= @V_fechaini and ld.fecha <= @V_fechafin
GROUP BY ld.id_socio, ld.regpatronal, ld.baseem, ld.baseivcm,lda.cvecliente,lda.id_sucursal_cliente
ORDER BY ld.id_socio, ld.baseem
--FIN DEL SELECT DEL CURSOR
---TABLAS 1
CREATE TABLE [dbo].[CAPLISTADIARIA](
[id_plaza] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_sucursal] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_empresa] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_socio] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[fecha] [datetime] NOT NULL,
[regpatronal] [varchar](11) COLLATE Modern_Spanish_CI_AS NOT NULL,
[rendiario] [numeric](8, 2) NOT NULL CONSTRAINT [DF_CAPLISTADIARIA_rendiario] DEFAULT ((0)),
[baseem] [numeric](8, 2) NOT NULL,
[baseivcm] [numeric](8, 2) NOT NULL,
[status] [tinyint] NOT NULL CONSTRAINT [DF_CAPLISTA_DIARIA_status] DEFAULT ((0)),
[id_puesto] [varchar](17) COLLATE Modern_Spanish_CI_AS NULL,
[zonasm] [varchar](1) COLLATE Modern_Spanish_CI_AS NULL,
[clasert] [tinyint] NULL,
CONSTRAINT [PK_CAPLISTA_DIARIA] PRIMARY KEY CLUSTERED
(
[id_plaza] ASC,
[id_sucursal] ASC,
[id_empresa] ASC,
[id_socio] ASC,
[fecha] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
--FIN DE TABLA 1
--TABLA 2
CREATE TABLE [dbo].[CAPLISTADIARIA_ASIGNADOS](
[id_plaza] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_sucursal] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_empresa] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[cvecliente] [varchar](6) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_socio] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[fecha] [datetime] NOT NULL,
[id_sucursal_cliente] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[cvesocio] [varchar](7) COLLATE Modern_Spanish_CI_AS NOT NULL,
CONSTRAINT [PK_CAPLISTADIARIA_ASIGNADOS] PRIMARY KEY CLUSTERED
(
[id_plaza] ASC,
[id_sucursal] ASC,
[id_empresa] ASC,
[cvecliente] ASC,
[id_socio] ASC,
[fecha] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
--FIN DE TABLA 2
--Ejemplos de registros
--TABLA 1
INSERT INTO CAPLISTADIARIA VALUES('20061209102712153', '20061209132936543', '20061205101212920', '20070209180559857' ,'2007-05-01 00:00:00.000', 'E5354326103', 52.00, 52.00, 52.00, 0, NULL, NULL, NULL)
--TABLA2
INSERT INTO CAPLISTADIARIA_ASIGNADOS VALUES('20061209102712153', '20061209132936543', '20061205101212920', '000001', '20070209180559857', '2007-11-01 00:00:00.000', '20070212120527750', '0000001')
--Select del cursor
SELECT ld.id_socio, ld.regpatronal, COUNT(*) AS dias, ld.baseem, ld.baseivcm, MIN(ld.fecha) AS fechamin,MAX(ld.fecha) AS fechamax,lda.cvecliente,lda.id_sucursal_cliente-- isnull(lda.cvecliente,@V_cvectedelphi),ISNULL(lda.id_sucursal_cliente,@V_id_sucursal_matriz)
FROM CAPLISTADIARIA ld
LEFT OUTER JOIN CAPLISTADIARIA_ASIGNADOS lda ON lda.id_plaza = ld.id_plaza and lda.id_sucursal = ld.id_sucursal and lda.id_empresa = ld.id_empresa and lda.fecha = ld.fecha AND lda.id_socio = ld.id_socio
WHERE ld.id_plaza = @V_id_plaza AND ld.id_sucursal = @V_id_sucursal AND ld.id_empresa = @V_id_empresa AND ld.fecha >= @V_fechaini and ld.fecha <= @V_fechafin
GROUP BY ld.id_socio, ld.regpatronal, ld.baseem, ld.baseivcm,lda.cvecliente,lda.id_sucursal_cliente
ORDER BY ld.id_socio, ld.baseem
--FIN DEL SELECT DEL CURSOR
---TABLAS 1
CREATE TABLE [dbo].[CAPLISTADIARIA](
[id_plaza] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_sucursal] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_empresa] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_socio] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[fecha] [datetime] NOT NULL,
[regpatronal] [varchar](11) COLLATE Modern_Spanish_CI_AS NOT NULL,
[rendiario] [numeric](8, 2) NOT NULL CONSTRAINT [DF_CAPLISTADIARIA_rendiario] DEFAULT ((0)),
[baseem] [numeric](8, 2) NOT NULL,
[baseivcm] [numeric](8, 2) NOT NULL,
[status] [tinyint] NOT NULL CONSTRAINT [DF_CAPLISTA_DIARIA_status] DEFAULT ((0)),
[id_puesto] [varchar](17) COLLATE Modern_Spanish_CI_AS NULL,
[zonasm] [varchar](1) COLLATE Modern_Spanish_CI_AS NULL,
[clasert] [tinyint] NULL,
CONSTRAINT [PK_CAPLISTA_DIARIA] PRIMARY KEY CLUSTERED
(
[id_plaza] ASC,
[id_sucursal] ASC,
[id_empresa] ASC,
[id_socio] ASC,
[fecha] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
--FIN DE TABLA 1
--TABLA 2
CREATE TABLE [dbo].[CAPLISTADIARIA_ASIGNADOS](
[id_plaza] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_sucursal] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_empresa] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[cvecliente] [varchar](6) COLLATE Modern_Spanish_CI_AS NOT NULL,
[id_socio] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[fecha] [datetime] NOT NULL,
[id_sucursal_cliente] [varchar](17) COLLATE Modern_Spanish_CI_AS NOT NULL,
[cvesocio] [varchar](7) COLLATE Modern_Spanish_CI_AS NOT NULL,
CONSTRAINT [PK_CAPLISTADIARIA_ASIGNADOS] PRIMARY KEY CLUSTERED
(
[id_plaza] ASC,
[id_sucursal] ASC,
[id_empresa] ASC,
[cvecliente] ASC,
[id_socio] ASC,
[fecha] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
--FIN DE TABLA 2
--Ejemplos de registros
--TABLA 1
INSERT INTO CAPLISTADIARIA VALUES('20061209102712153', '20061209132936543', '20061205101212920', '20070209180559857' ,'2007-05-01 00:00:00.000', 'E5354326103', 52.00, 52.00, 52.00, 0, NULL, NULL, NULL)
--TABLA2
INSERT INTO CAPLISTADIARIA_ASIGNADOS VALUES('20061209102712153', '20061209132936543', '20061205101212920', '000001', '20070209180559857', '2007-11-01 00:00:00.000', '20070212120527750', '0000001')
Respuesta de hernan59_arg
1
1 respuesta más de otro experto
Respuesta de brownsea
1