← maurobernal.com.ar

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

Tags

tsql (27)mssql (26)sql (20)devops (20)dotnet (18)docker (15)performance (14)contenedores (11)dotnet10 (10)linux (9)csharp (8)microservicios (7)angular (7)angular21 (7)sql server (6)issabel (6)docker-compose (6)typescript (6)mysql (5).NET (5)