TT-RSS用PostgreSQL運用メモ

提供: mechanical Wiki
ナビゲーションに移動 検索に移動

Tiny Tiny RSS(TT-RSS)用PostgreSQLの運用方法について記載する。

方針

サイズが比較的大きく、かつ更新・削除がそれなりに発生するテーブルについては、自動VACUUMの発生間隔を縮める。 HOTが効き、削除量が少ないテーブルについては、1日1回はVACUUMされるよう、削除行数のみで自動VACUUMの発生間隔を規定する。 また、特に更新が多いテーブルは、更新用空き領域を確保する(fillfactorを設定する)。 フィードエントリの更新や削除により、テーブルやインデックスが断片化すると思われるテーブルは、定期的にCLUSTERする。

フィードの内容が登録されるttrss_entriesテーブルには、pg_bigmインデックスを張っており、その不要エントリや待機リストが整理されるようにする。

テーブル設定

テーブル設定(ALTER TABLE)により、自動VACUUMとfillfactorの設定をする。 また、CLUSTER対象のテーブルには、CLUSTERキーも設定する。

自動VACUUM、fillfactor設定

  • 設定内容
    • 自動VACUUM発生間隔: 1日の削除行数程度
    • fillfactor: 80%まで詰める(20%の更新用空き領域)
  • 対象テーブル
    • ttrss_entries
    • ttrss_user_entries
  • 設定内容
    • 自動VACUUM発生間隔: 10%の不要行発生ごと
    • fillfactor: 80%まで詰める(20%の更新用空き領域)
  • 対象テーブル
    • ttrss_feeds
    • ttrss_counters_cache

自動VACUUM設定

  • 設定内容
    • 自動VACUUM発生間隔: 10%の不要行発生ごと
  • 対象テーブル
    • ttrss_feedbrowser_cache

CLUSTER設定

  • ttrss_entries
    • ttrss_entries_updated_idx
    • フィードエントリ自体の更新日付(TT-RSS側の更新ではない)
  • ttrss_user_entries
    • ttrss_user_entries_ref_id_index
    • 関連するttrss_entriesのID(概ね、TT-RSSの登録順≒フィードエントリ自体の更新順)
  • ttrss_feeds テーブルサイズが小さく(3ページ)、更新過多ですぐにCLUSTER性が崩れるため、CLUSTER対象外とする。
    • ttrss_feeds_pkey
    • フィードID(≒フィードの登録順)
  • ttrss_counters_cache テーブルサイズが小さい(1ページ)ため、CLUSTER対象外とする。
    • ttrss_counters_cache_feed_id_idx
    • 関連するttrss_feedsのID

以上の設定を行うスクリプトをttrss-ddladd.sqlに添付する。

定時運転

CLUSTERは、月次で行う。

手動VACUUMは、日次で行う。 日次メンテナンスは廃止。

それぞれの実行スクリプトを以下に添付する。