2017-11-25 7 views

答えて

2

STL System Tables for Loggingを調べると、クエリの実行時間を知ることができます。

おそらく、クエリのテキストを解析して読み込まれたテーブルを検出する必要がありますが、履歴の読み込み時間を使用して各テーブルの標準読み込み時間を計算することができます。

いくつかの特に有用なテーブルは、次のとおり

  • STL_QUERY_METRICSは:そのようなUSER-で実行完了したクエリの処理された行の数、CPU使用率、入力/出力、およびディスクの使用など、メトリックス情報を含み定義されたクエリー・キュー(サービス・クラス)。
  • STL_QUERY:データベースクエリに関する実行情報を返します。
  • STL_LOAD_COMMITS:このテーブルには、各データファイルがデータベーステーブルにロードされるときの進行状況が記録されます。
0

これを行うにはスマートな方法があります。 S3からRedshiftにデータを移行するETLスクリプトが必要です。 ETLロジックが、そのテーブルのために開始する前に

シェルスクリプトを持っていると仮定すると、ちょうどタイムスタンプをキャプチャし、ETLロジックが、そのテーブルのために終了した後、別のタイムスタンプをキャプチャする(のがstartことを呼びましょう)(さんが呼びましょうendこと)とスクリプトの終わりに向かって違いを取る:

#!bin/sh 
    . 
    . 
    . 

start=$(date +%s) #capture start time 

#ETL Logic 
     [find the right csv on S3] 
     [check for duplicates, whether the file has already been loaded etc] 
     [run your ETL logic, logging to make sure that file has been processes on s3] 
     [copy that table to Redshift, log again to make sure that table has been copied] 
     [error logging, trigger emails, SMS, slack alerts etc] 
     [ ... ] 


end=$(date +%s) #Capture end time 


duration=$((end-start)) #Difference (time taken by the script to execute) 

echo "duration is $duration" 

PS:所要時間は秒になり、ログファイルを維持することができ、DBテーブルへのエントリなど、タイムスタンプがepocになり、あなたが使用することができます(ログ記録場所によって)次のような機能があります。

sec_to_time($duration) - for

SELECT (TIMESTAMP 'epoch' + 1511680982 * INTERVAL '1 Second ')AS mytimestamp - Amazon Redshift(そして、エポックの2つのインスタンスの違いを取る)。

0

このクエリを実行すると、COPYクエリの動作速度を確認できます。

select q.starttime, s.query, substring(q.querytxt,1,120) as querytxt, 
     s.n_files, size_mb, s.time_seconds, 
     s.size_mb/decode(s.time_seconds,0,1,s.time_seconds) as mb_per_s 
from (select query, count(*) as n_files, 
    sum(transfer_size/(1024*1024)) as size_MB, (max(end_Time) - 
     min(start_Time))/(1000000) as time_seconds , max(end_time) as end_time 
     from stl_s3client where http_method = 'GET' and query > 0 
     and transfer_time > 0 group by query) as s 
LEFT JOIN stl_Query as q on q.query = s.query 
where s.end_Time >= dateadd(day, -7, current_Date) 
order by s.time_Seconds desc, size_mb desc, s.end_time desc 
limit 50; 

あなたは/あなたは大体、それはサイズに基づいて、各ファイルがかかりますどのくらいの時間を決定することができS3からを通じてプッシュしているよどのように多くのメガバイトを見つけるたら

関連する問題