- PR -

postgreSQLのキャッシュクリア(キャッシュリセット)の方法

1
投稿者投稿内容
なつ
会議室デビュー日: 2005/08/18
投稿数: 18
投稿日時: 2007-10-22 17:11
はじめまして。
postgreSQLを使用してまだ初心者なのですが教えて下さい。

現在、あるSQL文の性能試験を行っています。
実行するとレスポンスがあるまで10秒ほどかかるSQL文なのですが
2回目以降の実行ではキャッシュが残っているせいか0.3秒ほどで
応答が返ってきてしまいます。

pgsqlのプロセスの再起動を行っても0.3秒ほどで応答が返ってきてしまいます。
キャッシュからの応答でなく実際のSQL検索にかかる時間を測りたいのですが
キャッシュをクリアすることなどはできないのでしょうか?
キャッシュのクリアでなくても実際のSQL検索処理の時間を測れる方法でも
結構です。

よろしくお願いします。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-10-22 18:22
 postgreSQLのインストールされている端末の再起動か、
libpq.dllの関数をコールするしか無いようですね。
後者はプログラムの手間が必要ですが・・・・
(憶測ですが、WindowsであればpostgreSQLのサービスを
停止した後に、メモリクリーナー等のお掃除ソフトを
実行すればクリア出来そうな気がします。)

 正確なSQLの実行時間を求める必要があるなら、上記の対応により
メモリをクリアした上で、SQL文の前にExplain Analyzeを付加
すれば正確な実行時間が計測出来ます。
※Explainは実行計画のみで、Explain Analyzeは実行計画・実行に
 掛かるコスト・実行時間が計測出来ます。

 但し、SQL実行時に他のプロセス等で、ディスクに頻繁にアクセス
されてた場合は、当然実行時間が変化します。
(まあ、実際の実行時間なのでやむなしかと)

 又気になる点が一つあり、性能試験で使用する端末のスペック=本番
で使用する端末のスペック、且つデータファイルの配置・データ件数が
全て同じ環境での性能試験でしょうか?

性能試験を行っている環境(データ)が、本番と全く同じで無い限り、
検索対象とするデータ件数及びヒットするデータ件数等が異なり、性能
試験そのものが意味を成さない状態に成ることもあると思われます。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-10-22 18:26
すいません漏れがありました。

Explain Analyzeは実際にSQLが実行される為、以降に同じ
SQLを実行した場合はキャッシュデータが使用されます
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2007-10-22 18:33
「10秒ほど」の時間を安定的に計測したいという目的でしょうか?
だとしたらPostgreSQLのサービスだけじゃなくて、
一度ハードウェアの電源を切るところまでしないと
OSの管理するキャッシュ(PostgreSQLはファイルシステムを通してI/Oします)や
HDDのハードウェアに実装されているキャッシュがヒットするので、
「10秒ほど」の時間を安定的に計測することはできないでしょう。

>上総さん
「端末」だけじゃなくて「サーバ」の再起動も必要ですよね?
なつ
会議室デビュー日: 2005/08/18
投稿数: 18
投稿日時: 2007-10-22 22:45
こんばんは。
ご回答ありがとうございます。

サーバの電源を切らないとだめですか〜。
面倒ですがしょうがないですね。
libpq.dllとはphpなどで簡単に利用できるものでしょうか?
調べてみます。

本番環境のDBと試験環境のDBはスペックは違います。
既存のSQLとそのSQLを改善したSQLを比較する必要があって
それぞれのレスポンスを図って改善率を出せと顧客に言われまして。
本番環境でも同じ改善率になるわけではないと思いますが
とりあえずの提示にするつもりなんです。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-10-23 01:53
う〜ん、libpq.dllがC言語でしか使用出来ないと思います。

http://www.postgresql.jp/document/current/html/libpq.html

プログラム作成とテストの手間を考えると、サーバー再起動が
最もベストかと思います。
1

スキルアップ/キャリアアップ(JOB@IT)