Space used/free in ASM Disk Groups taking mirroring into account
He pasado mucho tiempo buscando como obtener el porcentaje espacio libre yusado en los grupos de discos de ASM para poder definir alarmas cuando
el porcentaje del espacio usado llegue a un valor definido.
Muchos, si no es que todos, no toman en cuenta la redundancia de los grupos
de discos.
Es por eso que, al documentarme, consegui el objetivo.
Las siguientes son las consideraciones tomadas en cuenta para la escritura de la consulta:
Columnas de v$asm_diskgroup 11g R2
TYPE
Tipo de redundancia en el grupo de discos:
EXTERNA (EXTERN)
DOBLE (NORMAL)
TRIPLE (HIGH)
TOTAL_MB
Capacidad total del grupo de discos (en megabytes).
FREE_MB
Capacidad del grupo de discos sin utilizar (en megabytes).
REQUIRED_MIRROR_FREE_MB
Cantidad de espacio que se requiere para soportar la redundancia
del grupo de discos en caso de que uno o más discos fallen.
El total de espacio mostrado toma en cuenta el espejeo. Es decir, para
doble redundancia es igual al tamaño de un disco dentro del grupo de discos.
Si la redundancia es triple, este valor es igual a la suma del tamaño
de dos discos dentro del grupo de discos.
Este espacio no puede ser utilizado de forma "directa" para archivos y
de cierta manera se puede decir que es espacio reservado para garantizar
la redundancia de los datos. Por lo tanto, no es considerado como espacio
disponible para archivos.
USABLE_FILE_MB
Cantidad de espacio libre que puede ser utilizado libremente tomando en cuenta
la redundancia. Es decir, el espacio que está disponible para almacenar
archivos de base de datos, entre otros.
La columna USABLE_FILE_MB nos indica el total de espacio libre real que tenemos sin
importar el tipo de redundancia. Es decir, si nos muestra 100mb, entonces, sólo disponemos
de ese espacio libre REAL dentro del grupo de discos.
Tomando en cuenta los puntos anteriores, podemos decir que el espacio total real para
almacenar archivos es (TOTAL_MB-REQUIRED_MIRROR_FREE_MB)/TYPE.
Donde TYPE puede tener valores de 1,2,3 dependiendo de la redundancia configurada.
El espacio libre total en el grupo de discos es igual a USABLE_FILE_MB
El espacio utilizado dentro del grupo de discos es igual a ((TOTAL_MB-REQUIRED_MIRROR_FREE_MB)/TYPE)-USABLE_FILE_MB
Por lo anterior, la consulta para conocer el espacio libre, usado y los respectivos porcentajes es:
select
name
,total_mb
,free_mb
,round(free_mb*100/total_mb) free_pct
,used_mb
,round(used_mb*100/total_mb) used_pct
from (
select
NAME
,round((total_mb-required_mirror_free_mb)/(decode(type,'HIGH',3,'NORMAL',2,1))) total_mb
,(usable_file_mb) free_mb
,round(((total_mb-required_mirror_free_mb)/(decode(type,'HIGH',3,'NORMAL',2,1)))-usable_file_mb) used_mb
from v$asm_diskgroup
)
;
Ejemplo de salida:
NAME TOTAL_MB FREE_MB FREE_PCT USED_MB USED_PCT
-------- ---------- ---------- ---------- ---------- ----------
DATA 2211840 389785 18 1822055 82
RECO 2939040 1113790 38 1825250 62
REDO 127187 94028 74 33159 26
Puedes ejecutar la consulta en ambientes de pruebas.
Referencias: https://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_1023.htm#REFRN30171
Probado en Oracle 11g