jueves, 25 de febrero de 2016

CONOCER LA OCUPACION DE DBSPACES EN INFORMIX POR SQL - Knowing the free space of a Informix Dbspace by SQL

Aunque actualmente existen herramientas como OAT, que nos permiten visualizar graficamente la ocupación de los Dbspaces definidos en nuestra base de datos Informix, es conveniente poder obtener esta información por SQL por si queremos incluir está información en un registro para hacer un seguimiento detallado.

Para obtener información de nuestros Dbspaces, asi como de los Chunks que los forman debemos recurrir a dos tablas de la Base de datos sysmaster:
  • sysdbspaces
  • syschunks
La forma de calcular el espacio que ocupan, asi como el espacio libre varía en función de si es un dbspace  normal, o es un blobspace o es un sbspace.

Lo he resuelto haciendo tres querys unidas por la clausula UNION:

DATABASE sysmaster;
--
-- Dbspace 'normal'
--
SELECT
d.name[1,10] Name,
d.nchunks Chunks,
SUM(k.chksize*2/1024) Total,
SUM(k.nfree*2/1024) Free,
100-(SUM(k.nfree*2/1024)*100)/(SUM(k.chksize*2/1024)) Perc
FROM sysdbspaces d, syschunks k
WHERE d.dbsnum=k.dbsnum
AND d.is_blobspace=0
AND d.is_sbspace=0
GROUP BY 1,2

UNION
--
-- Blobspaces
--
SELECT
d.NAME[1,10] Name,
d.nchunks Chunks,
SUM(k.chksize*2/1024) Total,
SUM(k.nfree*8/1024)Free,
100-(SUM(k.nfree*8/1024)*100)/(SUM(k.chksize*2/1024)) Perc
FROM sysdbspaces d, syschunks k
WHERE d.dbsnum=k.dbsnum
AND d.is_blobspace=1
GROUP BY 1,2

UNION
--
-- Sbspaces
--
SELECT
d.NAME[1,10] Name,
d.nchunks Chunks,
SUM(k.chksize*2/1024) Total,
SUM(k.udfree*2/1024) Free,
100-(SUM(k.udfree*2/1024)*100)/(SUM(k.chksize*2/1024)) Perc
FROM sysdbspaces d, syschunks k
WHERE d.dbsnum=k.dbsnum
AND d.is_sbspace=1
GROUP BY 1,2
ORDER BY 1


El resultado es una tabla como esta:













Hasta la próxima.

1 comentario:

  1. Buenos días,

    Disculpe mi ignorancia pero las columnas FREE Y PERC a que corresponde cada una?

    ResponderEliminar