PT
Español
English
Português
    Manutenção de banco de dados

    Recomendações sobre operações de banco de dados

    Se você estiver executando uma consulta ou operação direta nas tabelas do Aranda Device Management (ADM), considere as seguintes recomendações que garantem que o desempenho do banco de dados não seja comprometido na operação:

    • Você não deve modificar manualmente as informações armazenadas nos bancos de dados, evitando comportamentos inesperados no aplicativo.
    • Use réplicas dos dados para relatórios históricos.
    • Ao criar relatórios, evite consultar todos os campos em uma tabela usando o caractere curinga (*).
    • Ao criar relatórios, evite executar comandos SQL que consultam tabelas em sua totalidade, em vez disso, defina cláusulas WHERE que permitem obter um número apertado de linhas.
    • Não exclua dados de tabelas, a menos que você tenha clareza sobre as implicações. A exclusão de dados pode afetar a operação do software. Essa tarefa pode exigir aprovação da área de auditoria e/ou da administração da empresa.
    • Use a instrução TRUNCATE quando precisar excluir todos os registros de uma tabela grande, tornando o processo mais eficiente, pois não gera entradas no log de transações.

    Desfragmentar índices e atualizar estatísticas do banco de dados

    As tarefas de desfragmentação de índice e atualização de estatísticas ajudam a melhorar o desempenho do banco de dados, melhorando o acesso aos dados no disco. É aconselhável executar essas tarefas regularmente para garantir que o banco de dados esteja funcionando sem problemas, garantindo que os planos de execução sejam compilados com as estatísticas mais recentes do banco de dados.

    Execute o seguinte procedimento:

    1. Confirme a edição do SQL Server que você está executando. Se sua edição for corporativa ou você estiver usando o Banco de Dados SQL do Azure, pule direto para a etapa 4. Para obter mais informações sobre negociação de índices online, consulte: Executar operações de índice online
    2. Certifique-se de que os especialistas não estejam editando, consultando ou inserindo dados nas ferramentas da suíte Aranda. Para fazer isso, você pode interromper os Serviços de Informações da Internet (IIS) onde os aplicativos Aranda estão hospedados.
    3. Pare os serviços do Aranda Suite no servidor de aplicativos.
    4. Conecte-se ao SQL Server usando o SQL Server Management Studio e abra um novo arquivo .sql
    5. Altere o contexto para o banco de dados Aranda, por exemplo,
           USE Aranda;
           GO
    
    1. Recrie índices com fragmentação superior a 30% e uso de página inferior a 60% executando o 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
    
    1. Reinicie todos os serviços interrompidos anteriormente do Aranda Suite e dos Serviços de Informações da Internet (IIS).

    Recomendações sobre a manutenção do índice

    • Operações em índices em edições do SQL Server diferentes do Enterprise ou do Banco de Dados SQL do Azure podem causar falhas de tabela, causando comportamento inesperado em aplicativos Aranda, agende essas tarefas para serem executadas automaticamente pelo menos uma vez por semana em horários de baixa carga transacional.
    • Acompanhe as estatísticas físicas de seus índices usando exibições de gerenciamento do SQL Server para determinar se você deve ajustar a periodicidade das operações de desfragmentação de índice. Se você determinar que a fragmentação permanece alta > 50%, reduza a periodicidade, se não quiser, pode manter a recomendada ou aumentá-la.

    Quais são as tabelas mais trafegadas no ADM, onde a exclusão de registros não é recomendada?

    • AFW_ADDITIONAL_FIELD_VALUE: Esta tabela contém os valores dos campos adicionais de todos os conceitos no Aranda Device Management.
    • AFW_USERS: Esta é a tabela principal de usuários, esta tabela concentra clientes, especialistas de campo e especialistas em web. Essa tabela pode ser alimentada com novos usuários por meio do console da Web e da sincronização do Active Directory LDAP. Esta tabela não deve ser limpa e seus registros não devem ser excluídos.

    Quais são as tabelas mais trafegadas no ADM, onde os registros podem ser excluídos?

    PRC_ASM_CLEAN_SOFT_USE: A limpeza do histórico de uso do software pode ser agendada a partir do aplicativo ADM, na opção Configuração - Medição. A frequência para limpar o histórico deve ser configurada por tipo de inventário (Detalhe, Diário e Mensal), esta tarefa é agendada automaticamente para ser executada diariamente a partir do momento em que a configuração é feita.

    • Recomendamos que você execute essa limpeza no banco de dados antes de executar a configuração do aplicativo ADM nos seguintes casos:

    • Que o banco de dados contém um grande histórico de dados de uso de software
    • Falha ao executar a tarefa agendada a partir do console do ADM
    • O procedimento PRC_ASM_CLEAN_SOFT_USE remove as informações de uso de software das tabelas [ASM_SOFTWARE_USAGE], [ASM_SOFTWARE_USAGE_DAY] e [ASM_SOFTWARE_USAGE_MONTH]

    Parâmetros:

    • @i_detail parâmetro do tipo DATE é usado pelo procedimento para excluir o histórico detalhado de uso de software da data especificada no parâmetro backward. Excluir informações da tabela [ASM_SOFTWARE_USAGE]

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

    • @i_day parâmetro do tipo DATE é usado pelo procedimento para remover a reversão diária do uso do software da data especificada no parâmetro backward. Excluir informações da tabela [ASM_SOFTWARE_USAGE_DAY]

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

    • @i_month parâmetro do tipo DATE é usado pelo procedimento para excluir o pacote cumulativo mensal de uso de software da data especificada no parâmetro backward. Excluir informações da tabela [ASM_SOFTWARE_USAGE_MONTH]

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

    Implementação do procedimento

    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: Essas tabelas salvam as ações agendadas do console para o dispositivo. Por exemplo: Solicitar um inventário, Solicitar controle remoto, Enviar uma mensagem, Reiniciar dispositivo, etc…; essas ações têm status (Registrado = 1, Relatado = 1, Em execução = 2, Executado = 7, Executado com erros = 8).
    Dependendo da gestão da ferramenta, ela pode gerar várias ações, por sua vez, vários registros. Você pode tomar a decisão de executar um script de eliminação física para as ações que foram executadas corretamente e com uma data efetiva.

    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 tabela salva os alertas gerados pelo sistema. Por exemplo: dispositivos descobertos, dispositivos com software/hardware específico, dispositivos com uma porcentagem de ocupação de disco; esses alertas têm 3 status (Novo, Revisado e Fechado). Dependendo do gerenciamento da ferramenta, ela pode gerar vários alertas e, por sua vez, vários registros.

    Pode-se tomar a decisão de executar um script de exclusão física para alertas que foram fechados por dispatchers com uma data efetiva, pois ele tem um índice com as seguintes chaves (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: O sistema ADM envia e-mails por diferentes motivos. Esses e-mails são enviados por uma tarefa agendada e, uma vez enviados satisfatoriamente, vão para a tabela AFW_MAIL_HISTORY; Este conselho pode crescer muito rapidamente; Esse histórico permanece intacto e uma decisão pode ser tomada sob quais critérios excluir as informações.

    Por exemplo, se você deseja excluir informações, pode usar o seguinte script:

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


    AFW_WORKER_LOG: Esta tabela tem o log de execução de tarefas que o serviço de trabalho Aranda executa. Este log é utilizado para identificar que as tarefas foram executadas no tempo esperado e para validar seu status por meio do campo work_success (0: Falha, 1: Bem-sucedido, 2: Execução pendente e 3: Em andamento).

    Você pode tomar a decisão de excluir com certa periodicidade as tarefas que foram executadas com sucesso e deixar aquelas que apresentam algum tipo de erro caso seja necessário algum suporte ou ajuste.


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