Tablespace size

Massimiliano Valli

Tablespace size
Ciao, Qualcuno è a conoscenza di un metodo per calcolare lo spazio occupato da un tablespace interrogando le tabelle di catalogo?Ultimamente ci capita che alcuni ts (segmented) arrivino ad occupare tutti i 64 gb a loro disposizione.Vorremo essere proattivi in merito e non dover agire solo quando non è più possibile utilizzare l'oggetto in questione. Qualche suggerimento? Grazie!!!
-------------------------------------------------------
Massimiliano Valli
Bper Services S.p.a.
Servizio Tecnologie ICT
Ufficio Sistemi Accentrati - Sistemisti Host
Via Aristotele, 195 - 41100 Modena - ITALIA
Tel 059-2901483
E-mail [login to unmask email]
-------------------------------------------------------

********* Avvertenze Legali - Internet Email Confidentiality Footer *********
Le informazioni contenute in questo messaggio di posta elettronica ed in ogni eventuale allegato sono riservate e confidenziali e ne e' vietata la diffusione, in qualunque modo eseguita. Qualora Lei non fosse la persona cui il presente messaggio e' destinato, La invitiamo ad eliminarlo e a non leggerlo, dandocene gentilmente comunicazione.
----------------------------------------------
The information contained in this e-mail and any attachments are confidential and may also be privileged. If you are not named recipient, please notify the sender immediately and do not disclose the contents to another person, use it for any purpose, or store or copy the information in any medium.

Andrea Luosi

R: Tablespace size
(in response to Massimiliano Valli)
Ciao Massimiliano noi utilizziamo le Real-Time Statistic per questo tipo di report.
Le colonne SPACE e NACTIVE ti permettono di avere le informazioni sulla allocazione e sullo spazio effettivamente utilizzato.
Saluti

Andrea Luosi

Cedacri S.p.A.

Area Tecnologie - Ufficio Tecnologie Database

Tel.: 0521/807.358

Fax: 0521/807.969

e-mail: [login to unmask email]<mailto:[login to unmask email]>

www.cedacri.ithttp://www.cedacri.it



Da: Massimiliano Valli [mailto:[login to unmask email]
Inviato: martedì 23 agosto 2016 16:32
A: [login to unmask email]
Oggetto: [DB2UGITALY] - Tablespace size

Ciao,

Qualcuno è a conoscenza di un metodo per calcolare lo spazio occupato da un tablespace interrogando le tabelle di catalogo?
Ultimamente ci capita che alcuni ts (segmented) arrivino ad occupare tutti i 64 gb a loro disposizione.
Vorremo essere proattivi in merito e non dover agire solo quando non è più possibile utilizzare l'oggetto in questione.

Qualche suggerimento?

Grazie!!!
-------------------------------------------------------
Massimiliano Valli
Bper Services S.p.a.
Servizio Tecnologie ICT
Ufficio Sistemi Accentrati - Sistemisti Host
Via Aristotele, 195 - 41100 Modena - ITALIA
Tel 059-2901483
E-mail [login to unmask email]<mailto:[login to unmask email]>
-------------------------------------------------------

********* Avvertenze Legali - Internet Email Confidentiality Footer *********
Le informazioni contenute in questo messaggio di posta elettronica ed in ogni eventuale allegato sono riservate e confidenziali e ne e' vietata la diffusione, in qualunque modo eseguita. Qualora Lei non fosse la persona cui il presente messaggio e' destinato, La invitiamo ad eliminarlo e a non leggerlo, dandocene gentilmente comunicazione.
----------------------------------------------
The information contained in this e-mail and any attachments are confidential and may also be privileged. If you are not named recipient, please notify the sender immediately and do not disclose the contents to another person, use it for any purpose, or store or copy the information in any medium.

-----End Original Message-----
Il contenuto e le informazioni di questo messaggio di posta elettronica sono riservate, confidenziali e non vincolanti nè impegnative per Cedacri s.p.a., ne è vietata pertanto la diffusione o divulgazione in qualunque modo eseguita. Qualora Lei non fosse la persona a cui il presente messaggio è destinato La invitiamo ad eliminarlo e a non leggerlo, dandocene gentilmente comunicazione. The content, informations and any attachments of this e-mail are classified, confidential and not binding neither impegnative for Cedacri S.P.A., the spread or spreading in any executed way is prohibited therefore. If you are not named recipient, please notify the sender immediately and do not disclose the contents to another person, use it for any purpose, or store or copy the information in any medium.

Giacomo Restuccia

R: Tablespace size
(in response to Massimiliano Valli)
Le query sottostanti sembrano proprio funzionare e dovrebbero essere in linea con le tue esigenze. Ciao

Giacomo

--To get the details of Tablespaces whose Used Pages percentage crossed 80.

-------------------------------------------------------------------------



SELECT

SUBSTR(SPCRPT.DBNAME,1,8) AS DBNAME

,SUBSTR(SPCRPT.NAME,1,10) AS TSNAME

,SUBSTR(CHAR(SPCRPT.PART),1,4) AS PART

,SUBSTR(CHAR(SPCRPT.TROW),1,10) AS TOT_ROWS

,SUBSTR(CHAR(SPCRPT.EXTENTS),1,4) AS EXTENTS

,SUBSTR(CHAR(SPCRPT.ALLOC_SPACE_INKB),1,10) AS ALLOC_SPC_INKB

,SUBSTR(CHAR(SPCRPT.MAX_SPACE_INKB),1,10) AS MAX_SPC_INKB

,SUBSTR(CHAR(SPCRPT.ALLOC_SPACE_INPAGES),1,10) AS ALLOC_SPC_INPAGES

,SUBSTR(CHAR(SPCRPT.MAX_SPACE_INKB/SPCRPT.PGSIZE),1,10) AS MAX_SPC_INPAGES

,SUBSTR(CHAR(ROUND((SPCRPT.ALLOC_SPACE_INPAGES*100)/

((SPCRPT.MAX_SPACE_INKB/

(SPCRPT.PGSIZE-((SPCRPT.PGSIZE*SPCRPT.PCTFREE)/100)))

-SPCRPT.FREEPAGE),2)),1,4) AS USED_PAGES_PERC

,SUBSTR(CHAR(SPCRPT.ALLOC_SPACE_INTRACKS),1,8) AS ALLOC_SPC_INTRKS

,SUBSTR(CHAR(SPCRPT.MAX_SPACE_INTRACKS),1,8) AS MAX_SPC_INTRKS

,SUBSTR(CHAR(ROUND((SPCRPT.ALLOC_SPACE_INTRACKS*100)

/MAX_SPACE_INTRACKS,2)),1,4) AS USED_TRACKS_PERC

FROM(

SELECT

STATS.DBNAME

,STATS.NAME

,CASE WHEN STATS.PARTITION IS NULL THEN -1

ELSE STATS.PARTITION

END AS PART

,CASE WHEN STATS.TOTALROWS IS NULL THEN -1

ELSE STATS.TOTALROWS

END AS TROW

,CASE WHEN STATS.EXTENTS IS NULL THEN -1

ELSE STATS.EXTENTS

END AS EXTENTS

,CASE WHEN STATS.SPACE IS NULL THEN -1

ELSE STATS.SPACE

END AS ALLOC_SPACE_INKB

,(STATS.SPACE/48) AS ALLOC_SPACE_INTRACKS

,CASE WHEN STATS.NACTIVE IS NULL THEN -1

ELSE STATS.NACTIVE

END AS ALLOC_SPACE_INPAGES

,TS.PGSIZE

,TP.FREEPAGE

,TP.PCTFREE

,(CASE

WHEN SUBSTR(TS.DSSIZE,1,1) IN (0,2,3,4,8) AND TS.TYPE=' ' THEN CEILING((64*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,2)=16 AND TS.TYPE=' ' THEN CEILING((64*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,1)=2 THEN CEILING((2*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,1)=3 THEN CEILING((32*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,1)=4 THEN CEILING((4*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,1)=6 THEN CEILING((64*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,1)=8 THEN CEILING((8*1024*1024)/48)

WHEN SUBSTR(TS.DSSIZE,1,2)=16 THEN CEILING((16*1024*1024)/48)

ELSE CEILING((4*1024*1024)/48)

END) AS MAX_SPACE_INTRACKS

,(CASE TS.DSSIZE

WHEN 0 THEN

CASE WHEN TS.TYPE = 'G' THEN 4194304

WHEN TS.TYPE = 'L' THEN 4194304

WHEN TS.TYPE = 'O' THEN 4194304

WHEN TS.TYPE = 'P' THEN 4194304

WHEN TS.TYPE = 'R' THEN 4194304

WHEN TS.TYPE = ' ' THEN 67108864

ELSE

CASE WHEN TS.PARTITIONS > 254 THEN

CASE WHEN TS.PGSIZE = 4 THEN 4194304

WHEN TS.PGSIZE = 8 THEN 8388608

WHEN TS.PGSIZE = 16 THEN 16777216

WHEN TS.PGSIZE = 32 THEN 33554432

ELSE NULL

END

WHEN TS.PARTITIONS > 64 THEN 4194304

WHEN TS.PARTITIONS > 32 THEN 1048576

WHEN TS.PARTITIONS > 16 THEN 2097152

WHEN TS.PARTITIONS > 0 THEN 4194304

ELSE 2097152

END

END

ELSE TS.DSSIZE

END) AS MAX_SPACE_INKB

FROM SYSIBM.SYSTABLESPACESTATS STATS

INNER JOIN

SYSIBM.SYSTABLESPACE TS

ON STATS.DBNAME = TS.DBNAME AND

STATS.NAME = TS.NAME

INNER JOIN

SYSIBM.SYSTABLEPART TP

ON STATS.DBNAME = TP.DBNAME AND

STATS.NAME = TP.TSNAME AND

STATS.PARTITION = TP.PARTITION

) AS SPCRPT

WHERE DECIMAL((SPCRPT.ALLOC_SPACE_INPAGES*100)/((SPCRPT.MAX_SPACE_INKB/(SPCRPT.PGSIZE-((SPCRPT.PGSIZE*5)/100)))-SPCRPT.FREEPAGE),4,2) > 80

ORDER BY 1, 2, 3

WITH UR;





--To get the details of Indexes whose Used Pages percentage crossed 80.

-----------------------------------------------------------------------



SELECT

SPCRPT.DBNAME

,SPCRPT.NAME

,SPCRPT.PARTITION

,SPCRPT.TOTALENTRIES

,SPCRPT.EXTENTS

,SPCRPT.ALLOC_SPACE_INKB

,SPCRPT.MAX_SPACE_INKB

,SPCRPT.ALLOC_SPACE_INPAGES

,(SPCRPT.MAX_SPACE_INKB/SPCRPT.PAGE_SIZE) AS MAX_SPACE_INPAGES

,DECIMAL((SPCRPT.ALLOC_SPACE_INPAGES*100)/((SPCRPT.MAX_SPACE_INKB/(SPCRPT.PAGE_SIZE-((SPCRPT.PAGE_SIZE*10)/100)))-SPCRPT.FREEPAGE),6,2) AS USED_PAGES_PERC

,SPCRPT.ALLOC_SPACE_INTRACKS, (SPCRPT.MAX_SPACE_INKB/48) AS MAX_SPACE_INTRACKS

FROM(

SELECT

STATS.DBNAME, STATS.NAME, STATS.PARTITION, STATS.TOTALENTRIES, STATS.EXTENTS,

STATS.SPACE AS ALLOC_SPACE_INKB, (STATS.SPACE/48) AS ALLOC_SPACE_INTRACKS,

STATS.NACTIVE AS ALLOC_SPACE_INPAGES, IX.PGSIZE, IP.FREEPAGE,

CASE

WHEN IX.PIECESIZE=0 THEN MIN(TS.DSSIZE,4294967296/(MIN(4096,4294967296/(TS.DSSIZE/TS.PGSIZE)))*IX.PGSIZE)

WHEN IX.PIECESIZE<>0 THEN 32*IX.PIECESIZE

ELSE IX.PIECESIZE

END AS MAX_SPACE_INKB,

CASE

WHEN IX.PGSIZE=4096 THEN 4

ELSE IX.PGSIZE

END AS PAGE_SIZE

FROM SYSIBM.SYSINDEXSPACESTATS STATS

INNER JOIN

SYSIBM.SYSINDEXES IX ON

STATS.DBNAME = IX.DBNAME AND

STATS.NAME = IX.NAME

INNER JOIN

SYSIBM.SYSINDEXPART IP ON

STATS.DBNAME = IP.IXCREATOR AND

STATS.NAME = IP.IXNAME AND

STATS.PARTITION = IP.PARTITION

INNER JOIN

SYSIBM.SYSTABLESPACE TS ON

STATS.DBNAME = TS.DBNAME AND

STATS.PSID = TS.PSID

) AS SPCRPT

WHERE DECIMAL((SPCRPT.ALLOC_SPACE_INPAGES*100)/((SPCRPT.MAX_SPACE_INKB/(SPCRPT.PAGE_SIZE-((SPCRPT.PAGE_SIZE*10)/100)))-SPCRPT.FREEPAGE),6,2) > 80

ORDER BY 1, 2, 3

WITH UR;



--To get the Storage details of all Tablespaces, grouped by Database.

---------------------------------------------------------------------



SELECT

SPCRPT.DBNAME

,SUM(SPCRPT.USED_SPACE_INMB) AS USED_SPACE_ALLTS_MEGABYTES

,SUM(SPCRPT.ALLOC_SPACE_INMB) AS ALLOC_SPACE_ALLTS_MEGABYTES

,SUM(SPCRPT.TOTAL_AVAIL_SPACE_INGB) AS MAX_SPACE_ALLTS_GROW_GIGABYTES

FROM(

SELECT

STATS.DBNAME

,((STATS.DATASIZE/1024)/1024) AS USED_SPACE_INMB

,(STATS.SPACE/1024) AS ALLOC_SPACE_INMB

,((CASE TS.DSSIZE

WHEN 0 THEN

CASE WHEN TS.TYPE = 'G' THEN 4194304

WHEN TS.TYPE = 'L' THEN 4194304

WHEN TS.TYPE = 'O' THEN 4194304

WHEN TS.TYPE = 'P' THEN 4194304

WHEN TS.TYPE = 'R' THEN 4194304

WHEN TS.TYPE = ' ' THEN 67108864

ELSE

CASE WHEN TS.PARTITIONS > 254 THEN

CASE WHEN TS.PGSIZE = 4 THEN 4194304

WHEN TS.PGSIZE = 8 THEN 8388608

WHEN TS.PGSIZE = 16 THEN 16777216

WHEN TS.PGSIZE = 32 THEN 33554432

ELSE NULL

END

WHEN TS.PARTITIONS > 64 THEN 4194304

WHEN TS.PARTITIONS > 32 THEN 1048576

WHEN TS.PARTITIONS > 16 THEN 2097152

WHEN TS.PARTITIONS > 0 THEN 4194304

ELSE 2097152

END

END

ELSE TS.DSSIZE

END)/1024)/1024 AS TOTAL_AVAIL_SPACE_INGB

FROM SYSIBM.SYSTABLESPACESTATS STATS

INNER JOIN

SYSIBM.SYSTABLESPACE TS

ON STATS.DBNAME = TS.DBNAME AND

STATS.NAME = TS.NAME

) AS SPCRPT

GROUP BY SPCRPT.DBNAME

WITH UR;



-- To get the Storage details of all Indexes, grouped by Database.

------------------------------------------------------------------



SELECT

SPCRPT.DBNAME

,SUM(SPCRPT.ALLOC_SPACE_INMB) AS ALLOC_SPACE_ALLTS_MEGABYTES

,SUM(SPCRPT.TOTAL_AVAIL_SPACE_INMB) AS MAX_SPACE_ALLTS_GROW_MEGABYTES

FROM(

SELECT

STATS.DBNAME

,(STATS.SPACE/1024) AS ALLOC_SPACE_INMB

,(CASE

WHEN IX.PIECESIZE=0 THEN MIN(TS.DSSIZE,4294967296/(MIN(4096,4294967296/(TS.DSSIZE/TS.PGSIZE)))*IX.PGSIZE)

WHEN IX.PIECESIZE<>0 THEN 32*IX.PIECESIZE

ELSE IX.PIECESIZE

END)/1024 AS TOTAL_AVAIL_SPACE_INMB

FROM SYSIBM.SYSINDEXSPACESTATS STATS

INNER JOIN

SYSIBM.SYSINDEXES IX ON

STATS.DBNAME = IX.DBNAME AND

STATS.NAME = IX.NAME

INNER JOIN

SYSIBM.SYSTABLESPACE TS ON

STATS.DBNAME = TS.DBNAME AND

STATS.PSID = TS.PSID

) AS SPCRPT

GROUP BY SPCRPT.DBNAME

WITH UR;





Da: Massimiliano Valli [mailto:[login to unmask email]
Inviato: martedì 23 agosto 2016 16:32
A: [login to unmask email]
Oggetto: [DB2UGITALY] - Tablespace size



Ciao,



Qualcuno è a conoscenza di un metodo per calcolare lo spazio occupato da un tablespace interrogando le tabelle di catalogo?

Ultimamente ci capita che alcuni ts (segmented) arrivino ad occupare tutti i 64 gb a loro disposizione.

Vorremo essere proattivi in merito e non dover agire solo quando non è più possibile utilizzare l'oggetto in questione.



Qualche suggerimento?



Grazie!!!

-------------------------------------------------------
Massimiliano Valli
Bper Services S.p.a.
Servizio Tecnologie ICT
Ufficio Sistemi Accentrati - Sistemisti Host
Via Aristotele, 195 - 41100 Modena - ITALIA
Tel 059-2901483
E-mail [login to unmask email]
-------------------------------------------------------


********* Avvertenze Legali - Internet Email Confidentiality Footer *********
Le informazioni contenute in questo messaggio di posta elettronica ed in ogni eventuale allegato sono riservate e confidenziali e ne e' vietata la diffusione, in qualunque modo eseguita. Qualora Lei non fosse la persona cui il presente messaggio e' destinato, La invitiamo ad eliminarlo e a non leggerlo, dandocene gentilmente comunicazione.
----------------------------------------------
The information contained in this e-mail and any attachments are confidential and may also be privileged. If you are not named recipient, please notify the sender immediately and do not disclose the contents to another person, use it for any purpose, or store or copy the information in any medium.



-----End Original Message-----

Massimiliano Valli

RE: R: Tablespace size
(in response to Giacomo Restuccia)

Ciao,

 

sto provando la seguente query,

 

SELECT
SPCRPT.DBNAME,
SPCRPT.NAME
,SUM(SPCRPT.USED_SPACE_INMB) AS USED_SPACE_ALLTS_MEGABYTES
,SUM(SPCRPT.ALLOC_SPACE_INMB) AS ALLOC_SPACE_ALLTS_MEGABYTES
,SUM(SPCRPT.TOTAL_AVAIL_SPACE_INGB)
AS MAX_SPACE_ALLTS_GROW_GIGABYTES
FROM(
SELECT
STATS.DBNAME,
STATS.NAME,
TS.PARTITIONS AS PARTIZIONI
,((STATS.DATASIZE/1024)/1024) AS USED_SPACE_INMB
,(DECIMAL(STATS.SPACE, 19, 0)/1024) AS ALLOC_SPACE_INMB
,((CASE TS.DSSIZE
WHEN 0 THEN
CASE WHEN TS.TYPE = ' ' THEN 67108864
ELSE
CASE WHEN TS.TYPE = 'G' THEN (4194304 * TS.MAXPARTITIONS)
WHEN TS.TYPE = 'L' THEN TS.DSSIZE * TS.PARTITIONS
WHEN TS.TYPE = 'R' THEN (4194304 * TS.MAXPARTITIONS)
WHEN TS.TYPE = 'O' THEN 275683213312

END
END
ELSE TS.DSSIZE
END)/1024)/1024 AS TOTAL_AVAIL_SPACE_INGB
FROM SYSIBM.SYSTABLESPACESTATS STATS
INNER JOIN
SYSIBM.SYSTABLESPACE TS
ON STATS.DBNAME = TS.DBNAME AND
STATS.DBNAME LIKE '____DB__' AND
STATS.NAME = TS.NAME AND
STATS.NAME LIKE '__TS____'
) AS SPCRPT
GROUP BY SPCRPT.DBNAME, SPCRPT.NAME
WITH UR;

 

Il problema è nel massimo spazio raggiungibile nei tablespace partizionarti (PBG, PBR, vecchi partizionati).

Nella query sarebbe il valore MAX_SPACE_ALLTS_GROW_GIGABYTES. 

Ritorna sempre 64 gb, ma non è sempre corretto. Ok per i segmented, ma per i PBG, per esempio, dovrebbe darmi il valore ottentuto dal DSSIZE*MAXPARTITIONS. 

Provandola non funziona cosi...