SELECT JOB_NAME, AUTHORIZATION_NAME, SUBSYSTEM,
ELAPSED_CPU_PERCENTAGE, CPU_TIME, FUNCTION
FROM TABLE(QSYS2.ACTIVE_JOB_INFO())
WHERE JOB_TYPE <> 'SYS'
ORDER BY ELAPSED_CPU_PERCENTAGE DESC
FETCH FIRST 15 ROWS ONLY
Si lancia due volte. ELAPSED_CPU_PERCENTAGE è la percentuale di CPU nell'intervallo di
misura, e IBM dice che la prima chiamata di ACTIVE_JOB_INFO in una connessione azzera
sempre le statistiche: la prima volta l'intervallo è appena cominciato e le percentuali non
dicono niente. Si aspetta qualche secondo e si rilancia la stessa query, nella stessa
sessione di Run SQL Scripts: la seconda dice chi ha consumato nel frattempo, cioè chi sta
consumando adesso. CPU_TIME invece è il totale dall'inizio del job.
Per guardare un solo sottosistema:
SELECT JOB_NAME, ELAPSED_CPU_PERCENTAGE, FUNCTION
FROM TABLE(QSYS2.ACTIVE_JOB_INFO(SUBSYSTEM_LIST_FILTER => 'QBATCH'))
ORDER BY ELAPSED_CPU_PERCENTAGE DESC
Cambiare il filtro azzera di nuovo le statistiche: anche qui, la seconda esecuzione è quella che conta.
Esempio: «ieri alle tre era lentissimo»
WRKACTJOB mostra adesso; il problema era ieri. Un job schedulato ogni cinque minuti che
scrive i primi cinque consumatori lascia la traccia. La tabella si crea dalla query stessa,
così nomi e tipi delle colonne li decide il servizio:
CREATE TABLE MIALIB/STORCPU AS (
SELECT CURRENT TIMESTAMP AS RILEVATO, JOB_NAME,
AUTHORIZATION_NAME, ELAPSED_CPU_PERCENTAGE, FUNCTION
FROM TABLE(QSYS2.ACTIVE_JOB_INFO())
) WITH NO DATA
Poi il CL da schedulare. Per la stessa ragione di sopra fa due letture nello stesso job: la prima fissa l'inizio dell'intervallo, la seconda, un minuto dopo, misura:
RUNSQL SQL('CREATE TABLE QTEMP/INIZIO AS +
(SELECT JOB_NAME FROM TABLE(QSYS2.ACTIVE_JOB_INFO())) +
WITH NO DATA') COMMIT(*NONE)
DLYJOB DLY(60)
RUNSQL SQL('INSERT INTO MIALIB/STORCPU +
SELECT CURRENT TIMESTAMP AS RILEVATO, JOB_NAME, +
AUTHORIZATION_NAME, ELAPSED_CPU_PERCENTAGE, FUNCTION +
FROM TABLE(QSYS2.ACTIVE_JOB_INFO()) +
WHERE JOB_TYPE <> ''SYS'' +
ORDER BY ELAPSED_CPU_PERCENTAGE DESC +
FETCH FIRST 5 ROWS ONLY') COMMIT(*NONE)
Il giorno dopo:
SELECT * FROM MIALIB/STORCPU
WHERE RILEVATO BETWEEN '2026-08-25-14.30.00' AND '2026-08-25-15.30.00'
ORDER BY RILEVATO, ELAPSED_CPU_PERCENTAGE DESC
Date e orari sono un esempio.
Suggerimento
la colonna FUNCTION dice a che punto è il job: quale programma o quale
comando sta eseguendo. Su un job fermo è spesso l'informazione che serve.
Rilasci. I parametri con nome di QSYS2.ACTIVE_JOB_INFO sono arrivati nel tempo. Se la
chiamata con SUBSYSTEM_LIST_FILTER viene rifiutata, si esegue la funzione senza parametri e
si filtra su SUBSYSTEM nel WHERE.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati