2011年12月15日木曜日

PostgreSQL で、STATISTICS (列の統計精度) を変更した箇所を忘れたら

お世話になっております、サイオス 那賀です。

PostgreSQL では、特定のテーブルの特定のカラムごとに、統計情報を取得する際の精度を指定することで、大きなテーブルでは荒くなりがちな統計情報の精度を調整することができるようになっています。

postgres=# ALTER TABLE users ALTER COLUMN name SET STATISTICS 500;
ALTER TABLE

しかし、いろいろやっていると、データベース全体のどこに指定をしたか忘れてしまいます。そんな時は、以下のようにすれば変更箇所を一覧することができます。

postgres=# SELECT c.relname, a.attname, a.attstattarget
  FROM pg_attribute AS a, pg_class AS c
  WHERE c.oid = a.attrelid and a.attstattarget > 0;
 relname | attname | attstattarget
---------+---------+---------------
 users   | name    |           500
(1 row)

ところでこの値のデフォルトである "default_statistics_target" パラメータは、VACUUM の効率やマシン性能の向上に合わせて、徐々に上がっています。

18.6 問い合わせ計画 - PostgreSQL 8.3 文書

default_statistics_target(integer)…デフォルトは10です。

18.6 問い合わせ計画 - PostgreSQL 8.4 文書

default_statistics_target(integer)…デフォルトは100です。

以前は、10 では小さすぎるので調整をすると性能が上がりましたが、100 もあれば、よほど大きなテーブルでなければ問題なくなった模様。

では。

0 件のコメント:

コメントを投稿