Listado de la etiqueta: dba

script para obtener el tamaño de cada tabla e indice en Postgresql

Poder determinar como está compuesto el tamaño de una base de datos es una tarea fundamental en el rol de un DBA. Esto te permite identificar posibles errores de diseño o segmentaciones futuras necesarias.

Acontinuación te dejo un script que suele serme útíl cuando trabajo en motores PostgreSQL. En esta caso si bien lo he usado en su versión 16, también aplica para 17 y 18.

SELECT
    n.nspname AS schema_name,
    c.relname AS table_name,
    CASE
        WHEN c.relkind = 'r' THEN 'Tabla'
        WHEN c.relkind = 'i' THEN 'Índice'
        WHEN c.relkind = 'm' THEN 'Vista Materializada'
        ELSE c.relkind::text
    END AS object_type,
    -- Tamaño total (datos + índices) en Megabytes (MB)
    ROUND((pg_total_relation_size(c.oid) / (1024.0 * 1024.0))::numeric, 2) AS total_size_mb,
    -- Tamaño de la porción de datos o del índice en Megabytes (MB)
    ROUND((pg_relation_size(c.oid) / (1024.0 * 1024.0))::numeric, 2) AS data_or_index_size_mb,
    -- Tamaño de los índices asociados (solo para tablas) en Megabytes (MB)
    CASE
        WHEN c.relkind = 'r' THEN ROUND((pg_indexes_size(c.oid) / (1024.0 * 1024.0))::numeric, 2)
        ELSE NULL
    END AS indexes_size_mb,
    c.reltuples::bigint AS row_count
FROM
    pg_class c
LEFT JOIN
    pg_namespace n ON n.oid = c.relnamespace
WHERE
    n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
    AND c.relkind IN ('r', 'i', 'm')
ORDER BY
    pg_total_relation_size(c.oid) DESC;
columnadescripción
schema_nameEsquema al que pertenece la tabla o índice.
table_nameNombre de la tabla, índice o vista materializada.
object_typeTipo de objeto (‘Tabla’, ‘Índice’, ‘Vista Materializada’).
total_sizeTamaño total de la relación (datos + índices + TOAST). Para índices es su tamaño.
table_or_index_sizeTamaño de la relación sin sus índices. Para índices, es su tamaño.
indexes_sizeTamaño total de los índices asociados (solo aplica y se muestra para tablas).
row_countConteo de filas de la tabla (es una estimación del catálogo).

Con el script adjunto obtendrás una salida similar a esta:

Verificar Backups por TSQL

Verificar que se hayan realizado correctamente los backups es tarea fundamental de un DBA.

Para ello contamos con una serie de tablas provistar por Microsoft SQL Server para almacenar dicha información:

  • msdb.dbo.backupfile
  • msdb.dbo.backupmediafamily
  • msdb.dbo.backupmediaset
  • msdb.dbo.backupset

 

Los siguientes scripts pueden facilitar dicha tarea.

Más adelante trabajaremos con más detalle.

 

Atención:   Si copian y pegan puede que la comilla simple (‘) se convierta a comilla doble («»).

/*******************************************************************************
Último Backup de la Base
******************************************************************************/
SELECT    S.Name AS DB, MAX(B.backup_finish_date) Fecha,DATEDIFF(hh,MAX(B.backup_finish_date),GETDATE()) Antiguedad_HS ,
CASE
  WHEN DATEDIFF(hh , MAX(B.backup_finish_date, GETDATE()) > 24 THENSI’
WHEN MAX(B.backup_finish_dateIS NULL THEN ‘SI’ ELSE »
END AS SinBackupUltimas24hs
FROM sys.sysdatabases S LEFT OUTER JOIN msdb.dbo.backupset B ON B.database_name = S.name
WHERE B.type NOT LIKE ‘L’ AND S.name NOT LIKE  ‘tempdb’
GROUP BY S.Name ORDER BY S.Name

/*******************************************************************************
Ultimo Backup del Log
******************************************************************************/
SELECT S.Name AS DB,MAX(B.backup_finish_date) Fecha ,
CASE WHEN DATEDIFF(hh , MAX(B.backup_finish_date, GETDATE()) > 4 THEN ‘SI’
WHEN MAX(B.backup_finish_dateIS NULL THEN ‘SI’ ELSE »
END AS SinBackupUltimas24hs
FROM sys.sysdatabases S LEFT OUTER JOIN msdb.dbo.backupset B ON B.database_name = S.name
WHERE B.type LIKE ‘L’ AND S.name NOT LIKE ‘tempdb’
GROUP BY S.Name ORDER BY S.Name

/*******************************************************************************
Detalle por Backups de los últimos 7 días
******************************************************************************/
SELECT    database_name as DB, name AS Backup_Name, backup_finish_date AS LastBackup,
CASE [type] WHEN ‘D’ THEN ‘Full’ 
WHEN ‘L’ THEN ‘Log’
WHEN ‘I’ THEN ‘Differential’ ELSE ‘Other’
END AS Tipo_Backup
FROM    msdb.dbo.backupset B
WHERE backup_finish_date DATEADD(dd,-7,GETDATE())
ORDER BY database_name, backup_finish_date desc