Home
    Mantenimiento de bases de datos

    Recomendaciones sobre operaciones en la base de datos

    Si va a ejecutar una consulta u operación directa a las tablas de Aranda Device Management (ADM), debe tener en cuenta las siguientes recomendaciones que permiten que el rendimiento de la base de datos no se vea comprometido en la operación:

    • No debe modificar manualmente la información almacenada en las bases de datos, evitando comportamientos inesperados en la aplicación.
    • Use réplicas de los datos para la generación de informes históricos.
    • En la construcción de reportes, evite consultar todos campos de una tabla usando el carácter comodín (*).
    • En la construcción de reportes, evite ejecutar comandos SQL que consulten tablas en su totalidad, en su lugar, defina clausulas WHERE que permitan obtener un número ajustado de filas.
    • No elimine datos de las tablas a menos que tenga claridad de las implicaciones. Borrar datos puede afectar el funcionamiento del software. Esta tarea puede requerir aprobación del área de auditoría y/o de la gerencia de la compañía.
    • Utilice la sentencia TRUNCATE cuando requiera eliminar todos los registros de una tabla grande, haciendo el proceso más eficiente ya que no genera entradas en el log de transacciones.

    Desfragmentar índices y actualizar estadísticas de la base de datos

    Las tareas de desfragmentación de índices y actualización de estadísticas ayudan a mejorar el rendimiento de las bases de datos ya que permiten mejorar el acceso a los datos en el disco. Es recomendable realizar estas tareas de forma periódica para garantizar un buen funcionamiento de la base de datos garantizando que los planes de ejecución se compilen con las estadísticas más recientes de la base de datos.

    Realice el siguiente procedimiento:

    1. Confirme la edición de SQL Server que está ejecutando. Si su edición es enterprise o utiliza Azure SQL Database vaya derectamente al paso 4. Para mayor información sobre operaciones de índices en línea consulte: Perform Index Operations Online

    2. Asegúrese que los especialistas no se encuentran editando, consultando o ingresando datos en las herramientas de la suite de Aranda. Para esto puede detener los servicios de Internet Informatión Services (IIS) donde estén alojadas las aplicaciones de Aranda.

    3. Detenga los servicios de la Suite de Aranda en el servidor de aplicaciones.

    4. Conéctese al servidor SQL Server utilizando SQL Server Management Studio y abra una nuevo archivo .sql

    5. Cambie el contexto a la base de datos de Aranda, ej.
       USE Aranda;
       GO
      
    6. Reconstruya los índices con fragmentación mayor a 30% y uso de página inferior a 60% ejecutando el script:

       SET NOCOUNT ON;
      
       DECLARE
           @v_command NVARCHAR(MAX),
           @v_init DATETIME,
           @v_fragmentation FLOAT,
           @v_page_space_used FLOAT,
           @v_table_name SYSNAME,
           @v_index_name SYSNAME;
      
       DECLARE cur_index CURSOR LOCAL STATIC FOR
       SELECT
           CONCAT (
               'ALTER INDEX [',
               i.name,
               '] ON [',
               OBJECT_NAME(s.object_id),
               IIF(s.avg_fragmentation_in_percent BETWEEN 10 AND 30, '] REORGANIZE', '] REBUILD')
           ) statement,
           s.avg_fragmentation_in_percent,
           s.avg_page_space_used_in_percent,
           OBJECT_NAME(s.object_id) table_name,
           i.name index_name
       FROM sys.dm_db_index_physical_stats (
           DB_ID(),
           DEFAULT,
           DEFAULT,
           DEFAULT,
           'LIMITED'
       ) s
       JOIN sys.indexes i ON i.index_id = s.index_id
           AND i.object_id = s.object_id
       WHERE s.page_count > 50
           AND (
               s.avg_fragmentation_in_percent > 10
               OR s.avg_page_space_used_in_percent < 60
           ) AND s.index_type_desc <> 'HEAP'
           AND s.page_count < 262144;
      
       OPEN cur_index;
      
       FETCH NEXT FROM cur_index INTO
           @v_command,
           @v_fragmentation,
           @v_page_space_used,
           @v_table_name,
           @v_index_name;
      
       WHILE @@FETCH_STATUS = 0
       BEGIN
           BEGIN TRY
               SET @v_init = CURRENT_TIMESTAMP;
      
               EXEC sp_executesql @v_command;
      
               PRINT CONCAT(
                   'Ending: ',
                   IIF(@v_fragmentation BETWEEN 10 AND 30, 'reorganize ', 'rebuild '),
                   @v_table_name,
                   '.',
                   @v_index_name,
                   ' execution time ',
                   CONVERT(VARCHAR(10), DATEDIFF(MILLISECOND, @v_init, GETDATE())),
                   'ms ',
                   'fragmentation ',
                   @v_fragmentation,
                   '%'
               );
      
           END TRY
           BEGIN CATCH
               PRINT ERROR_MESSAGE();
      
           END CATCH;
      
           FETCH NEXT FROM cur_index INTO
               @v_command,
               @v_fragmentation,
               @v_page_space_used,
               @v_table_name,
               @v_index_name;
      
       END;
       GO
      
    7. Inicie nuevamente todos los servicios detenidos previamente de la Suite Aranda e Internet Information Services (IIS).

    Recomendaciones sobre el mantenimiento de índices

    • Las operaciones sobre índices en las ediciones de SQL Server diferentes a Enterprise o Azure SQL Database pueden causar bloqueos en las tablas ocasionando comportamientos inesperados en las aplicaciones de Aranda, programe estas tareas para que se ejecuten automáticamente como mínimo una vez cada semana en horarios de baja carga transaccional.

    • Haga seguimiento a las estadísticas físicas de los índices usando las vistas de adminsitración de SQL Server para determinar si debe ajustar la periodicidad de las operaciones de desfragmentación de índices. Si determina que la fragmentación se mantiene alta > 50% reduzca la periodicidad, en caso contratio puede mantener la recomendada o aumentarla.


    ¿Cuáles son las tablas con mayor tráfico en ADM, donde no se recomienda eliminar registros?

    • AFW_ADDITIONAL_FIELD_VALUE: Esta tabla contiene los valores de los campos adicionales de todos los conceptos de Aranda Device Managment.

    • AFW_USERS: Esta es la tabla principal de los usuarios, esta tabla concentra los clientes, los especialistas en campo y especialistas web. Esta tabla puede ser alimentada de nuevos usuarios a través de la consola web y sincronización desde el directorio activo LDAP. Esta tabla no debe ser depurada ni se deben eliminar sus registros.


    ¿Cuáles son las tablas con mayor tráfico en ADM, donde se pueden eliminar registros?

    PRC_ASM_CLEAN_SOFT_USE: La limpieza del historial del uso de software se puede programar desde la aplicación de ADM, en la opción Configuración - Medición. Se debe configurar la frecuencia para limpiar el historial por tipo de inventario (Detalle, Diario y Mensual), esta tarea se programa automáticamente para ejecutarse diariamente desde que se realiza la configuración.

    • Se recomienda ejecutar esta limpieza desde la base de datos antes de realizar la configuración desde la aplicación de ADM en los siguientes casos:
      • Que la base de datos contenga un gran histórico de datos de uso de software
      • Que se genere error al ejecutarse la tarea programada desde la consola de ADM
    • El Procedimiento PRC_ASM_CLEAN_SOFT_USE elimina información del uso de software de las tablas [ASM_SOFTWARE_USAGE], [ASM_SOFTWARE_USAGE_DAY] y [ASM_SOFTWARE_USAGE_MONTH]

    Parámetros:

    • @i_detail parámetro de tipo DATE, lo utiliza el procedimiento para eliminar el historial detallado de uso de software de la fecha especificada en el parámetro hacia atras. Elimina información de la tabla [ASM_SOFTWARE_USAGE]

      Ejemplo: @i_detail =’2022-01-01 00:00:00’

    • @i_day parámetro de tipo DATE, lo utiliza el procedimiento para eliminar el consolidado diario del uso de software de la fecha especificada en el parámetro hacia atras. Elimina información de la tabla [ASM_SOFTWARE_USAGE_DAY]

      Ejemplo: @i_day =’2022-01-01’

    • @i_month parámetro de tipo DATE, lo utiliza el procedimiento para eliminar el consolidado mensual de uso de software de la fecha especificada en el parámetro hacia atras. Elimina información de la tabla [ASM_SOFTWARE_USAGE_MONTH]

      Ejemplo: @i_month =’2022-01-01’

    Implementación del Procedimiento

    EXECUTE [dbo].[PRC_ASM_CLEAN_SOFT_USE]  
    @i_detail ='2020-01-01 00:00:00', 
    @i_day ='2020-01-01',
    @i_month ='2020-01-01'
    


    - AAM_AGENT_TASK - AAM_AGENT_TASK_DETAIL: Estas tabla guardan las acciones que se programan desde la consola al dispositivo. Por ejemplo: Solicitar un inventario, Solicitar control remoto, Enviar un mensaje, Reiniciar dispositivo, etc…; estas acciones tienen estados (Registrado = 1, Notificado = 1, en ejecución = 2,Ejecutado = 7, Ejecutado con Errores = 8).
    Dependiendo la gestión de la herramienta puede generar varias acciones a su vez varios registros. Se puede tomar decisión de ejecutar script de eliminación física de las acciones que hayan sido realizado correctamente y con alguna fecha de vigencia.

    DELETE TASKDETAIL
    FROM dbo.AAM_AGENT_TASK_DETAIL TASKDETAIL
    INNER JOIN dbo.AAM_AGENT_TASK TASK ON TASKDETAIL.task_id=TASK.id
    WHERE TASKDETAIL.status in (7,8) and TASK.creation_date < '2020-01-01 00:00:00.000'
    
    DElETE TASK
    FROM dbo.AAM_AGENT_TASK TASK 
    LEFT JOIN dbo.AAM_AGENT_TASK_DETAIL TASKDETAIL ON TASK.id = TASKDETAIL.task_id
    WHERE TASKDETAIL.task_id IS NULL
    


    AFW_ALERT: Esta tabla guarda las alertas que genera el sistema. Por ejemplo: dispositivos descubiertos, dispositivos con que tengan software/hardware especificos, dispositivos con un porcentaje de ocupación del disco; estas alertas tienen 3 estados (Nuevo, Revisado y Cerrado). Dependiendo la gestión de la herramienta puede generar varias alertas y a su vez varios registros.

    Se puede tomar decisión de ejecutar script de eliminación física de las alertas que hayan sido cerradas por los despachadores con alguna fecha de vigencia dado que cuenta con un índice con las siguientes llaves (creation_date, status_id, category_id):

    DELETE
    FROM [BD_NAME].[dbo].[AFW_ALERT]
    WHERE status_id = 3 and creation_date < '2020-01-01 00:00:00'
    


    AFW_MAIL_HISTORY: El Sistema de ADM envía por diferentes motivos correos electrónicos. Estos correos son enviados por una tarea programada y una vez se envían satisfactoriamente pasan a la tabla AFW_MAIL_HISTORY; esta tabla puede crecer bastante rápido; este histórico se mantiene intacto y se puede tomar decisión bajo qué criterios eliminar la información.

    Por ejemplo, si desea eliminar información, puede utilizar el siguiente script:

    DELETE 
    FROM [BD_NAME].[dbo].[AFW_MAIL_HISTORY] 
    WHERE mahi_created < '2020-01-01 00:00:00' 
    


    AFW_WORKER_LOG: Esta tabla tiene el log de ejecución de tareas que ejecuta el servicio del worker de Aranda. Este log se utiliza para identificar que las tareas se hayan ejecutado en el tiempo esperado y para validar su estado por medio del campo work_success (0: Fallido, 1: Exitoso, 2: Pendiente por ejecutar y 3: En proceso).

    Se puede tomar decisión de eliminar con cierta periodicidad las tareas que se ejecutaron exitosamente y dejar las que presentan algún tipo de error por si se requiere algún soporte o ajuste.


    DELETE 
    FROM [BD_NAME].[dbo].[AFW_WORKER_LOG] 
    WHERE work_execution_date < '2020-01-01 00:00:00' AND work_success = 1