Herramientas de supervisión de rendimiento para la capa de la base de datos
En la mayoría de los motores de bases de datos de grado empresarial que se pueden implementar con ThingWorx se proporcionan buenas herramientas de supervisión y detección de incidencias. El usuario puede trabajar con el equipo de DBA para supervisar y analizar su base de datos, además de realizar la supervisión del lado de la aplicación.
A continuación se indican algunas de las consultas de detección de incidencias recomendadas para bases de datos PostgreSQL y Microsoft SQL. Estas bases de datos son las bases de datos empresariales más utilizadas para los datos de modelo de ThingWorx.
Postgres
Supervise las siguientes métricas para identificar obstáculos de recursos en el servidor PostgreSQL:
Espacio libre en disco
Utilización de la CPU
Uso de E/S
Se deben identificar y optimizar las consultas de larga ejecución. Estas consultas pueden bloquear otras consultas y aumentar el tiempo de espera hasta que los recursos vuelvan a estar libres. Esto puede dar lugar a subprocesos de ejecución prolongada que esperan un bloqueo de base de datos en ThingWorx. Un bloqueo de base de datos permite que una sentencia individual bloquee el estado actual de una fila o una tabla. Demasiados bloqueos afectan al rendimiento de la aplicación.
Se puede utilizar PSM para detectar consultas de ejecución prolongada, así como consultas ejecutadas con frecuencia.
MSSQL
Para las bases de datos de Microsoft SQL, se recomienda recopilar las estadísticas de base de datos por las noches en entornos de producción. Además, los índices deben revisarse para verificar si hay una alta fragmentación y regenerarse según sea necesario, especialmente si la base de datos no se está ejecutando en SSD. Los registros de eventos extendidos de MSSQL se deben revisar con regularidad para comprobar si hay operaciones de espera prolongada o de bloqueo en la base de datos de ThingWorx. Durante períodos de rendimiento lento, la siguiente consulta puede identificar las transacciones que esperan un recurso:
SELECT t.*,r.*, SUBSTRING(t.text, statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), t.text)) * 2
ELSE statement_end_offset
END - statement_start_offset) / 2)
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
Si una sentencia aparece suspendida o se está ejecutando durante un período de tiempo superior, verifique las columnas wait_type y wait_resource para identificar el motivo del tiempo de espera.
Para ver si la sentencia está en espera en algún bloqueo, identifique el ID de sesión y ejecute:
select * from sys.dm_tran_locks where session_id = 158