# QAD Progress OpenEdge Storage Area Sizing Calculator

> Source: https://netray.co/tools/qad-openedge-storage-area-sizing-calculator
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

Work out records per block, block count and storage area size today and after growth for a large QAD table such as tr_hist or ld_det.

## Category

other-erp

## Erp

QAD

## Audience

- Progress DBA
- QAD administrator
- Infrastructure engineer

## Tool

**Kind:** calculator

**Inputs:**

#### Rows in table

**Key:** rows

**Type:** number

**Default:** 25000000

**Min:** 1

**Step:** 100000

**Unit:** rows

**Help:** Current record count, from tabanalys.

#### Mean record size

**Key:** avg_record_bytes

**Type:** number

**Default:** 220

**Min:** 10

**Step:** 10

**Unit:** bytes

**Help:** The Mean column for the table in proutil dbanalys or tabanalys.

#### Database block size

**Key:** block_size

**Type:** select

**Default:** 8192

**Options:**

##### 1 KB

**Value:** 1024

##### 2 KB

**Value:** 2048

##### 4 KB

**Value:** 4096

##### 8 KB

**Value:** 8192

#### Records per block (RPB)

**Key:** rpb

**Type:** select

**Default:** 64

**Options:**

##### 16

**Value:** 16

##### 32

**Value:** 32

##### 64

**Value:** 64

##### 128

**Value:** 128

##### 256

**Value:** 256

#### Create limit

**Key:** create_limit_bytes

**Type:** number

**Default:** 150

**Min:** 0

**Step:** 10

**Unit:** bytes

**Help:** Space kept free in each block for record growth.

#### Annual growth

**Key:** annual_growth_pct

**Type:** number

**Default:** 12

**Min:** 0

**Step:** 1

**Unit:** %

#### Planning horizon

**Key:** years

**Type:** slider

**Default:** 3

**Min:** 1

**Max:** 10

**Step:** 1

**Unit:** years

#### Fixed extent size

**Key:** extent_size_gb

**Type:** number

**Default:** 2

**Min:** 0.5

**Step:** 0.5

**Unit:** GB

**Outputs:**

#### Records that fit by space

**Key:** rows_per_block_space

**Expr:** floor((block_size - create_limit_bytes - 64) / (avg_record_bytes + 2))

**Format:** integer

**Description:** Usable block space (block size minus create limit minus about 64 bytes of header) divided by mean record size plus a 2-byte directory entry.

#### Effective records per block

**Key:** rows_per_block

**Expr:** max(1, min(rpb, rows_per_block_space))

**Format:** integer

**Description:** The lower of RPB and what fits by space.

#### Blocks needed

**Key:** blocks_needed

**Expr:** ceil(rows / rows_per_block)

**Format:** integer

#### Area size today

**Key:** size_gb_now

**Expr:** blocks_needed * block_size / 1073741824

**Format:** decimal

**Primary:** true

**Description:** GB of data blocks, excluding index areas.

#### Area size at end of horizon

**Key:** size_gb_future

**Expr:** size_gb_now * pow(1 + annual_growth_pct / 100, years)

**Format:** decimal

**Primary:** true

#### Fixed extents needed

**Key:** extents_needed

**Expr:** ceil(size_gb_future / extent_size_gb)

**Format:** integer

**Description:** Plus one variable extent at the end of the area.

#### Unused record slots

**Key:** wasted_slot_pct

**Expr:** if(gt(rpb, rows_per_block_space), (rpb - rows_per_block_space) / rpb * 100, 0)

**Format:** percent

**Description:** Unused row addresses per block when RPB is higher than what fits. Costs address space only, not disk.

#### Unused block space

**Key:** unused_space_pct

**Expr:** if(lt(rpb, rows_per_block_space), ((block_size - create_limit_bytes - 64) - rpb * (avg_record_bytes + 2)) / block_size * 100, 0)

**Format:** percent

**Description:** Disk space left empty in each block when RPB is too low. This is the costly case.

**Chart:**

#### Area size today vs mean record size

**Type:** line

**X:** avg_record_bytes

**From:** 50

**To:** 1000

**Steps:** 20

**Series:**

- size_gb_now

**Disclaimer:** Block header overhead and per-record overhead are approximations. Use dbanalys on a copy of your database to check real fill, and size index areas separately.

## Content

**Intro:** This calculator sizes a Type II storage area for a large QAD table, such as tr_hist or ld_det, on Progress OpenEdge 11 and 12. It shows how records per block, block size and mean record size decide how many blocks you need, and how big the area grows.

**Sections:**

#### How to use it

**Body:** Run proutil dbname -C dbanalys (or tabanalys) on a recent copy of the QAD database and take the record count and the Mean record size for the table. Pick the database block size and the RPB you plan for the area, keep the create limit at its default unless you changed it, and enter growth and horizon. The two primary outputs give the area size today and at the end of the horizon; the extents output tells you how many fixed extents of your chosen size to define in the structure file, with a variable extent last.

**Bullets:**

- Block size is set when the database is created: changing it means a dump and load.
- RPB is set per area: changing it means moving the table to a new area.
- Size index areas separately; this tool covers data blocks only.

#### The method behind it

**Body:** Each data block holds at most RPB records, and also only as many as fit in the space left after the block header and the create limit. Usable space is block size minus create limit minus about 64 bytes of header, divided by mean record size plus 2 bytes for the record's directory entry. The effective records per block is the lower of the two. Blocks are rows divided by that, rounded up, and size is blocks times block size. Growth compounds yearly. RPB must be a power of 2 from 1 to 256. Overheads are approximations: the dbanalys fill figures on your own data are the real check.

#### Worked example: 25 million rows at 220 bytes

**Body:** With 8 KB blocks and a 150-byte create limit, usable space is about 7,978 bytes, so 35 records of 222 bytes fit. With RPB 64 the block fills by space at 35 records; 25,000,000 rows need about 714,286 blocks, about 5.45 GB. At 12 percent growth for 3 years the area reaches about 7.66 GB, or 4 fixed extents of 2 GB. Choosing RPB 32 instead caps each block at 32 records and leaves about 10 percent of every block empty, so the area is about 9 percent bigger for no benefit.

#### Choosing RPB and gotchas

**Body:** A practical rule: divide the block size by mean record size plus overhead, then pick the next power of 2 above that number. Too high an RPB only wastes row addresses; too low wastes disk and buffer pool. Tables with very different record sizes belong in different areas. QAD databases often use 8 KB blocks on Unix and Linux, but that is a common practice, not a rule. Add extents online with prostrct add or addonline before the last fixed extent fills.

**Cta:** If you want to ask your QAD database about growth, history and open transactions in plain English on your own servers, we can set that up alongside your DBA routines.

**Faq:**

#### How do I choose records per block in OpenEdge?

**Answer:** Take the mean record size from dbanalys, add overhead, divide the block size by that figure and choose the next power of 2 above the result, between 1 and 256. Setting RPB slightly high wastes only row addresses; setting it low leaves empty space in every block. Put tables with very different record sizes in separate areas.

#### Where do I get the mean record size for a QAD table?

**Answer:** Run proutil dbname -C dbanalys or proutil dbname -C tabanalys against the database or a recent copy. The record block summary lists each table with record count, total size and the Min, Max and Mean record size. Use the Mean figure in this calculator and rerun the analysis yearly as data changes.

#### Can I change the block size of a QAD database?

**Answer:** Not in place. The block size is fixed when the database is created, so changing it means creating a new database with the new block size and dumping and loading the data. Many sites combine that with an upgrade or a move to Type II storage areas, because the dump and load already requires downtime.

#### How do I add space to a storage area?

**Answer:** Write a structure file with the new extents for the area and run prostrct add with the database offline, or prostrct addonline while it runs on versions that support it. Then check the result with prostrct list or prostrct statistics. Add space before the variable extent starts growing on a busy system.

## Search terms

openedge records per block calculator, progress rpb storage area, qad database sizing, openedge type ii storage area, qad tr_hist size, qad upgrade, qad erp

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
