2012-11-08 5 views
14

私はpostgresqlでいくつかのSQLクエリの実行時間を測定したいと思います。 BASHの組み込み時間を使用して、私は以下を行うことができました:パイプラインでGNU Timeを使用する方法

私はもっと多くのフォーマットを提供するGNU時間が好きです。しかし、私はパイプラインでそれを行う方法を知らない。簡単にするために、私は次の例のls | wcを使用します。

$ /usr/bin/time -f "%es" (ls | wc)              
-bash: syntax error near unexpected token `(' 

$ /usr/bin/time -f "%es" "ls | wc"             
/usr/bin/time: cannot run ls | wc: No such file or directory 

私はどのような方法ではないグループのパイプをすれば、それは文句を言いません。

$ /usr/bin/time -f "%es" ls | wc  
0.00s 

しかし、どうやら、これは最初の部分のみを測定します次の例に示すように、パイプの長さを指定します。

$ /usr/bin/time -f "%es" ls | sleep 20             
0.00s 

したがって、パイプラインのGNU Timeの正しい構文は何ですか?

答えて

11

コールtimeからシェル:もちろん

/usr/bin/time -f "%es" bash -c "ls | wc" 

が、これは同様にシェルの起動時間が含まれます。それほど多すぎるはずはありませんが、dashのような軽量のシェルを持っているシステムであれば、起動時間のオーバーヘッドを最小限に抑えるために使用することができます:

/usr/bin/time -f "%es" dash -c "ls | wc" 

もう1つのオプションは、あなたが実際に興味を持っているコマンドの時刻を設定することです。これはpsqlコマンドです。 timeは、実行中のプログラムに標準入力を渡しますので、あなたは、パイプラインのひとつのコンポーネントで実行することができます:あなたのパイプラインを呼び出すスクリプトを作成します

echo "SELECT * FROM sometable" | /usr/bin/time -f "%es" psql 
+0

最後の解決策は私の問題には完璧です。他のものは柔軟性があります。ありがとう! – stderr

3

。次に

/usr/bin/time -f '%es' script.sh 
関連する問題