Optimisation de l’utilisation des services
Les éléments pris en compte au niveau des services concernant le nombre de charges de travail exécutées par compte, les quotas de service pour Athena et pour l’ensemble des services et la réduction des erreurs liées au manque de ressources.
Rubriques
Exécution de plusieurs charges de travail dans le même compte
Athena utilise des quotas pour limiter la simultanéité des requêtes et les taux de demandes d’API au niveau du compte. Le dépassement de ces quotas peut entraîner l’échec des requêtes exécutées ou soumises. Pour de plus amples informations sur ces quotas, consultez Service Quotas.
Si vous exécutez plusieurs charges de travail au sein d’un même compte AWS, elles se partagent le même quota au niveau du compte. Par exemple, si une charge de travail fait l’objet d’une rafale inattendue de requêtes, une autre charge de travail exécutée sur le même compte peut être confrontée à un temps d’attente élevé, voire à des échecs de soumission de requêtes en raison de la limitation.
Il est recommandé d’utiliser CloudWatch pour surveiller votre utilisation des services au moyen de graphiques et de tableaux de bord. Vous pouvez également configurer des alarmes CloudWatch qui vous alertent lorsque votre utilisation approche le quota de service pour les requêtes simultanées, ce qui vous permet de prendre des mesures avant d’atteindre les limites de quota. Pour de plus amples informations, consultez Surveillance des métriques d’utilisation Athena à l’aide de CloudWatch.
Utilisez des réserves de capacité pour contrôler la simultanéité des requêtes et pour isoler les charges de travail au sein de votre compte. Les réserves de capacité fournissent une capacité de traitement des requêtes dédiée au sein d’un compte. La capacité est mesurée en unités de traitement de données (DPU) et peut être revue à la hausse ou à la baisse pour augmenter ou diminuer la simultanéité des requêtes. Les réserves de capacité vous permettent d’isoler les charges de travail de votre compte les unes des autres en attribuant des capacités à un ou plusieurs groupes de travail. Pour de plus amples informations, consultez Gestion de la capacité de traitement des requêtes.
S’il est préférable d’isoler les charges de travail indépendantes dans différents comptes AWS (par exemple, en isolant les environnements de développement des environnements de production), cette approche n’offre pas la capacité de mise à l’échelle nécessaire pour augmenter la simultanéité des requêtes. Utilisez plutôt les réserves de capacité pour gérer vos besoins en matière de traitement des requêtes et les mettre à l’échelle au sein d’un compte.
Quotas d’autres services
Lorsqu'Athena exécute une requête, il peut appeler d'autres services qui appliquent des quotas. Pendant l'exécution des requêtes, Athena peut effectuer des appels d'API vers AWS Glue Data Catalog, Amazon S3 et d'autres services AWS tels que IAM et AWS KMS. Si vous utilisez des requêtes fédérées, Athena appelle également AWS Lambda. Tous ces services ont leurs propres limites et quotas qui peuvent être dépassés. Lorsque l'exécution d'une requête rencontre des erreurs provenant de ces services, elle échoue et inclut l'erreur provenant du service source. Les erreurs récupérables font l'objet de nouvelles tentatives, mais les requêtes peuvent toujours échouer si le problème ne se résout pas de lui-même à temps. Assurez-vous de lire attentivement les messages d'erreur afin de déterminer s'ils proviennent d'Athena ou d'un autre service. Certaines erreurs pertinentes sont abordées dans cette section consacrée à l’optimisation des performances.
Pour plus d'informations sur la manière de contourner les erreurs causées par les Service Quotas d'Amazon S3, consultez Éviter d'avoir trop de fichiers ultérieurement dans ce document. Pour de plus amples informations sur l'optimisation des performances Amazon S3, consultez Schémas de conception des bonnes pratiques : optimisation des performances Amazon S3 dans le Guide de l'utilisateur Amazon S3.
Réduction des erreurs liées au manque de ressources
Athena exécute des requêtes dans un moteur de requête distribué. Lorsque vous soumettez une requête, le planificateur de requêtes du moteur Athena estime la capacité de calcul requise pour exécuter la requête et prépare un cluster de nœuds de calcul en conséquence. Certaines requêtes, telles que les requêtes DDL, ne s'exécutent que sur un seul nœud. Les requêtes complexes portant sur des jeux de données volumineux s'exécutent sur des clusters beaucoup plus importants. Les nœuds sont uniformes, avec les mêmes configurations de mémoire, d'UC et de disque. Athena monte en puissance, mais n'augmente pas en capacité, pour traiter des requêtes plus exigeantes.
Parfois, les exigences d'une requête dépassent les ressources disponibles pour le cluster exécutant la requête. Dans ce cas, la requête échoue avec le message d'erreur La requête a épuisé les ressources à ce facteur d'échelle.
La ressource la plus souvent épuisée est la mémoire, mais dans de rares cas, il peut également s'agir d'espace disque. Les erreurs de mémoire se produisent généralement lorsque le moteur exécute une fonction de jointure ou de fenêtrage, mais elles peuvent également se produire lors de comptages et d'agrégations distincts.
Même si une requête échoue une fois avec une erreur « manque de ressources », elle peut réussir lorsque vous l'exécutez à nouveau. L'exécution des requêtes n'est pas déterministe. Des facteurs tels que le temps nécessaire au chargement des données et la manière dont les jeux de données intermédiaires sont répartis sur les nœuds peuvent entraîner une utilisation différente des ressources. Par exemple, imaginez une requête qui joint deux tables et dont la distribution des valeurs pour la condition de jointure est fortement asymétrique. Une telle requête peut réussir la plupart du temps, mais échouer parfois lorsque les valeurs les plus courantes finissent par être traitées par le même nœud.
Pour éviter que vos requêtes n'excèdent les ressources disponibles, suivez les conseils de réglage des performances mentionnés dans ce document. En particulier, pour obtenir des conseils sur la manière d'optimiser les requêtes qui épuisent les ressources disponibles, consultez Optimisation des jointures, Réduction de la portée des fonctions de fenêtrage ou suppression de ces fonctions et Optimisation des requêtes à l’aide d’approximations.