RTVDSKINF/PRTDSKINF Addio!

Facciamo un breve riepilogo del funzionamento di questi due comandi:

  • RTVDSKINF è il comando che colleziona le informazioni relative alla spazio disco occupato da oggetti, librerie, … Una volta lanciato occorre aspettare un po’ di tempo per permettere al sistema operativo di estrarre le informazioni ed inoltre è in grado di girare con in input un intero ASP (*SYSBAS oppure IASP)
  • PRTDSKINF provvede a generare uno spoolfile che contiene l’elenco degli oggetti/librerie con indicazione di proprietario, peso, ultimo utilizzo, …

In assenza di qualcosa di più flessibile e dinamico la maggior parte degli amministratori di sistema li hanno utilizzati nel tempo per monitorare l’occupazione dei dischi.

Fortunatamente IBM a partire dalla V7R2 ha arricchito la libreria QSYS2 con funzioni capaci di recuperare informazioni sullo stato di salute del server tra cui la OBJECT_STATISTICS.

Questa UDTF permette di risalire in breve tempo al contenuto di una libreria o ad una parte di essa semplicemente con una query SQL di selezione e quindi permette un controllo più capillare e nettamente più veloce di ciò che succede all’interno delle librerie.

Sintassi

La sintassi per l’utilizzo di questa funzione è la seguente

OBJECT_STATISTICS(nomeLibreria, listaTipiOggetto, nomeOggetto)

In dettaglio i parametri per l’utilizzo di questa UDTF sono:

  • nomeLibreria: può contenere il nome di una libreria presente du disco oppure uno dei seguenti valori speciali (*ALL, *ALLUSR, *ALLUSRAVL, *CURLIB, *LIBL, *USRLIBL)
  • listaTipiOggetto: può contenere uno o più tipi oggetto (anche senza il carattere * davanti) seperati da uno spazio o da una virgola
  • nomeOggetto(opzionale): può contenere il nome di un oggetto

Esempi

Di seguito alcuni esempi di utilizzo:

  • Spazio occupato in bytes da una libreria
SELECT SUM(OBJSIZE) FROM TABLE (QSYS2.OBJECT_STATISTICS('PETRIS','ALL')) T 
  • Lista oggetti di tipo file per proprietario contenuti in una libreria
SELECT OBJNAME, OBJTEXT, OBJOWNER FROM TABLE (QSYS2.OBJECT_STATISTICS('PETRIS','FILE')) T WHERE OBJATTRIBUTE = 'PF' ORDER BY OBJOWNER
  • Lista oggetti non utilizzati presenti nella parte utente della lista librerie del job utilizzati al massimo una volta ordinati per peso decrescente
SELECT * FROM TABLE (QSYS2.OBJECT_STATISTICS('USRLIBL','ALL')) T WHERE  DAYS_USED_COUNT <= 1 ORDER BY OBJSIZE DESC

Per un controllo completo di tutto ciò che è installato sul server è possibile anche creare una tabella da popolare con il contenuto di ogni singola libreria e poi ragionare anche con strumenti di Business Intelligence per creare un cruscotto di controllo del nostro IBMi.

Creiamo una tabella che conterrà tutte le informazioni

CREATE TABLE PETRIS.OBJECTS (                      
   NAME VARCHAR(10) NOT NULL DEFAULT '' ,     
   TYPE VARCHAR(8) NOT NULL DEFAULT '' ,      
   OWNER VARCHAR(10) NOT NULL DEFAULT '' ,     
   CREATOR VARCHAR(10) NOT NULL DEFAULT '' ,     
   CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,  
   SIZE DECIMAL(15, 0) NOT NULL DEFAULT 0 ,             
   TEXT VARCHAR(50) DEFAULT NULL ,            
   SQL_NAME VARCHAR(128) DEFAULT NULL ,           
   USED TIMESTAMP DEFAULT NULL ,                        
   DAYS_USED DECIMAL(10, 0) NOT NULL DEFAULT 0 ,             
   RESET TIMESTAMP DEFAULT NULL ,                        
   ASP_NUMBER DECIMAL(5, 0) NOT NULL DEFAULT 0 ,              
   ATTRIBUTE VARCHAR(10) NOT NULL DEFAULT '' ,     
   SQL_SCHEMA VARCHAR(128) NOT NULL DEFAULT '' ,    
   LIBRARY_TEXT VARCHAR(50) DEFAULT NULL ,            
   SQL_TYPE VARCHAR(9) DEFAULT NULL )           

Poi creiamo un nuovo programma che:

  • pulisca il contenuto della tabella
TRUNCATE TABLE PETRIS.OBJECTS 
  • apra un cursore e faccia inizialmente un loop sulla vista SYSSCHEMAS
SELECT SCHEMA_NAME FROM QSYS2.SYSSCHEMAS

e per ogni libreria letta esegua il popolamento estraendo i dati da OBJECT_STATISTICS

INSERT INTO PETRIS.OBJECTS(SELECT OBJNAME, OBJTYPE, OBJOWNER, OBJDEFINER, OBJCREATED, 
 OBJSIZE, OBJTEXT, OBJLONGNAME, LAST_USED_TIMESTAMP, DAYS_USED_COUNT, LAST_RESET_TIMESTAMP, 
 IASP_NUMBER, OBJATTRIBUTE, OBJLONGSCHEMA, TEXT, SQL_OBJECT_TYPE 
 FROM TABLE(QSYS2.OBJECT_STATISTICS('nomeLibreria','*ALL')))

NB: al limite si può valutare di escludere le librerie di proprietà dell’utente QSYS per evitare di estrarre quelle del sistema operativo (SELECT SCHEMA_NAME FROM QSYS2.SYSSCHEMAS WHERE SCHEMA_OWNER <> ‘QSYS’)

Una volta ottenuta la lista completa degli oggetti è semplice scovare gli oggetti che occupano più spazio, le librerie più pesanti, ecc…

SELECT SQL_SCHEMA, SUM(SIZE) FROM PETRIS.OBJECTS GROUP BY SQL_SCHEMA ORDER BY 2 DESC

Riferimenti

Per ulteriori informazioni è disponibile la documentazione ufficiale IBM (https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzajq/rzajqudfobjectstat.htm)

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

Recent Posts

ACS Access Client Solution 1.1.9.5

I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…

20 ore ago

Tim Rowe and Scott Forstie – Promo video for CEC 2024 – Milan

Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…

21 ore ago

Code for IBM i 2.10.0 – Debug IBM i con Visual Studio Code

Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…

3 giorni ago

ObjectConnect over TCP/IP

A distanza di due anni e mezzo dal mio post Trasferire oggetti con ObjectConnect ed Enterprise Extender, sono finalmente riuscito…

4 giorni ago

SQL: SELECT con i “superpoteri”

Con un piccolo trucco anche una semplice istruzione SELECT può eseguire qualsiasi comando di sistema ! Vediamo come...

5 mesi ago

NetServer per tutti – parte 5

Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer

1 anno ago