Attached is an updated DSM patch. I've left the core function of DSM only
and dropped other complicated features in this release.

VACUUM finishs faster with the patch, but it's obvious... DSM vacuum
sweeps only pages that have many dead tuples and leave some of them
after vacuum.

I'll examine the sweep behavior and the performance from now.

* Features
  - DSM tracks pages worth vacuuming using 1bit/page bit.
    The threshold is two dead tuples or 2kB of deadspaces.
  - DSM is constructed at page flush. Almost of the works are done by
    bgwriter if it is properly configured.
  - 'VACUUM' command uses DSM. 'VACUUM ALL' always scans all pages.
  - This is including n_dead_tuples statistics fix.

* Configuration
  - max_dsm_relations (=1000)
        Counterpart to max_fsm_relations, but count tables only;
        Indexes are not tracked by DSM.
  - max_dsm_pages (=1024000)
        Counterpart to max_dsm_pages. Default values are configurated to
        5 times of max_fsm_pages at initdb.
  - min_dsm_target (=8MB)
        Minimum size of tables of which dead space is tracked
        to avoid tracking small tables, including system catalogs.

* Limitation
  - XID-wraparound vacuum is still required. VACUUM with DSM cannot
    update relfrozenxid, so we sometimes needs full-scan.
  - No recovery support. All contents of DSM and FSM are lost on crash.
  - DSM uses fixed size memory allocated at server start. We cannot change
    the value on-the-fly. If we want the feature, we need something like
    shared-memory-allocator or swap-supported memory management module.

ITAGAKI Takahiro
NTT Open Source Software Center

Attachment: deadspacemap_v3.patch.gz
Description: Binary data

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [EMAIL PROTECTED] so that your
       message can get through to the mailing list cleanly

Reply via email to