jueves, 23 de diciembre de 2021

Oracle Autonomous Database - Calculando el espacio utilizado



Cuando usamos una base de datos autónoma Oracle en OCI, y mas aún cuando lo hacemos con una cuenta Always Free, es importante saber cual es el espacio utilizado y cuanto espacio disponible nos queda en nuestra base de datos.

La forma mas sencilla de saber cuanto espacio se utiliza es mediante la Consola de Servicio (Service Console) disponible en OCI, a la cual podemos acceder desde la página principal de nuestra base de datos autónoma, como vemos a continuación:




Una vez que accedemos a la consola, solo tenemos que expandir la opción de almacenamiento utilizado (Storage used) para saber no solo que capacidad de almacenamiento ya fue asignada (Storage Allocated), sino también que porcentaje del mismo ha sido utilizado:


Esta información nos sirve para saber los totales generales, pero a continuación veremos algunos scripts para desglosar en detalle como se encuentra asignado y utilizado este espacio.

¿Qué Esquemas Usan el Espacio?

Para saber que esquemas son los que usan mas espacio, podemos usar esta sencilla query:

SELECT ownerSUM(bytes)/1024/1024/1024 AS GB_Usados FROM dba_segments GROUP BY owner ORDER BY GB_Usados DESC;
En nuestro caso, vemos los resultados de la misma, donde aparece un esquema "SSB" con mas de 160 Gb de datos, lo cual no coincide con lo que vimos anteriormente:




A no preocuparse! Este esquema forma parte de los esquemas de ejemplo de Oracle, y se encuentra en un tablespace de solo lectura llamado "SAMPLESCHEMA", compartido entre todas las bases de datos de la instancia, y no es tenido en cuenta al calcular el espacio de la base de datos.

Si ejecutamos la siguiente query descartando los objetos del esquema "SAMPLESCHEMA" podemos confirmar que el espacio realmente utilizado por nuestros datos coincide con lo que vemos en la consola:

SELECT SUM (bytes)/1024/1024/1024 as GB_Usados FROM dba_segments WHERE tablespace_name <> 'SAMPLESCHEMA';



Si queremos saber que objetos en particular son los que mas espacio consumen, podemos usar la siguiente query (sin olvidarse de excluir el tablespace con los ejemplos):

SELECT owner, segment_name, SUM(bytes)/1024/1024/1024 AS GB_Usados 
FROM dba_segments 
WHERE tablespace_name <> 'SAMPLESCHEMA'
GROUP BY owner, segment_name 
ORDER BY GB_Usados DESC;



¿Qué otras cosas consumen espacio?

En las bases de datos autónomas, no solo los tablespaces consumen espacio. Los archivos en el filesystem también cuentan en el espacio total. Para saber que archivos podemos estar teniendo, debemos validar los distintos directorios definidos en nuestra base de datos autónoma. Podemos ver que directorios están definidos con el siguiente script:

SELECT directory_name FROM dba_directories WHERE origin_con_id != 1;



Una vez que sabemos que directorios posee nuestra base de datos, podemos consultar los archivos que existen en los mismos, su tamaño y cuando fueron creados:

SELECT 'DATA_PUMP_DIR' AS Dir, object_name, created, bytes/1024/1024/1024 AS GB_Usados FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR'
UNION ALL
SELECT 'SQL_TCB_DIR'object_name, created, bytes/1024/1024/1024 AS GB_Usados FROM DBMS_CLOUD.LIST_FILES('SQL_TCB_DIR'
ORDER BY GB_Usados DESC;


¿Cuanto espacio tenemos Asignado?

Para saber el espacio total asignado a cada tablespace, podemos usar la siguiente query, la cual nos devuelve el espacio asignado a cada tablespace y el espacio asignado en total:

SELECT tablespace_name, GB_Asignados, SUM (GB_Asignados) OVER() as TotalGB 
FROM
(   SELECT tablespace_name, SUM (bytes)/1024/1024/1024 as GB_Asignados 
    FROM dba_data_files WHERE tablespace_name <> 'SAMPLESCHEMA'
    GROUP BY tablespace_name
    UNION ALL
    SELECT tablespace_name, SUM (bytes)/1024/1024/1024 as GB_Asignados 
    FROM dba_temp_files
    GROUP BY tablespace_name
)
ORDER BY GB_Asignados DESC;
El resultado de la misma coincide con lo mostrado en la consola, como podemos ver a continuación


El tablespace "DBFS_DATA" no es mas que una representación de los datos almacenados en el file system, los cuales consultamos anteriormente en la sección "¿Qué otras cosas consumen espacio?". En la misma vimos como obtener la información directamente desde el file system, pero podemos hacer lo mismo filtrando por el tablespace "DBFS_DATA".



De esta manera podemos controlar el espacio asignado y utilizado por nuestra base de datos autónoma, y llegado el caso tomar acciones para liberar espacio de ser requerido.

No hay comentarios.:

Publicar un comentario