SQL - Obtener tiempo muerto de una tabla

   
Vista:

Obtener tiempo muerto de una tabla

Publicado por Adrian (1 intervención) el 28/01/2016 17:20:17
Tengo un problema quiero obtener el tiempo muerto de una lista de procesos que se ejecutan con una hora inicio y una hora fin, poder calcular el tiempo que no se ejecuta nada.




with param_fecha as (
SELECT to_date('20160126_180000','YYYYMMDD_HH24MISS') AS FECHA_INICIO FROM DUAL
)
, data_pre as (

select
substr(id, 3,2) modulo,
param_fecha.FECHA_INICIO,
id jobname, ERROR, inicio, fin,

CASE WHEN inicio = 'ND' THEN NULL ELSE to_date(inicio, 'DD MM YYYY HH24:MI:SS') END MIINI,
CASE WHEN B11.fin = 'ND' THEN NULL ELSE to_date(B11.fin, 'DD MM YYYY HH24:MI:SS') END MIFIN,
CASE WHEN inicio = 'ND' OR fin = 'ND' THEN NULL ELSE ROUND((to_date(fin, 'DD MM YYYY HH24:MI:SS') - to_date(inicio, 'DD MM YYYY HH24:MI:SS'))*86400) END segundos,
CASE WHEN ERROR = 'ND' AND INICIO = 'ND' THEN 'ND'
WHEN ERROR = 'SI' AND INICIO = 'ND' THEN 'I'
WHEN ERROR = 'SI' AND INICIO != 'ND' THEN 'E'
WHEN ERROR = 'NO' AND INICIO != 'ND' AND id in ('DELED240P','DETFD111P','DESWD010P_SW10PMIN','DETFD125P','DETFD260P','DETFD280P','DETFD270P') then 'D'
ELSE 'X' end MICLAVE,
case when id in ('DELED240P','DETFD111P','DESWD010P_SW10PMIN','DETFD125P','DETFD260P','DETFD280P','DETFD270P') then 'D' else 'X' end clave,
CASE WHEN TiempoRetrieveTasks = 'ND' THEN 0
ELSE to_number(TiempoRetrieveTasks) END MIPRE,
case when id in ('DELED240P','DETFD111P','DESWD010P_SW10PMIN','DETFD125P','DETFD260P','DETFD280P','DETFD270P') then 'S' else 'N' end critico
from batch_11 B11
, param_fecha

where ERROR != 'ND'
and id in ('DETFD911P', 'DESWD020P_SW20PMIN', 'DEATD010P', 'DEATD015P', 'DEATD035P', 'DEATD040P', 'DEATD050P', 'DEATD075P', 'DEATD080P', 'DEATD085P', 'D520DEFEN03',
'DEATD090P', 'DEATD105P', 'D520DEFR05', 'D520DEFR03', 'D520DEFR01', 'D520DEFR02', 'DECBD060P_CBBMN00600', 'DEATD055P', 'DEATD095P', 'D520DEFR04', 'D520DEFR06',
'DESWD055P', 'DEATD030P', 'DEATD115P', 'DEATD130P', 'DEATD140P', 'DEATD160P', 'DEATD120P', 'DEATD020P', 'GCDC0255P', 'GCDT0008P', 'DETFD910P', 'DEVTD543P',
'D520DEFEN12', 'DECMD060P', 'GCDC0375P', 'DECBD350P_CBBMN03500', 'DECBD141P_CBBMN03500', 'DECBD142P_CBBMN03500', 'DECBD145P', 'DECBD005P', 'DECBD095P',
'DECBD096P', 'GCDC0270P', 'DECBD017P', 'DECBD018P', 'DECBD012P_CBBMN00100', 'DECBD010P', 'DECBD011P_CBBMN00100', 'DECBD013P_CBBMN00100', 'DECBD014P_CBBMN00100',
'DECBD015P_CBBMN00100', 'DECBD035P', 'DECBD025P', 'DECBD016P', 'DECBD405P', 'DECBD150P', 'DECBD410P', 'DECBD080P_CBBMN00800', 'DECBD019P', 'DECBD020P', 'DECBD021P_CBBMN00200',
'DECBD022P_CBBMN00200', 'DECBD023P_CBBMN00200', 'DECBD024P_CBBMN00200', 'DECBD026P_CBBMN00200', 'DECBD027P_CBBMN00200', 'DECBD028P_CBBMN00200', 'DECBD040P', 'DECBD041P_CBBMN00400',
'DECBD042P_CBBMN00400', 'DECBD043P_CBBMN00400', 'DECBD044P_CBBMN00400', 'DECBD046P_CBBMN00400', 'DECBD047P_CBBMN00400', 'DECBD048P_CBBMN00400', 'DECBD050P', 'DECBD051P_CBBMN00500',
'DECBD052P_CBBMN00500', 'DECBD053P_CBBMN00500', 'DECBD054P_CBBMN00500', 'DECBD056P_CBBMN00500', 'DECBD057P_CBBMN00500', 'DECBD058P_CBBMN00500', 'DECBD075P', 'DECBE080P_CBBMN00800',
'DECBD070P_CBBMN00700', 'D520DEFE01', 'D520DEFE02', 'DECTD002P_ACBMN00020', 'DECTD130P_ACBMN01300', 'DECTD140P_ACBMN01400', 'DECTD150P_ACBMN01500', 'DECTD160P_ACBMN01600',
'DECBD600P', 'DECBD6001P', 'DECBD6004P', 'DECBD6002P', 'DECBD6003P', 'DECBD500P', 'DECBD510P', 'DECBD511P', 'DECBD512P', 'DECBD514P', 'DECBD520P', 'DECBD521P', 'DECBD522P',
'DECBD525P', 'DECBD526P', 'DECBD527P', 'DECBD528P', 'DECBD540P', 'DECBD550P', 'DECBD551P', 'DECBD552P', 'DECBD560P', 'DEATE010P', 'DECBD120P', 'DESWD010P_SW10PMIN', 'DELED075P',
'DELED250P', 'DELED215P', 'DELED201P', 'DETFD050P_BIBLC01008', 'DELED240P', 'DETFD111P', 'DETFD125P', 'DETFD260P', 'DETFD265P', 'DETFD280P', 'DETFD990P', 'DECTD001P_ACBMN00010',
'DETFD270P', 'DETFD350P', 'DETFD951P', 'DECTD100P_ACBMN01000', 'DECTD110P_ACBMN01100', 'DECTD120P_ACBMN01200', 'DETFD915P', 'DETFD917P', 'DETFD918P', 'DELED123P', 'DETFD994P',
'DETFD992P', 'DECTD020P', 'DECTD060P_ACBMN00600', 'DECTD070P_ACBMN00700', 'DECBD160P', 'DECMD010P', 'DECMD020P', 'DECMD030P', 'DECMD040P', 'D520DEFRE11', 'D520DEFEN16',
'DECBD143P', 'DECBD144P', 'DECBD161P', 'DECBD6101P', 'DECBD6102P', 'DECBD6103P', 'DECBD6104P', 'DECBD6105P', 'DECBD530P', 'DECBD531P', 'DECBD532P', 'DECBD6199P',
'DECBD205P', 'DESWD011P', 'DESWD050P_', 'DESWD073P', 'DESWD071P', 'DESWD070P_SW70PMIN', 'DESWD080P_SW080PMIN', 'DESWD022P', 'DEVTD980P', 'DEARD030P',
'DEARD040P', 'DELEE010P', 'DECTD010P', 'DEPCD010P'
)
),
data as (
select modulo, FECHA_INICIO, jobname, MIini, MIfin, segundos, MIclave,MIpre,critico,
trunc((( MIini-FECHA_INICIO)*86400)/600)+1 bloques_ini,
trunc( ((MIfin-FECHA_INICIO)*86400)/600)+1 bloques_duracion
from data_pre
)
select modulo, jobname, critico
, CASE WHEN miini IS NULL THEN 'ND' ELSE to_char(miini, 'HH24:MI:SS') END comienzo
, CASE WHEN mifin IS NULL THEN 'ND' ELSE to_char(mifin, 'HH24:MI:SS') END final
, CASE WHEN mifin IS NULL THEN 'ND' ELSE TO_CHAR(SEGUNDOS) END SEGUNDOS
, CASE WHEN mifin IS NULL THEN 'ND' ELSE TO_CHAR(mipre) END MIPRE
, CASE WHEN miini IS NULL THEN 'ND' ELSE

select datediff()

replace(
replace(
case when bloques_ini >1 then rpad('-', bloques_ini-1, '-') end || rpad(miclave, bloques_duracion - bloques_ini +1 , miclave), '-','-'
)
, miclave,miclave || '-'
)
END MIPROGRESO
from data
order by miini, jobname
;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Obtener tiempo muerto de una tabla

Publicado por Isaias (691 intervenciones) el 28/01/2016 18:20:38
¿Tiempo muerto?, bueno, creo saber a lo que te refieres, mi pregunta seria: ¿Has medido el tiempo de respuesta de tu query?

¿Es SQL Server el motor de base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar