Perché l'esecuzione delle query su Amazon Athena richiede molto tempo?

5 minuti di lettura
0

L'esecuzione delle query su Amazon Athena richiede molto tempo. Il tempo di coda delle query è elevato. Come posso velocizzare l'elaborazione delle query?

Breve descrizione

Athena è un servizio di query serverless interattivo. Dopo aver inviato le query ad Athena, vengono eseguite su un pool di risorse nel back-end. Queste risorse sono condivise da tutti gli utenti della Regione. Le query potrebbero essere temporaneamente messe in coda prima di essere eseguite. L'esecuzione delle query in genere richiede molto tempo a causa di un periodo di coda o di elaborazione del motore più elevato.

Risoluzione

Chiama l'API GetQueryExecution per l'ID query. Questa API restituisce informazioni su una singola elaborazione della query. Le informazioni includono dettagli utili, come i seguenti:

  • Tempo di coda impiegato dalla query (QueryQueueTimeInMillis)
  • Tempo impiegato dalla query nella pianificazione (QueryPlanningTimeInMillis)
  • Tempo di elaborazione del motore (EngineExecutionTimeInMillis)

Queste informazioni possono essere visualizzate nel parametro Statistics della risposta API.

Tempo di coda più lungo

Le query potrebbero avere un tempo di coda maggiore a causa dell'elevato utilizzo di risorse nel back-end. Il tempo di coda in Athena dipende dall'allocazione delle risorse. Dopo aver inviato le query ad Athena, le richieste vengono elaborate assegnando risorse in base alle seguenti informazioni:

  • Carico complessivo del servizio
  • Numero di richieste in arrivo

Se le query hanno un tempo di coda più lungo, esegui le seguenti operazioni per migliorare le prestazioni delle query:

  1. Valuta la possibilità di distribuire le query per un periodo di tempo. Se invii le query in batch, invia batch di piccole dimensioni più frequentemente anziché di grandi dimensioni con minore frequenza. Ciò potrebbe ridurre il tempo in cui una query rimane nello stato IN CODA e migliorare il tempo complessivo di elaborazione della query.
  2. Esegui una combinazione di query semplici e complesse invece di eseguire una serie di query complesse contemporaneamente. Inoltre, valuta la possibilità di inviare prima le query semplici seguite da quelle complesse. Poiché le query semplici vengono elaborate rapidamente, le risorse possono essere allocate alle query complesse senza incorrere in tempi di coda più lunghi.
  3. Se stai pianificando le query in base a scenari, come la generazione di report periodici o il caricamento di nuove partizioni, evita di pianificarle durante gli intervalli all'inizio dell'ora e 30 minuti dopo l'ora. La maggior parte degli script automatici e dei cron job vengono eseguiti durante questi intervalli di tempo. Pertanto, il carico del servizio è generalmente più elevato in questi periodi, con conseguente aumento dei tempi di coda.
  4. Se il tuo caso d'uso lo consente, esegui le query in più regioni. Questa operazione può distribuire il carico e aiutare ad acquisire più risorse di back-end. Questo approccio può ridurre il tempo di coda delle query.
    Importante: potresti ricevere addebiti in più regioni per Amazon Simple Storage Service (Amazon S3).

Tempi di pianificazione più lunghi

Se i tempi di pianificazione delle query sono più lunghi, è possibile che la causa sia una partizione eccessiva della tabella. Le tabelle con centinaia o migliaia di partizioni possono rallentare l'elaborazione delle query. Per migliorare le prestazioni delle query, prova una o più delle seguenti operazioni:

  • Valuta la possibilità di ridurre il numero di partizioni.
  • Esegui una query su una partizione alla volta e concatena i risultati.
  • Utilizza la proiezione delle partizioni per velocizzare l'elaborazione delle query di tabelle altamente partizionate e automatizzare la gestione delle partizioni.

Tempi di elaborazione più lunghi

Se le query hanno un tempo di elaborazione del motore più lungo, esegui le seguenti operazioni per migliorare le prestazioni delle query:

  1. Esegui la partizione delle tabelle per limitare la quantità di dati scansionati da ogni query. Le partizioni fungono da colonne virtuali e mantengono insieme i dati correlati in base ai valori delle colonne. Il partizionamento delle tabelle può migliorare le prestazioni delle query e ridurre i costi. Per ulteriori informazioni, consulta Partitioning data.
  2. Se il file Amazon S3 di cui esegui la query è di piccole dimensioni (generalmente inferiore a 128 MB), il tempo di elaborazione della query potrebbe essere più elevato. L'aumento del tempo è dovuto al sovraccarico richiesto dalle attività, come l'apertura del file S3, l'elenco delle directory e la configurazione del trasferimento dei dati. Utilizza l'utilità S3DistCp su Amazon EMR per combinare file S3 più piccoli in oggetti più grandi. Gli oggetti più grandi necessitano di meno richieste Amazon S3, il che riduce i tempi di elaborazione delle query.
  3. Esegui altre ottimizzazioni dell'archiviazione e delle query per migliorare le prestazioni e ridurre i tempi di elaborazione del motore. Per ulteriori informazioni, consulta Top 10 performance tuning tips for Amazon Athena.

Nota: puoi inviare più query ad Athena contemporaneamente in base alle quote predefinite relative alle query nella tua regione. Athena elabora le query assegnando le risorse in base al carico complessivo del servizio e al numero di richieste in arrivo. Pertanto, è possibile che tutte le query inviate non vengano eseguite contemporaneamente.


Informazioni correlate

Performance tuning in Athena

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa