Problema Sp

14/06/2005 - 23:28 por Pao | Informe spam
Por favor su ayuda con esto:

1.Tengo entendido que el optimizador decide si usa o no los indices que
posee una tabla en base a las estadisticas de los mismos.

2. Si yo en mi sp estoy pasando un parametro de input de fecha que luego lo
utilizo para realizar el select, porque el optimizador no considera el indice
i_at_fecha como una opción, pero si lo considera como opción con el artificio
que marco con azul.

3. porque la primera vez que se ejecuta se demora y se va time-out y las
siguientes veces sea con los mismos parametros u otros se demora
aproximadamente 7 segundos.


La tabla movimientos_his tiene varios indices noclustered entre ellos el
indice i_at_fecha

i_at_fecha nonclustered located on PRIMARY FECHA_HORA_DE_TRANSACCION,
NUMERO_DE_TERMINAL, NUMERO_DE_RECIBO, SECUENCIA_DE_TRANSACCION,
CODIGO_DE_TRANSACCION, TIPO_DE_MENSAJE, FI_ADQUIRENTE, TIPO_DE_MOVIMIENTO


create proc sp_consulta_trx_fallidas
(
@i_fecha varchar(10) = '01/01/2999',
@i_terminal varchar(6) = '00000',
@i_estado_procesamiento char(1) = 'S'
)
as
declare @error_var int,
@rowcount_var1 int,
@rowcount_var2 int,
@fecha datetime,
@terminal varchar(6),
@estado char(1)

select @fecha = @i_fecha, @terminal = @i_terminal, @estado =
@i_estado_procesamiento

(select a.numero_de_terminal,
b.nombre_de_monitoreo,
a.numero_de_recibo,
a.codigo_de_transaccion,
a.fecha_hora_de_transaccion,
a.numero_de_tarjeta,
a.cuenta_debito,
a.monto_1,
c.descripcion_transaccion
from ATMHIS_BOLIVARIANO..MOVIMIENTOS_HIS A,
atm_bolivariano..terminales b,
atm_bolivariano..catalogo_codigos_de_transaccion c
where A.FECHA_HORA_DE_TRANSACCION >= @fecha
and A.NUMERO_DE_TERMINAL = @terminal
and A.FI_ADQUIRENTE = '1007'
and A.STATUS_PROCESAMIENTO = @estado
and A.NUMERO_DE_TERMINAL = B.NUMERO_DE_TERMINAL
and C.CODIGO_INTERNO_TRANSACCION = A.CODIGO_DE_TRANSACCION
and C.CODIGO_SERVICIO = A.TIPO_DE_SERVICIO
and B.TIPO_DE_TERMINAL = 'NC')
UNION
(select a.numero_de_terminal,
b.nombre_de_monitoreo,
a.numero_de_recibo,
a.codigo_de_transaccion,
a.fecha_hora_de_transaccion,
a.numero_de_tarjeta,
a.cuenta_debito,
a.monto_1,
c.descripcion_transaccion
from ATM_BOLIVARIANO..MOVIMIENTOS A,
atm_bolivariano..terminales b,
atm_bolivariano..catalogo_codigos_de_transaccion c
where A.FECHA_HORA_DE_TRANSACCION >= @fecha
and A.NUMERO_DE_TERMINAL = @terminal
and A.FI_ADQUIRENTE = '1007'
and A.STATUS_PROCESAMIENTO = @estado
and A.NUMERO_DE_TERMINAL = B.NUMERO_DE_TERMINAL
and C.CODIGO_INTERNO_TRANSACCION = A.CODIGO_DE_TRANSACCION
and C.CODIGO_SERVICIO = A.TIPO_DE_SERVICIO
and B.TIPO_DE_TERMINAL = 'NC')
ORDER BY a.fecha_hora_de_transaccion

return 0
 

Leer las respuestas

#1 Maxi
15/06/2005 - 01:49 | Informe spam
Hola, vamos por partes dijo Jack ;-)

1.Tengo entendido que el optimizador decide si usa o no los indices que
posee una tabla en base a las estadisticas de los mismos.



Correcto

2. Si yo en mi sp estoy pasando un parametro de input de fecha que luego
lo
utilizo para realizar el select, porque el optimizador no considera el
indice
i_at_fecha como una opción, pero si lo considera como opción con el
artificio
que marco con azul.



Lo estas pasando en formato fecha o en varchar? si lo pasas en fecha no
deberias tener problemas, pero si lo pasas como varchar puede estar haciendo
algun convert :(
Ademas, tienes indices adecuados?

3. porque la primera vez que se ejecuta se demora y se va time-out y las
siguientes veces sea con los mismos parametros u otros se demora
aproximadamente 7 segundos.




Es una caracteristica normal de los Sp's luego de quedar en cache vuelan :-)

pd: Porque no nos pasas el plan de ejeucion de esa cosnulta, asi podemos ver
que esta sucediendo ;)




Email: Maxi.da(arroba)gmail.com
Buenos Aires - Argentina

"Pao" escribió en el mensaje
news:
Por favor su ayuda con esto:

1.Tengo entendido que el optimizador decide si usa o no los indices que
posee una tabla en base a las estadisticas de los mismos.

2. Si yo en mi sp estoy pasando un parametro de input de fecha que luego
lo
utilizo para realizar el select, porque el optimizador no considera el
indice
i_at_fecha como una opción, pero si lo considera como opción con el
artificio
que marco con azul.

3. porque la primera vez que se ejecuta se demora y se va time-out y las
siguientes veces sea con los mismos parametros u otros se demora
aproximadamente 7 segundos.


La tabla movimientos_his tiene varios indices noclustered entre ellos el
indice i_at_fecha

i_at_fecha nonclustered located on PRIMARY FECHA_HORA_DE_TRANSACCION,
NUMERO_DE_TERMINAL, NUMERO_DE_RECIBO, SECUENCIA_DE_TRANSACCION,
CODIGO_DE_TRANSACCION, TIPO_DE_MENSAJE, FI_ADQUIRENTE, TIPO_DE_MOVIMIENTO


create proc sp_consulta_trx_fallidas
(
@i_fecha varchar(10) = '01/01/2999',
@i_terminal varchar(6) = '00000',
@i_estado_procesamiento char(1) = 'S'
)
as
declare @error_var int,
@rowcount_var1 int,
@rowcount_var2 int,
@fecha datetime,
@terminal varchar(6),
@estado char(1)

select @fecha = @i_fecha, @terminal = @i_terminal, @estado > @i_estado_procesamiento

(select a.numero_de_terminal,
b.nombre_de_monitoreo,
a.numero_de_recibo,
a.codigo_de_transaccion,
a.fecha_hora_de_transaccion,
a.numero_de_tarjeta,
a.cuenta_debito,
a.monto_1,
c.descripcion_transaccion
from ATMHIS_BOLIVARIANO..MOVIMIENTOS_HIS A,
atm_bolivariano..terminales b,
atm_bolivariano..catalogo_codigos_de_transaccion c
where A.FECHA_HORA_DE_TRANSACCION >= @fecha
and A.NUMERO_DE_TERMINAL = @terminal
and A.FI_ADQUIRENTE = '1007'
and A.STATUS_PROCESAMIENTO = @estado
and A.NUMERO_DE_TERMINAL = B.NUMERO_DE_TERMINAL
and C.CODIGO_INTERNO_TRANSACCION = A.CODIGO_DE_TRANSACCION
and C.CODIGO_SERVICIO = A.TIPO_DE_SERVICIO
and B.TIPO_DE_TERMINAL = 'NC')
UNION
(select a.numero_de_terminal,
b.nombre_de_monitoreo,
a.numero_de_recibo,
a.codigo_de_transaccion,
a.fecha_hora_de_transaccion,
a.numero_de_tarjeta,
a.cuenta_debito,
a.monto_1,
c.descripcion_transaccion
from ATM_BOLIVARIANO..MOVIMIENTOS A,
atm_bolivariano..terminales b,
atm_bolivariano..catalogo_codigos_de_transaccion c
where A.FECHA_HORA_DE_TRANSACCION >= @fecha
and A.NUMERO_DE_TERMINAL = @terminal
and A.FI_ADQUIRENTE = '1007'
and A.STATUS_PROCESAMIENTO = @estado
and A.NUMERO_DE_TERMINAL = B.NUMERO_DE_TERMINAL
and C.CODIGO_INTERNO_TRANSACCION = A.CODIGO_DE_TRANSACCION
and C.CODIGO_SERVICIO = A.TIPO_DE_SERVICIO
and B.TIPO_DE_TERMINAL = 'NC')
ORDER BY a.fecha_hora_de_transaccion

return 0

Preguntas similares