Limitar o crescimento dos dados de conversa
Conforme as operações são realizadas, as tabelas relacionadas à conversa aumentam de tamanho e podem afetar o desempenho do sistema. Para melhorar o desempenho e ainda reter registros suficientes, configure um processo para arquivar dados anteriores e limpar as tabelas que são usadas para conversas em andamento.
Ativações recomendadas
Para limitar o crescimento de dados associado ao uso intenso de Virtual Agent e Bate-papo do agente, ative os trabalhos de limpeza na tabela a seguir:
| Nome da tabela | Resumo do trabalho de limpeza | Recomendação |
|---|---|---|
| AWA disponibilidade do canal do agente [awa_agent_channel_availability] | Remove AWA logs de disponibilidade de canal do agente com mais de 90 dias. | Ativação recomendada. |
| AWA presença do agente [awa_agent_presence] | Remove AWA logs de presença do agente com mais de 90 dias. | Ativação recomendada. |
| AWA histórico de presença do agente [awa_agent_presence_history] | Remove AWA logs do histórico de presença do agente com mais de 180 dias. | Nenhuma ação necessária, já ativado. |
| AWA tamanho do documento [awa_document_size] | Remove logs de tamanho de documento AWA com mais de 90 dias. | Ativação recomendada. |
| AWA estatísticas da instância [awa_instance_stats] | Remove AWA logs de estatísticas de instância com mais de 60 dias. | Nenhuma ação necessária, já ativado. |
| AWA estatísticas da fila [awa_queue_stats] | Remove AWA logs de estatísticas de fila com mais de 60 dias. | Nenhuma ação necessária, já ativado. |
| AWA estatísticas do canal de serviço [awa_service_channel_stats] | Remove AWA logs de estatísticas do canal de serviço com mais de 60 dias. | Nenhuma ação necessária, já ativado. |
| AWA item de trabalho [awa_work_item] | Remove AWA logs de item de trabalho que foram aceitos ou cancelados e têm mais de 90 dias. | Ativação recomendada. |
| Interação [interação] | Remove logs de interação com mais de 90 dias. | Ativação recomendada. |
| Blob JSON de interação [interaction_json_blob] | Remove os logs de blob JSON de interação com mais de 60 dias. | Ativação recomendada. |
| Perfil de grupo em tempo real [live_group_profile] | Remove logs de perfil de grupo dinâmico com mais de 60 dias. | Ativação recomendada. |
| Consumidor [sys_cs_consumer] | Remove os logs do consumidor que têm um ID de usuário [user_id]=5136503cc611227c0183e96598c4f706 e são mais de 60 dias. | Já definido como ativo ou adicionar Nome [name] = Usuário Convidado à condição. |
| Contexto de dispositivo do consumidor [sys_cs_consumer_device_context] | Adiciona a regra de cascata de referência [reference_cascade_rule]=delete à coluna Conta do consumidor [consumer_account]. | Nenhuma ação necessária. |
| Conversa [sys_cs_conversation] | Remove logs de conversa com mais de 60 dias. | Nenhuma ação necessária, já ativado. |
Quais tabelas devem ser limpas
Essas tabelas devem ser limpas porque podem crescer até os milhões de registros em instâncias de longa execução:
- Histórico de presença do agente [awa_agent_presence_history]
- AWA Tamanho do documento [awa_document_size]
- AWA Item de trabalho [awa_work_item]
- Consumidor [sys_cs_consumer]
- Contexto de dispositivo do consumidor [sys_cs_consumer_device_context]
- Conversa [sys_cs_conversation]
- Interação [interação]
- Blob JSON de interação [interaction_json_blob]
- Perfil do grupo em tempo real [live_group_profile]
Existem outras tabelas relacionadas, como as tabelas Mensagem de conversa [sys_cs_message] e Mensagem do Live Feed [live_message], que também podem se tornar grandes. Essas tabelas têm reference_cascade_rule_delete atributos que fazem com que elas sejam limpas como um efeito colateral da limpeza das tabelas na lista anterior.
Quais registros nas tabelas devem ser excluídos
A configuração de Limpeza automática permite selecionar os campos Campo de correspondência e Idade em segundos. O campo Campo de correspondência corresponde a uma coluna de data na tabela e o campo Idade em segundos indica quando as exclusões são acionadas. Quando um registro atinge um ponto em que o campo Matchfield tem uma data que está mais distante do que o campo Idade em segundos, o limpador exclui o registro quando ele é executado.
O ideal é que o campo Campo de correspondência indique há quanto tempo o registro está ativo. As colunas na tabela a seguir funcionam bem como o campo Campo de correspondência para as tabelas em questão, com a condição adicional no campo Condições quando indicado.
| Tabela | Coluna | A coluna está indexada? | Condição adicional |
|---|---|---|---|
| AWA disponibilidade do canal do agente [awa_agent_channel_availability] | Atualizado (sys_updated_on) | Não | agent.active=false |
| AWA presença do agente [awa_agent_presence] | Atualizado (sys_updated_on) | Não | |
| AWA histórico de presença do agente [awa_agent_presence_history] | Atualizado (sys_updated_on) | Sim | |
| AWA tamanho do documento [awa_document_size] | Atualizado (sys_updated_on) | Não | |
| AWA item de trabalho [awa_work_item] | Atualizado (sys_updated_on) | Sim | estadoINaccepted,cancelado |
| Interação [interação] | Atualizado (sys_updated_on) | Sim | |
| Blob JSON de interação [interaction_json_blob] | Atualizado (sys_updated_on) | Não | |
| Perfil de grupo em tempo real [live_group_profile] | Atualizado (sys_updated_on) | Não | |
| Consumidor [sys_cs_consumer] | Atualizado (sys_updated_on) | Não | name=Usuário Convidado |
| Conversa [sys_cs_conversation] | Atualizado (sys_updated_on) | Não |
interaction.closed_at e sys_cs_conversation.conversation_completed não são boas opções para o campo Campo de correspondência porque não têm valores para conversas com falha e algumas interações encerradas. As lacunas podem ser fechadas com regras de negócios que definem essa data se estiver vazia quando ocorrer uma mudança de estado apropriada, mas, para simplificar, use o campo sys_updated_on para essas tabelas.
Outras tabelas podem ser limitadas por condições no campo de estado que garantem que somente os bate-papos encerrados sejam excluídos. Como as interações nunca devem ser deixadas abertas por mais de alguns dias em geral, essas condições podem ser omitidas para tornar as consultas mais simples e mais rápidas após a última atualização. O estado na tabela awa_work_item pode ser mais importante porque tarefas de execução mais longa, como casos, também são representadas.
O problema com a tabela sys_cs_consumer é que, embora normalmente você queira manter esses registros para corresponder novas conversas a usuários existentes, no caso de usuários convidados, um registro diferente é criado para cada conversa.
Para a tabela sys_cs_consumer_device_context, há uma referência à tabela Conta do consumidor de CS [sys_cs_consumer_account] (que tem uma referência à tabela sys_cs_consumer), mas a referência não está marcada com reference_cascade_rule=delete. A recomendação é adicionar essa regra à referência da conta do consumidor. Dessa forma, quando o limpador excluir os registros nas tabelas sys_cs_consumer e sys_cs_consumer_account, ele também os excluirá.
As tabelas awa_agent_presence e awa_agent_channel_availability não aumentam por bate-papo da mesma forma que outras tabelas, mas são acessadas regularmente pelo mecanismo de atribuição e podem terminar com entradas obsoletas de usuários que não estão mais ativos. Entradas não utilizadas há muito tempo devem ser limpas aqui também. Um cuidado extra deve ser tomado com a coluna awa_agent_channel_availability porque ela pode não ser atualizada com frequência. Por esse motivo, uma condição extra deve ser adicionada a esse limpador para que somente registros associados a usuários inativos possam ser removidos.
Quando os registros podem ser excluídos com segurança
Há várias considerações para determinar quando os registros podem ser excluídos com segurança:
- Não exclua registros de conversas em andamento.
Para conversas de bate-papo baseadas em sessão, o limite de idade é de apenas alguns dias. Se as conversas por SMS/mensagens forem incluídas, o limite de idade poderá se estender para algumas semanas ou mais. Uma maneira de avaliar isso é examinar todas as propriedades do formulário com.glide.cs.*_idle_timeout e localizar aquele com o valor mais alto.
- Não exclua registros que contribuam para painéis/relatórios sobre atividades recentes.
O AWA para o painel Interactions-Advanced Analytics inclui um indicador de tendências semanais que retrocede três meses. Para oferecer suporte total a isso, você deve manter os registros de interação e awa_work_item por pelo menos 90 dias.
- Não exclua registros se algum de seus dados precisar ser arquivado para referência posterior.
O tempo disso depende do tempo de qualquer lógica personalizada adicionada para fazer o arquivamento necessário. Você deve ser capaz de configurar isso para que seja executado cedo o suficiente para não ser o fator decisivo.
- interação, awa_work_item: 7776000 (90 dias - mas isso pode ser reduzido se você não usar o indicador de Tendências Semanais ou se estiver disposto a definir o lookback para um período menor).
- sys_cs_conversation, live_group_profile, interaction_json_blob, sys_cs_consumer: 2592000 (30 dias) ou 5184000 (60 dias).
Considerações de desempenho
Os índices sys_updated_on são necessários para as tabelas que não têm eles?
Os testes foram executados em uma instância que tinha mais de 12.000.000 interações, com uma limpeza de tabela configurada para uma tabela com um índice no campo sys_updated_on (interação) e uma que não tem (interaction_json_blob). Em ambos os casos, para execuções iniciais e subsequentes, o tempo gasto nas exclusões (possivelmente muitos minutos) superou em muito o tempo gasto na consulta dos registros (2 segundos ou menos). Dado este resultado, nenhum índice adicional precisa ser adicionado às tabelas, pois o impacto no desempenho seria mínimo.
Quando o trabalho de limpeza de tabela inicial e repetido deve ser executado?
Normalmente, o limpador de tabela sys_trigger é executado uma vez por hora. Se um ou mais limpadores estiverem definidos em tabelas com muitos registros desatualizados, o número de exclusões feitas durante essa primeira execução poderá ser muito alto e sobrecarregar o sistema. Antes de ajustar e ativar a configuração de limpeza de tabela, altere temporariamente esta programação de limpeza de tabela para que sua próxima execução ocorra fora do horário comercial (um horário em que o sistema geralmente está com uma carga mais leve).
Se não houver horários de folga, algumas propriedades que regem os limpadores de tabela podem ajudar. Em particular, glide.db.tablecleaner.chunk_delete_max_time_spend limita quanto tempo o limpador gasta tentando excluir registros em lote durante uma única execução. O valor é fornecido em segundos e o padrão é 1200 (20 minutos). Isso significa que, na configuração do sistema de base, o limpador de tabela é executado por hora por no máximo 20 minutos (para referência, durante um teste, cerca de 400.000 interações podem ser excluídas em 20 minutos, incluindo exclusões em cascata). Se 20 minutos a cada hora for muito agressivo, o valor da propriedade poderá ser reduzido.