Glossary

The vocabulary behind every incident

Understand the language first and the error pages read faster. Each term is defined in plain English, tied to why it matters operationally, and pointed at the file where it lives in the PostgreSQL source.

beginner

MVCC

Multi-Version Concurrency Control lets readers and writers proceed concurrently by keeping row versions instead of blocking every read.

It explains why PostgreSQL can serve consistent reads under write pressure and why vacuum is a first-class operational concern.

Related4000140P01

Where it lives in the source

src/backend/access/heap/heapam.c

advanced

Visibility map

A compact structure that records whether a heap page is all-visible or all-frozen, which helps PostgreSQL skip unnecessary heap checks.

It directly affects index-only scans, autovacuum efficiency, and the latency profile of read-heavy tables.

Related40001

Where it lives in the source

src/backend/access/heap/visibilitymap.c

beginner

Write-Ahead Log (WAL)

An append-only record of every change written before the change reaches the data files, so committed work survives a crash and can be replayed during recovery.

WAL underpins durability, crash recovery, replication, and point-in-time restore — most availability decisions trace back to it.

Related40001

Where it lives in the source

src/backend/access/transam/xlog.c

beginner

Autovacuum

The background process that reclaims space from dead tuples and refreshes planner statistics without a human running VACUUM by hand.

When autovacuum falls behind, tables bloat, indexes slow down, and transaction-ID wraparound risk climbs — it is a first-order operational concern.

Related55P03

Where it lives in the source

src/backend/postmaster/autovacuum.c

intermediate

Dead tuple

A row version that is no longer visible to any transaction but still occupies space on the heap page until vacuum removes it.

Dead tuples are the raw material of bloat; understanding them explains why UPDATE-heavy tables need aggressive vacuuming.

Related55P03

Where it lives in the source

src/backend/access/heap/pruneheap.c

advanced

Transaction ID wraparound

PostgreSQL numbers transactions with a 32-bit counter; if very old rows are never frozen, the counter can appear to wrap and hide committed data. Vacuum freezing prevents it.

Wraparound is one of the few conditions that can force PostgreSQL into a protective read-only state — a genuine outage risk on neglected databases.

Related40001

Where it lives in the source

src/backend/access/transam/varsup.c

intermediate

TOAST

The Oversized-Attribute Storage Technique that transparently compresses and/or moves large column values into a side table so main rows stay within a page.

TOAST explains why wide text/JSON columns behave differently for storage, compression, and I/O than small scalar columns.

Related22001

Where it lives in the source

src/backend/access/common/toast_internals.c

beginner

Shared buffers

The shared-memory cache PostgreSQL uses to hold heap and index pages, reducing how often it must read from the operating system and disk.

It is the most discussed memory setting for good reason: it shapes cache hit ratio and the read latency profile of the whole instance.

Related53300

Where it lives in the source

src/backend/storage/buffer/bufmgr.c

intermediate

Checkpoint

A point at which PostgreSQL flushes dirty buffers to disk and records a WAL position, bounding how much WAL must be replayed after a crash.

Checkpoint timing trades recovery time against write spikes; tuning it is central to smoothing I/O on write-heavy systems.

Related53300

Where it lives in the source

src/backend/postmaster/checkpointer.c

intermediate

Lock manager (heavyweight locks)

The subsystem that grants and queues table- and object-level locks, tracking what each transaction holds and what it waits for.

Every blocking incident, lock timeout, and deadlock is ultimately a story told by the lock manager's wait queues.

Related55P0340P01

Where it lives in the source

src/backend/storage/lmgr/lock.c

intermediate

Row-level lock

A lock taken on individual tuples (for example by UPDATE or SELECT ... FOR UPDATE) so concurrent writers coordinate without blocking readers.

Row locks are where most application-level contention lives; how you order and hold them decides whether you deadlock.

Related40P0155P03

Where it lives in the source

src/backend/access/heap/heapam.c

advanced

Serializable Snapshot Isolation (SSI)

PostgreSQL's implementation of SERIALIZABLE that detects dangerous read/write dependency cycles between concurrent transactions and aborts one to preserve serial equivalence.

SSI is why SERIALIZABLE workloads must be prepared to retry transactions that fail with a serialization error.

Related40001

Where it lives in the source

src/backend/storage/lmgr/predicate.c

advanced

Deadlock detector

A routine that runs after deadlock_timeout on a waiting backend, builds the wait-for graph, and cancels one transaction when it finds a lock cycle.

It explains the exact behavior behind SQLSTATE 40P01: PostgreSQL does not prevent deadlocks, it detects and breaks them.

Related40P01

Where it lives in the source

src/backend/storage/lmgr/deadlock.c

advanced

HOT update (heap-only tuple)

An optimization where an UPDATE that does not change any indexed column can store the new row version on the same page without adding index entries.

HOT updates dramatically reduce index bloat and write amplification, which is why avoiding needless index columns pays off.

Related40001

Where it lives in the source

src/backend/access/heap/heapam.c

intermediate

Query planner

The cost-based optimizer that turns a parsed query into an execution plan by estimating the cost of alternative scans, joins, and orderings.

Reading and influencing planner decisions (via statistics, indexes, and settings) is the core skill of query performance work.

Related42P01

Where it lives in the source

src/backend/optimizer/plan/planner.c

intermediate

Table statistics (ANALYZE)

Sampled distributions of column values stored in pg_statistic that the planner uses to estimate row counts and choose plans.

Stale or missing statistics are a leading cause of sudden bad plans; ANALYZE is often the cheapest performance fix.

Related42P01

Where it lives in the source

src/backend/commands/analyze.c

beginner

Backend / connection limit

Each client connection is served by its own backend process; max_connections caps how many can exist at once, after which new connections are refused.

It explains why connection pooling matters and why unbounded client concurrency turns into SQLSTATE 53300 under load.

Related5330008006

Where it lives in the source

src/backend/postmaster/postmaster.c