Limiter la croissance des données de conversation

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 8 minutes de lecture
  • Au fur et à mesure que les opérations sont effectuées, la taille des tables liées à la conversation augmente et peut finir par affecter les performances du système. Pour améliorer les performances tout en conservant suffisamment d’enregistrements, configurez un processus d’archivage des données passées et de nettoyage des tables utilisées pour les conversations en cours.

    Activations recommandées

    Pour limiter la croissance des données associée à une utilisation intensive de Agent virtuel et Messagerie instantanée d'agent, activez les tâches de nettoyage dans la table suivante :

    Nom de la table Résumé de la tâche de nettoyage Recommandation
    AWA Disponibilité du canal de l’agent [awa_agent_channel_availability] Supprime les AWA journaux de disponibilité des canaux d’agent datant de plus de 90 jours. Activation recommandée.
    AWA Présence de l’agent [awa_agent_presence] Supprime les AWA journaux de présence de l’agent datant de plus de 90 jours. Activation recommandée.
    AWA Historique de présence de l’agent [awa_agent_presence_history] Supprime les AWA journaux d’historique de présence de l’agent datant de plus de 180 jours. Aucune action nécessaire, déjà activée.
    AWA Taille du document [awa_document_size] Supprime les AWA journaux de taille de document datant de plus de 90 jours. Activation recommandée.
    AWA Statistiques d’instance [awa_instance_stats] Supprime AWA les journaux de statistiques d’instance datant de plus de 60 jours. Aucune action nécessaire, déjà activée.
    AWA Statistiques de file d’attente [awa_queue_stats] Supprime AWA les journaux de statistiques de file d’attente datant de plus de 60 jours. Aucune action nécessaire, déjà activée.
    AWA Statistiques des canaux de service [awa_service_channel_stats] Supprime AWA les journaux de statistiques du canal de service datant de plus de 60 jours. Aucune action nécessaire, déjà activée.
    AWA Élément de travail [awa_work_item] Supprime les AWA journaux des éléments de travail qui ont été acceptés ou annulés et qui datent de plus de 90 jours. Activation recommandée.
    Interaction [interaction] Supprime les journaux d’interaction datant de plus de 90 jours. Activation recommandée.
    Objet blob JSON d’interaction [interaction_json_blob] Supprime les journaux d’objets blob JSON d’interaction datant de plus de 60 jours. Activation recommandée.
    Profil de groupe actif [live_group_profile] Supprime les journaux de profil de groupe actifs datant de plus de 60 jours. Activation recommandée.
    Consommateur [sys_cs_consumer] Supprime les journaux des consommateurs portant un ID utilisateur [user_id]=5136503cc611227c0183e96598c4f706 et datant de plus de 60 jours. Déjà défini sur actif ou ajoutez Nom [nom] = utilisateur invité à la condition.
    Contexte de l’appareil consommateur [sys_cs_consumer_device_context] Ajoute la règle en cascade de référence [reference_cascade_rule] = règle de suppression à la colonne Compte de consommateur [consumer_account]. Aucune action n’est requise.
    Conversation [sys_cs_conversation] Supprime les journaux de conversation datant de plus de 60 jours. Aucune action nécessaire, déjà activée.

    Les tables à nettoyer

    Ces tables doivent être nettoyées, car elles peuvent atteindre les millions d’enregistrements dans des instances de longue durée :

    • Historique de présence de l’agent [awa_agent_presence_history]
    • AWA Taille du document [awa_document_size]
    • AWA Élément de travail [awa_work_item]
    • Consommateur [sys_cs_consumer]
    • Contexte de l’équipement du consommateur [sys_cs_consumer_device_context]
    • Conversation [sys_cs_conversation]
    • Interaction [interaction]
    • Objet blob JSON d’interaction [interaction_json_blob]
    • Profil de groupe actif [live_group_profile]

    D’autres tables connexes, telles que les tables Message de conversation [sys_cs_message] et Message Flux en direct [live_message], peuvent également devenir volumineuses. Ces tables possèdent reference_cascade_rule_delete des attributs qui entraînent leur nettoyage en tant qu’effet secondaire du nettoyage des tables de la liste précédente.

    Quels enregistrements dans les tables doivent être supprimés

    La configuration de l’effacement automatique vous permet de sélectionner les champs Matchfield et Age in seconds . Le champ Champ de correspondance correspond à une colonne de date dans la table et le champ Âge en secondes indique quand les suppressions sont déclenchées. Lorsqu’un enregistrement atteint un point où le champ Champ de correspondance a une date plus ancienne que le champ Âge en secondes , le nettoyeur supprime l’enregistrement lorsqu’il s’exécute.

    Idéalement, le champ Champ de correspondance devrait indiquer combien de temps l’enregistrement a été actif. Les colonnes de la table suivante fonctionnent bien comme le champ Champ de correspondance pour les tables en question, avec la condition supplémentaire dans le champ Conditions si indiqué.

    Table Colonne La colonne est-elle indexée ? Condition supplémentaire
    AWA Disponibilité du canal de l’agent [awa_agent_channel_availability] Mis à jour (sys_updated_on) Non agent.active=faux
    AWA Présence de l’agent [awa_agent_presence] Mis à jour (sys_updated_on) Non
    AWA Historique de présence de l’agent [awa_agent_presence_history] Mis à jour (sys_updated_on) Oui
    AWA Taille du document [awa_document_size] Mis à jour (sys_updated_on) Non
    AWA Élément de travail [awa_work_item] Mis à jour (sys_updated_on) Oui ÉtatINaccepté, annulé
    Interaction [interaction] Mis à jour (sys_updated_on) Oui
    Objet blob JSON d’interaction [interaction_json_blob] Mis à jour (sys_updated_on) Non
    Profil de groupe actif [live_group_profile] Mis à jour (sys_updated_on) Non
    Consommateur [sys_cs_consumer] Mis à jour (sys_updated_on) Non name=Utilisateur invité
    Conversation [sys_cs_conversation] Mis à jour (sys_updated_on) Non

    interaction.closed_at et sys_cs_conversation.conversation_completed ne sont pas de bonnes options pour le champ Matchfield , car elles n’ont pas de valeurs pour les conversations erronées et certaines interactions fermées. Les écarts peuvent être comblés à l’aide des règles métier qui définissent cette date si elle est vide lorsqu’un changement d’état approprié se produit, mais pour plus de simplicité, utilisez le champ sys_updated_on pour ces tables.

    D’autres tables peuvent être limitées par des conditions sur le champ d’état qui garantissent que seules les messageries instantanées fermées sont supprimées. Étant donné que les interactions ne doivent jamais être laissées ouvertes pendant plus de quelques jours en général, ces conditions peuvent être laissées de côté pour simplifier les requêtes et les exécuter plus rapidement après la dernière mise à jour. L’état sur la table awa_work_item peut être plus important car les tâches à plus longue exécution comme les tickets sont également représentées.

    Le problème avec la table sys_cs_consumer est que, bien que vous souhaitiez normalement conserver ces enregistrements pour faire correspondre les nouvelles conversations aux utilisateurs existants, dans le cas des utilisateurs invités, un enregistrement différent est créé pour chaque conversation.

    Pour la table sys_cs_consumer_device_context, il y a une référence à la table Compte de consommateur du service clientèle [sys_cs_consumer_account] (qui a elle-même une référence à la table sys_cs_consumer), mais la référence n’est pas marquée par reference_cascade_rule=supprimer. Il est recommandé d’ajouter cette règle à la référence du compte de consommateur. De cette façon, lorsque le nettoyeur supprime les enregistrements dans les tables sys_cs_consumer et sys_cs_consumer_account, il les supprime également.

    Les tables awa_agent_presence et awa_agent_channel_availability ne se développent pas par chat de la même manière que les autres tables, mais sont régulièrement consultées par le moteur d’affectation et peuvent se retrouver avec des entrées obsolètes d’utilisateurs qui ne sont plus actifs. Les entrées inutilisées depuis longtemps devraient également être nettoyées ici. Il faut faire très attention à la colonne awa_agent_channel_availability car elle peut ne pas être mise à jour souvent. Pour cette raison, une condition supplémentaire doit être ajoutée à ce nettoyeur afin que seuls les enregistrements associés aux utilisateurs inactifs puissent être supprimés.

    Quand les enregistrements peuvent-ils être supprimés en toute sécurité ?

    Plusieurs éléments sont à prendre en compte pour déterminer quand les enregistrements peuvent être supprimés en toute sécurité :

    • Ne supprimez pas les enregistrements des conversations en cours.

      Pour les conversations de messagerie instantanée basées sur des sessions, le seuil d’âge n’est que de quelques jours. Si les conversations par SMS/messagerie sont incluses, le seuil d’âge peut s’étendre à quelques semaines ou plus. Une façon d’évaluer cela est de parcourir toutes les propriétés de la forme com.glide.cs.*_idle_timeout et de localiser celle qui a la valeur la plus élevée.

    • Ne supprimez pas les enregistrements qui contribuent aux tableaux de bord/rapports sur l’activité récente.

      Le AWA tableau de bord Analyse avancée des interactions inclut un indicateur de tendances hebdomadaires qui remonte à trois mois en arrière. Pour prendre pleinement en charge cela, vous devez conserver les enregistrements d’interaction et de awa_work_item pendant au moins 90 jours.

    • Ne supprimez pas les enregistrements si l’une de leurs données doit être archivée pour référence ultérieure.

      Le délai de cette opération dépend de la synchronisation de toute logique personnalisée ajoutée pour effectuer l’archivage nécessaire. Vous devriez pouvoir le configurer de manière à ce qu’il s’exécute suffisamment tôt pour ne pas être le facteur décisif.

    Compte tenu de ce qui précède, les seuils d’âge en secondes suivants sont recommandés :
    • interaction, awa_work_item : 7776000 (90 jours, mais cela peut être réduit si vous n’utilisez pas l’indicateur de tendances hebdomadaires ou si vous êtes prêt à définir la rétrospective sur une période plus courte).
    • sys_cs_conversation, live_group_profile, interaction_json_blob, sys_cs_consumer : 2592000 (30 jours) ou 5184000 (60 jours).

    Considérations sur les performances

    Des index sys_updated_on sont-ils nécessaires pour les tables qui en sont manquantes ?

    Les tests ont été exécutés sur une instance qui avait 12 000 000+ interactions, avec un nettoyage de table configuré pour une table ayant un index sur sys_updated_on champ (interaction) et une autre qui n’en a pas (interaction_json_blob). Dans les deux cas, pour les exécutions initiales et ultérieures, le temps consacré aux suppressions (potentiellement plusieurs minutes) l’emportait de loin sur le temps consacré à l’interrogation des enregistrements (2 secondes ou moins). Compte tenu de ce résultat, aucun indice supplémentaire n’a besoin d’être ajouté aux tables, car l’impact sur les performances serait minime.

    Quand la tâche initiale et répétée du nettoyeur de table doit-elle être exécutée ?

    Normalement, le nettoyeur de table sys_trigger fonctionne une fois par heure. Si un ou plusieurs nettoyeurs sont définis sur des tables contenant de nombreux enregistrements obsolètes, le nombre de suppressions effectuées au cours de cette première exécution peut être très élevé et imposer une charge supplémentaire au système. Avant d’ajuster et d’activer la configuration du nettoyage de table, changez temporairement le calendrier de ce nettoyeur de table afin que sa prochaine exécution se produise en dehors des heures de travail (un moment où le système est généralement soumis à une charge plus légère).

    S’il n’y a pas d’heures creuses, certaines propriétés régissant les nettoyeurs de table peuvent aider. En particulier, glide.db.tablecleaner.chunk_delete_max_time_spent limite le temps passé par le nettoyeur à essayer de supprimer par lots des enregistrements au cours d’une seule exécution. La valeur est donnée en secondes et la valeur par défaut est 1 200 (20 minutes). Cela signifie que dans la configuration du système de base, le nettoyeur de table fonctionne toutes les heures pendant un maximum de 20 minutes (à titre de référence, au cours d’un test, environ 400 000 interactions ont pu être supprimées en 20 minutes, y compris les suppressions en cascade). Si 20 minutes toutes les heures sont trop agressives, la valeur de la propriété peut être réduite.