Pourquoi l'exécution de mes requêtes Amazon Athena prend-elle beaucoup de temps ?

Dernière mise à jour : 2021-05-14

L'exécution de mes requêtes Amazon Athena prend beaucoup de temps. Le délai en file d'attente des requêtes est trop important. Comment puis-je accélérer le traitement des requêtes ?

Brève description

Athena est un service de requête interactif sans serveur. Une fois que vous avez soumis vos requêtes à Athena, celles-ci sont exécutées dans un groupe de ressources dans le backend. Ces ressources sont partagées par tous les utilisateurs de la région. Vos requêtes peuvent être temporairement mises en file d'attente avant d'être exécutées. Les requêtes prennent généralement beaucoup de temps à s'exécuter en raison d'un délai en file d'attente ou de traitement du moteur élevé.

Solution

Appelez l'API GetQueryExecution pour votre ID de requête. Cette API renvoie des informations sur un seul traitement de la requête. Ces informations comprennent des détails utiles, en particulier :

  • Le délai en file d'attente de la requête (QueryQueueTimeInMillis)
  • Le temps de planification de la requête (QueryPlanningTimeInMillis)
  • Le délai de traitement par le moteur (EngineExecutionTimeInmillis)

Ces informations peuvent être affichées dans le paramètre Statistiques de la réponse de l'API.

Délai en file d'attente plus élevé

Vos requêtes peuvent rester plus longtemps en file d'attente en raison d'une utilisation plus importante des ressources dans le backend. Le délai en file d'attente dans Athena dépend de l'allocation des ressources. Après avoir soumis vos requêtes à Athena, ces dernières sont traitées en affectant des ressources en fonction des éléments suivants :

  • Charge globale du service
  • Nombre de demandes entrantes

Si vos requêtes ont un délai en file d'attente élevé, procédez comme suit pour améliorer les performances des requêtes :

  1. Pensez à distribuer vos requêtes sur une période donnée. Si vous soumettez des requêtes par lots, soumettez de petits lots plus fréquemment plutôt que des lots volumineux moins fréquemment. Cela peut réduire le délai d'une requête en file d'attente et améliorer le délai global de traitement de la requête.
  2. Exécutez une combinaison de requêtes simples et complexes d'un ensemble de requêtes complexes simultanément. En outre, envisagez de soumettre les requêtes simples avant les requêtes complexes. Étant donné que les requêtes simples sont traitées rapidement, des ressources peuvent être allouées aux requêtes complexes sans entraîner des délais en file d'attente élevés.
  3. Si vous planifiez vos requêtes dans des scénarios comme la génération de rapports réguliers ou le chargement de nouvelles partitions, évitez de les planifier au début de l'heure et 30 minutes après l'heure. La plupart des scripts automatisés et des tâches cron sont exécutés pendant ces périodes. Par conséquent, la charge de service est généralement plus élevée pendant ces périodes, ce qui augmente les délais en file d'attente.
  4. Si votre cas d'utilisation le permet, exécutez vos requêtes dans plusieurs régions, afin de répartir la charge et acquérir plus de ressources backend. Cette approche peut réduire le délai en file d'attente des requêtes.
    Important : des frais Amazon Simple Storage Service (Amazon S3) peuvent être facturés entre régions.

Durée de planification plus élevée

Si vos requêtes ont une durée de planification plus élevée, cela peut être dû à un sur-partitionnement de la table. Les tables comportant des centaines ou des milliers de partitions peuvent ralentir le traitement des requêtes. Pour améliorer les performances des requêtes, essayez une ou plusieurs des options suivantes :

  • Envisagez de réduire le nombre de partitions.
  • Interrogez une partition à la fois et concaténez les résultats.
  • Utilisez la fonction de projection de partition pour accélérer le traitement des requêtes des tables hautement partitionnées et automatiser la gestion des partitions.

Délai de traitement plus élevé

Si le délai de traitement de vos requêtes par le moteur est élevé, procédez comme suit pour améliorer les performances des requêtes :

  1. Partitionnez vos tables pour limiter la quantité de données analysées par chaque requête. Les partitions font office de colonnes virtuelles et conservent ensemble les données associées en fonction des valeurs de colonne. Le partitionnement de vos tables peut améliorer les performances des requêtes et réduire les coûts. Pour en savoir plus, consultez Partitionnement des données.
  2. Si le fichier Amazon S3 que vous interrogez est petit (généralement inférieur à 128 Mo), le délai de traitement de la requête peut être élevé. L'augmentation du délai est due à la surcharge dans les tâches, notamment l'ouverture du fichier S3, la liste des répertoires et la configuration du transfert de données. Utilisez l'utilitaire S3DistCP sur Amazon EMR pour combiner des fichiers S3 plus petits en objets plus volumineux. Les objets volumineux nécessitent moins de demandes Amazon S3, ce qui réduit le délai de traitement des requêtes.
  3. Effectuez d'autres optimisations de stockage et de requête pour améliorer les performances et réduire le délai de traitement par le moteur. Pour plus d'informations, consultez Les 10 meilleures astuces pour améliorer les performances d'Amazon Athena.

Remarque : vous pouvez envoyer plusieurs requêtes à Athena en même temps en fonction des quotas par défaut liés aux requêtes dans votre région. Athena traite les requêtes en affectant des ressources en fonction de la charge de service globale et du nombre de demandes entrantes. Par conséquent, toutes vos requêtes soumises peuvent ne pas s'exécuter simultanément.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?