1
0

More than 1 year has passed since last update.

Athenaで統計情報を取得する

Last updated at Posted at 2022-01-07

背景・目的

  • Athenaでどこに時間がかかっているか内訳を調べたい。

結論

  • Athenaのget-query-executionのオプションを指定することで統計情報が取得できる。

内容

CLIで調査する

  • 以下のコマンドを実行する。
aws athena get-query-execution  --query-execution-id {クエリID} --query QueryExecution.Statistics --output table
  • 結果
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                             GetQueryExecution                                                                             |
+--------------------+------------------------------+----------------------------+-------------------------+---------------------------------+------------------------------+
| DataScannedInBytes | EngineExecutionTimeInMillis  | QueryPlanningTimeInMillis  | QueryQueueTimeInMillis  |  ServiceProcessingTimeInMillis  | TotalExecutionTimeInMillis   |
+--------------------+------------------------------+----------------------------+-------------------------+---------------------------------+------------------------------+
|  79139461          |  5083                        |  798                       |  295                    |  68                             |  5446                        |
+--------------------+------------------------------+----------------------------+-------------------------+---------------------------------+------------------------------+
  • DataScannedInBytes
    • スキャンしたデータ量(バイト数)
  • EngineExecutionTimeInMillis
    • クエリの実行にかかった時間(ミリ秒)
  • QueryPlanningTimeInMillis
    • Athenaがクエリ実行計画に要した時間(ミリ秒)
    • データソースからテーブルパーティションを取得するために費やした時間も含まれる。
    • この時間はEngineExecutionTimeのサブセット。
  • QueryQueueTimeInMillis
    • リソースを待機している時間。(ミリ秒)
    • 実行前の時間と思われる。
  • ServiceProcessingTimeInMillis
    • クエリ実行後、クエリ結果を公開するのに要した時間(ミリ秒)
  • TotalExecutionTimeInMillis

    • クエリを実行するのに要した時間(ミリ秒)
    • 合計時間と思われる。
  • TotalExecutionは以下のように整理できる。

    • 上述したとおりQueryPlanningTimeInMillisはEngineExecutionTimeInMillisのサブセットのため、計算対象から外しています。
内訳 実行時間 計算対象
EngineExecutionTimeInMillis 5083  ◯
QueryPlanningTimeInMillis 798
QueryQueueTimeInMillis 295
ServiceProcessingTimeInMillis 68
TotalExecutionTimeInMillis 5446

考察

  • これらの数字を確認することで以下の判断ができそう。
    • QueryQueueTimeInMillisが長い。
      • スループットが大きい。(多い)
      • 競合のクエリが多いなど。
      • アカウントあたりのAPIコールのクォーターの引き上げを検討する。
        • StartQueryExecution(デフォルト20/秒)
    • QueryPlanningTimeInMillisが長い。
      • テーブルパーティションを取得する時間も含まれるので、パーティション数が多いか追加で確認する。
      • GlueやAthenaのパーティションインデックスを検討する。
    • ServiceProcessingTimeInMillis
      • クエリの結果を返すのに時間がかかっている。
      • 単純にデータ量が多い場合が考えられる。

参考

https://docs.aws.amazon.com/cli/latest/reference/athena/get-query-execution.html
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/service-limits.html#service-limits-api-calls

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0