タグのアーカイブ: ludia (RSS)

ludia.max_n_sort_resultを使うときの注意

関口さんのブログで紹介されてる通り、ludia.max_n_sort_resultパラメータを適切に設定してやることによりludiaのパフォーマンスは大幅に向上します。

が、このパラメーターをSETコマンドで変更しようとすると
ryo=# SET ludia.max_n_sort_result TO 1000;
ERROR: unrecognized configuration parameter "ludia.max_n_sort_result"

と怒られてしまうことがあります。

これはどうやら、postgresql.confにデフォルト設定
custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.seqscan_flags = 1
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512

をちゃんと書いておかないと、このエラーになってしまう模様です。

このデフォルトのパラメーターを書かなくてもインデックス作成も検索動くので、ちょっと嵌るかもしれません。

PostgreSQLで特定のテーブルのみautovacuumの対象外にする

PostgreSQL
Creative Commons License photo credit: isriya

PostgreSQLの8.3に対応のLudiaの1.5がリリースされたのですが、8.3で利用するとvacuum非対応になり、vacuum後はREINDEXが必要になっていましました。
これは8.3でのHOTがらみの変更で、以前と同じ仕組みだと対応できないということなのでとりあえずは仕方ないのですが、運用上はなんとか対応する必要があります。

ひとつはautovacuumをoffにして運用する方法です。

もうひとつは、Ludiaのインデックスを使用しているテーブルだけautovacuumの対象外にして運用する方法です。

どちらにしても、Ludiaのインデックスはvacuum実行後にreindexを行う必要がありますが、Ludiaのインデックスを使用しているのは一部のテーブルのみという場合、そこだけautovacuumの対象外にして、(たとえ、それがスクリプトの仕事だとしても)定期メンテナンスを行うのが楽です。

特定のテーブルをautovacuumの対象外にするには、以下のようにシステムカタログpg_autovacuumにレコードを作成します。

まず、テーブルのpg_class.oidを調べます。
ryo=# select oid,relname from pg_class where relname = 'groups';
oid | relname
-------+---------
19123 | groups
(1 row)

pg_autovacuum.enabled=falseとしてレコードを作成します。
ryo=# insert into pg_autovacuum values (19123, false, -1, -1, -1, -1,
-1, -1, -1, -1);
INSERT 0 1
Time: 88.973 ms

autovacuumとpg_autovacuumについてはドキュメントの
23.1. 定常的なバキューム作業 – 23.1.4. 自動バキュームデーモン
44.10. pg_autovacuum
を参考にどうぞ。

Ludiaメモ

みんな大好きPostgreSQLにSennaを組み込むLudiaのREADME見ながらひととおりやったときのメモ
続きを読む »