# min_parallel_index_scan_size

> min_parallel_index_scan_size — Sets the minimum amount of index data for a parallel scan. Observed in PG10–19 Beta 3; its last measured boot default is 512 KiB (64 × 8kB) in PG19 Beta 3, with user context. This is a beta-snapshot fact and can change before PostgreSQL 19 GA.
---

> [!NOTE]
> **Fact — official short description:** “Sets the minimum amount of index data for a parallel scan.”

## Identity {#identity}

| Field | Value | Meaning |
| --- | --- | --- |
| Type | `integer` | Upstream pg_settings type |
| Context | `user` | Settable by an ordinary user |
| Unit | `8kB` | Raw unit |
| Range | `0` – `715827882` | Raw limits in the last observed version |
| Enum values | — | — for non-enum types |
| Category | Query Tuning / Planner Cost Constants | Upstream classification |
| Latest boot value | `64` | 512 KiB (64 × 8kB) |
{.fields meta="-"}

## Lifecycle {#lifecycle}

| Fact | Value |
| --- | --- |
| First observed | PG10 |
| Present in | PG10–19 Beta 3 |
| Removed in | No |
| Introduction commit | [`51ee6f3160d2`](https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=51ee6f3160d2e1515ed6197594bda67eb99dc2cc) — Replace min_parallel_relation_size with two new GUCs. |
| Commit date | 2017-02-15 |
| Discussion | [thread 1](https://postgr.es/m/CAA4eK1KowGSYYVpd2qPpaPPA5R90r++QwDFbrRECTE9H_HvpOg@mail.gmail.com) · [thread 2](https://postgr.es/m/CAA4eK1+TnM4pXQbvn7OXqam+k_HZqb0ROZUMxOiL6DWJYCyYow@mail.gmail.com) |

## Default history {#default-history}

| Versions | Raw `boot_val` | Unit | Human value |
| --- | --- | --- | --- |
| PG10–19 Beta 3 | `64` | `8kB` | 512 KiB (64 × 8kB) |
{.full-width caption="Measured PG9.0–19 Beta 3 boot defaults"}

## How it works {#mechanism}

min_parallel_index_scan_size is a planner eligibility floor: parallel scan paths are not considered unless index pages estimated to be visited reaches the configured size.

Crossing this floor does not guarantee a parallel plan. The planner still compares costs, checks parallel safety, and requests workers subject to max_parallel_workers_per_gather and the cluster worker pools.

The index threshold also participates in deciding whether an index can be vacuumed in parallel. Its user context permits session- or transaction-local changes; newly performed or newly planned work sees the value.

## Tuning advice {#tuning-advice}

> [!TIP]
> **Advice.** These are workload-specific starting points and must be validated with measurements.

| Workload | Guidance |
| --- | --- |
| OLTP | A higher min_parallel_index_scan_size can reduce parallel startup on short OLTP scans, but confirm that reports and maintenance do not regress. Pigsty's OLTP/crit value is a policy bias, not a resource limit. |
| OLAP | Keep the upstream threshold unless small but expensive scans are wrongly excluded. Lowering min_parallel_index_scan_size can raise planning and worker overhead when many queries run concurrently. |
| Small nodes | Prefer a conservative or higher threshold on a small host where worker startup and memory contention dominate. Coordinate it with max_parallel_workers_per_gather rather than tuning it alone. |
{.full-width}

## Pigsty {#pigsty}

Values use the fixed 8-vCPU, 32-GiB, 100-GiB SSD fixture and render the current Pigsty templates for PG19 Beta 3; this does not assert current Pigsty support for that historical or beta release.

| Template | Effective value | Versus upstream boot | Source expression |
| --- | --- | --- | --- |
| OLTP | `2MB` | different | `2MB` |
| OLAP | Unmodified | — | — |
| CRIT | `2MB` | different | `2MB` |
| TINY | Unmodified | — | — |
{.full-width}

> [!CAUTION]
> **Advice — pending human review.** Fact from the current Pigsty template projection: OLTP: PG10–19 Beta 3 = 2MB (dcs); OLAP: PG10–19 Beta 3 unmodified; CRIT: PG10–19 Beta 3 = 2MB (dcs); TINY: PG10–19 Beta 3 unmodified. Advice, pending human review — Editorial inference, pending maintainer review: The OLTP/crit value raises the index eligibility floor to reduce parallel tendency, while OLAP and tiny retain upstream behavior.

## Common pitfalls {#common-pitfalls}

- Assuming the threshold caps actual bytes read; it only controls planner eligibility.
- Expecting a parallel plan merely because the size estimate crosses the threshold.
- Lowering it without budgeting workers and per-node memory under concurrency.
- Comparing the raw numeric value without applying its 8kB block unit.

## Related parameters {#related-parameters}

[`max_parallel_workers_per_gather`](/parameters/max-parallel-workers-per-gather/) · [`parallel_setup_cost`](/parameters/parallel-setup-cost/) · [`parallel_tuple_cost`](/parameters/parallel-tuple-cost/) · [`max_parallel_workers`](/parameters/max-parallel-workers/) · [`enable_indexscan`](/parameters/enable-indexscan/)

## References {#references}

- [PostgreSQL 19 Beta 3 — min_parallel_index_scan_size](https://www.postgresql.org/docs/19/runtime-config-query.html#GUC-MIN-PARALLEL-INDEX-SCAN-SIZE)
- [PostgreSQL 19 release notes](https://www.postgresql.org/docs/19/release-19.html)
- [Machine-readable GUC export](/data/guc.jsonl)
