[pgsql-jp: 40639] Re: PostgreSQLキャッシュクリア方法についてご質問

Tatsuhito Kasahara kasahara.tatsuhito @ oss.ntt.co.jp
2010年 12月 22日 (水) 17:28:06 JST


笠原と申します。

toshihideka4316 @ zenrin.co.jp wrote:
> SQLの速度計測を行うことが多々あるのですが、
> 2度目に実行した場合はキャッシュがきいているのか速度が速くなります。
> (例えば1度目で速度が数十秒であるSQLが2度目以降は1秒かからず返ってきます)
> (サーバ、クライアント共にPostgreSQL8.2.14、ODBCドライバver8.2.4です)
> 
> そこで質問なのですが、
> ・キャッシュをクリアする方法は無いでしょうか。
> (サーバの再起動は厳しいです)
PostgreSQLの共有バッファは PostgreSQL の再起動でリセットできますが、
OS のファイルキャッシュが効くはずなので、ちょっと難しい話ですね・・
# OS のファイルキャッシュの振る舞いも Windows や Linux で違いますし。

Linux であれば、DB の乗っているデバイスを unmount/mount することで、
キャッシュをクリアできると思います。

他、Linux kernel 2.6.16 以降であれば
sync
と
echo 3 > /proc/sys/vm/drop_caches
でいけるようです。
# man proc あたりを参照しました。

> ・または、キャッシュの影響を受けずにSQLの速度計測を行う方法は無いでしょうか。
PostgreSQLの稼動統計情報 (pg_stat_user_tables や pg_statio_user_tables)や
EXPLAIN ANALYZE、iostat などの情報を元に、間接的に推測する方法が考えられますが・・
面倒ですし、高い精度を求めるのはとても難しいです。

手軽にできる速度計測の方法は思いつきませんでした。

参考になれば幸いです。
-- 
NTT OSSセンタ

笠原辰仁


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