[pgsql-jp: 26291] Re: Status情報解析方法について

okayasuk @ nttdata.co.jp okayasuk @ nttdata.co.jp
2002年 6月 5日 (水) 21:17:25 JST


岡安です。

杉田さん、早速のご回答ありがごうございます。
いくつか補足します。

まず以下のような前提があります。

0) DBサーバのCPU使用率を下げたい
1) JDBC経由で実行したSQLの処理時間を調べたい
2) Statement よりも PreparedStatementを使ったほうが
  同一のSQL(かつパラメータのみ異なる場合)を複数回
  実行した場合、2回目以降のSQLの解析時間がなくなる
  だろうと期待。
3) 2)が本当かどうか確認したい。

例えばOracleのライブラリキャッシュ(SQLのキャッシュ)
のような機能がPostgreSQLにもあることを期待しています。
Oracleであればこのキャッシュヒット率でCPU使用率が
かなり変わるので、PostgreSQLでも同様なのかと想像
していました。
(予想でなくてちゃんと調べろというのはごもっともですが)

ということでI/Oはあまり気にしていません。
また、SQL自体のチューニングはまだ実施していません。


> ;;;  SQLの動作情報(処理時間の詳細)を取得したい。

Parser, Rewriter, Planner, Executor 等の処理時間を調べて
上記2)を確認しようと試みました。


> 〓timing の方がよいと考えています。

この方法は知りませんでした、参考になります。
explain analyze より正確な結果が得られるわけですね。


>   以下のコードで表示されている内容が上記に該当しています。
> 
>     src/backend/tcop/postgres.c の ShowUsage() での getrusage()
>     src/backend/storage/buffer/bufmgr.c の ShowBufferUsage() 


〓timing と同じ情報が getrusage() で取得できると嬉しいかなと
期待しながら、上記ソースをこれから確認してみます。


悩んでみても始まらないので、StatementとPreparedStatementの
それぞれで同じSQLを実行した場合の処理時間を比較してみました。

結果はどちらも、全くと言っていいほど同じ処理時間でした。


参考までに、使用したコードを載せます。

// ------ Statement での処理-----
ResultSet rs = null;
ResultSetMetaData md = null;
Statement stmt = con.createStatement();

//ここでSQLつくってます
String[] sql = new String[SQL_LOOP];
for (int i=0;i<SQL_LOOP;i++){
sql[i] = "SELECT a, b "
 + " FROM table_a "
 + " WHERE a > " + i
 + " LIMIT 10";
}

//計測開始
start = System.currentTimeMillis();

for (int i=0;i<SQL_LOOP;i++){
  stmt.executeQuery(sql[i]);
}

//計測終了
end = System.currentTimeMillis();

// ------ ここまで-----

// ----PreparedStatement での処理-----
PreparedStatement stmt2 = null;
ResultSet rs2 = null;
String sql2 = 
" SELECT a, b "
 + " FROM table_a "
 + " WHERE a > ? "
 + " LIMIT 10 ";

stmt2 = con.prepareStatement(sql2);

//計測開始
start = System.currentTimeMillis();

for (int i=0;i<SQL_LOOP;i++){
 stmt2.setInt(1, i);
 rs2 = stmt2.executeQuery();
}

//計測終了
end = System.currentTimeMillis();

// ------ ここまで-----

----------------------------------------
株式会社 NTTデータ ビジネス開発事業本部  
基盤システム事業部 第二ソリューション技術担当
岡安 一将
mailto:okayasuk @ nttdata.co.jp 
Tel: 03-5541-9580
Fax: 03-5541-9590






pgsql-jp メーリングリストの案内