Contenido del curso
Contenido del curso
José Bernardo Navas Pleitez
Rubens A. Rangel Gomez
Comparto el script de salud de TiendaLatam y resultados de aplicarlas
PRINT '==== FILAS POR TABLA ====';
SELECT
t.name AS Tabla,
SUM(p.rows) AS TotalFilas
FROM sys.tables t
INNER JOIN sys.partitions p
ON t.object_id = p.object_id
WHERE p.index_id IN (0,1)
GROUP BY t.name
ORDER BY TotalFilas DESC;
-- 2. ¿Cuántos índices hay por tabla?
PRINT '==== INDICES POR TABLA ====';
SELECT
t.name AS Tabla,
COUNT(i.index_id) AS CantidadIndices
FROM sys.tables t
INNER JOIN sys.indexes i
ON t.object_id = i.object_id
WHERE i.type > 0
GROUP BY t.name
ORDER BY CantidadIndices DESC;
-- 3. Índices que NO se han usado desde que arrancó SQL Server
PRINT '==== INDICES NO UTILIZADOS ====';
SELECT
OBJECT_NAME(i.object_id) AS Tabla,
i.name AS Indice,
i.type_desc AS TipoIndice
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s
ON i.object_id = s.object_id
AND i.index_id = s.index_id
AND s.database_id = DB_ID()
WHERE OBJECTPROPERTY(i.object_id, 'IsUserTable') = 1
AND i.index_id > 0
AND s.index_id IS NULL
ORDER BY Tabla, Indice;
AuditoriaClientes PK__Auditori__095694E3A22A79AD CLUSTERED
AuditoriaPedidos PK__Auditori__095694E373DCAA96 CLUSTERED
Categorias PK_Categorias CLUSTERED
Clientes IX_Clientes_FechaRegistro NONCLUSTERED
Clientes IX_Clientes_PaisID NONCLUSTERED
Clientes IX_Clientes_TipoClienteID NONCLUSTERED
Clientes PK_Clientes CLUSTERED
DetallePedidos IX_DetallePedidos_PedidoID NONCLUSTERED
DetallePedidos IX_DetallePedidos_ProductoID NONCLUSTERED
DetallePedidos PK_DetallePedidos CLUSTERED
Empleados IX_Empleados_SucursalID NONCLUSTERED
Empleados PK_Empleados CLUSTERED
LogCierres PK__LogCierr__5E5499A8C9016A86 CLUSTERED
Paises IX_Paises_PaisID NONCLUSTERED
Paises IX_Paises_PaisID_NombrePais NONCLUSTERED
Paises PK_Paises CLUSTERED
Paises UQ_Paises_Codigo NONCLUSTERED
Pedidos IX_Pedidos_ClienteID NONCLUSTERED
Pedidos IX_Pedidos_ClienteID_Total NONCLUSTERED
Pedidos IX_Pedidos_EmpleadoID NONCLUSTERED
Pedidos IX_Pedidos_Estado NONCLUSTERED
Pedidos IX_Pedidos_Estado_Cliente NONCLUSTERED
Pedidos IX_Pedidos_Fecha_Estado NONCLUSTERED
Pedidos IX_Pedidos_FechaPedido NONCLUSTERED
Pedidos IX_Pedidos_SucursalID NONCLUSTERED
Pedidos PK_Pedidos CLUSTERED
Productos IX_Productos_CategoriaID NONCLUSTERED
Productos PK_Productos CLUSTERED
Productos UQ_Productos_Codigo NONCLUSTERED
ResumenMensual PK__ResumenM__031582A517456DFF CLUSTERED
ResumenMensual UQ_ResumenMensual NONCLUSTERED
Sucursales IX_Sucursales_PaisID NONCLUSTERED
Sucursales PK_Sucursales CLUSTERED
sysdiagrams PK__sysdiagr__C2B05B6139632807 CLUSTERED
sysdiagrams UK_principal_name NONCLUSTERED
TiposCliente PK_TiposCliente CLUSTERED
-- 4. Sesiones activas con queries en ejecución
PRINT '==== SESIONES ACTIVAS ====';
SELECT
s.session_id,
s.login_name,
s.host_name,
s.program_name,
r.status,
r.command,
r.cpu_time,
r.total_elapsed_time,
t.text AS QueryEjecutandose
FROM sys.dm_exec_sessions s
INNER JOIN sys.dm_exec_requests r
ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE s.is_user_process = 1
ORDER BY r.total_elapsed_time DESC;
Conocer la estructura interna de una base de datos es esencial antes de administrarla o modificarla. Utilizando Information Schema se puede consultar de manera estándar tablas, columnas y restricciones, lo que facilita portabilidad entre distintos motores de base de datos. En SQL Server, las vistas de sistema (sys.tables, sys.columns, etc.) ofrecen información más detallada, incluyendo tamaño de tablas, cantidad de filas y relaciones de llaves foráneas. Además, las DMVs permiten monitorear el rendimiento en tiempo real, identificar índices poco usados y revisar sesiones activas. En conjunto, estas herramientas permiten un análisis completo y seguro de la base de datos, imprescindible para planificar cambios, migraciones o tareas de optimización.