Holdings with High Item Counts Performance Impact Analysis

Holdings with High Item Counts Performance Impact Analysis

Overview

Performance Testing Report Overview

This document presents the results of volume testing for Holding records with different item counts.

It includes the results of the impact on other LoC workflows response times when editing holdings records with 10K items attaching to them.

Ticket: https://folio-org.atlassian.net/browse/PERF-1289

Summary

  • Volume tests show that Holdings editing response time grows significantly after 1200 items (4,7 sec). 2000 items took almost 13 seconds, 10000 items ~ 1 minute.

  • Test editing a single Holdings record while all master script flows running in the background:

    • No observable LoC workflows response times degradation while editing of a Holdings record with 10k items

    • Editing holdings records with 10k under average LoC load increases the editing response time by 30%, rising from 60 seconds to 78 seconds.

    • No crashes or module restarts during tests observed.

    • CPU utilized in accordance with load.

    • No memory issues happened.

  • Test editing a Holdings record continuously while all other LoC flows are running in the background (not a realistic scenario)

    • Result: measurable degradation in 218 out of 365 transactions (59.7%). The impact is concentrated in the Finance/Ledger and ListApp operations because of contention on shared backend services like mod-inventory-storage.

Test runs

Volume testing experiments (only tested editing individual holdings records with various number of items attaching to them):

Test #

Item count

Tenant

Test #

Item count

Tenant

T1

700

cs00000_int_0002

T2

1001

cs00000_int_0002

T3

1230

cs00000_int_0002

T4

1499

cs00000_int_0002

T5

2002

cs00000_int_0002

T6

2160

cs00000_int_0004

T7

5861

cs00000_int_0002

T8

9696

cs00000_int_0002

T9

10795

cs00000_int_0004

T10

27713

cs00000_int_0004

Tests that measured performance of editing the holding records with LoC workfows running in the background:

Tests

Description

Duration

Tests

Description

Duration

Test #1

All workflows, Data Export All, Data Import without editing big Holdings

1 hour

Test #2

All workflows, Data Export All, Data Import with single editing of a big Holdings

1 hour

Test #3

All workflows, Data Export All, Data Import with editing big Holdings records continously

1 hour

Test #4

Repeat of test #1

1 hour

Results

Response times

Volume testing experiments:

Test #

Holding Id

Item count

Tenant

Response times, sec

Test #

Holding Id

Item count

Tenant

Response times, sec

T1

864f750e-e6f3-5b88-a456-b5b5f0b79797

700

cs00000_int_0002

3

T2

f26f4290-84cd-5b5c-9c48-299f207aded9

1001

cs00000_int_0002

3,3

T3

3c9199ae-ce80-5f32-8c53-1024ae17f560

1230

cs00000_int_0002

4,7

T4

b6c49272-a85b-5b9a-b83d-e42b7bd38da7

1499

cs00000_int_0002

6,3

T5

f814c846-9f29-5a5f-a71f-4beba3044cd7

2002

cs00000_int_0002

13

T6

1a0888b9-757d-5fad-814b-66b9f08d7b59

2160

cs00000_int_0004

13

T7

94e59f5a-d0ec-5e17-904f-3702c6d7ec3b

5861

cs00000_int_0002

35

T8

52cf4cd0-307e-534b-90d0-ef5c6d721ce0

9696

cs00000_int_0002

60

T9

4fdb5f47-c608-5da8-9bce-3d523deac200

10795

cs00000_int_0004

87

T10

6136b24d-d95a-5091-9f11-cf072f270c24

27713

cs00000_int_0004

194

The graph added just to visualize the response times results from T1 - T10, x-axis represents the number of items attached to a holdings record while the y-axis shows the response time in seconds.

image-20260403-090949.png

Comparison tables

transactions

Samples without HE

Average without HE, ms

pct95, ms

Samples with HE

Average with HE, ms

pct95, ms

NumOfErrors

Error Rate (%)

Delta, ms

Delta, %

transactions

Samples without HE

Average without HE, ms

pct95, ms

Samples with HE

Average with HE, ms

pct95, ms

NumOfErrors

Error Rate (%)

Delta, ms

Delta, %

TC_AIE: Create Invoices Workflow cs00000int

15

5341

11552

15

4970

9268

 

 

-371

-7%

TC_AIE: Edit Invoices Workflow cs00000int

15

5508

6823

15

5827

6448

 

 

319

6%

TC_AIE: Invoices Approve cs00000int

7

2749

4632

7

3718

4454

 

 

969

35%

TC_AIE: Paying Invoices cs00000int

7

2962

3603

7

2618

2922

 

 

-344

-12%

TC_APO: Create Invoice Lines

538

3357

4300

534

3353

4355

 

 

-4

0%

TC_APO: Invoices Approve cs00000int

6

1835

5103

6

1727

2213

 

 

-108

-6%

TC_APO: Load invoice| Create |Add POLine 85| Workflow cs00000int

6

554085

568947

6

562384

573921

 

 

8299

1%

TC_APO: Paying Invoices cs00000int

6

3118

3546

6

2889

3300

 

 

-229

-7%

TC_BE: HOLDINGS_RECORD upload cs00000int_0001

1

67923

67923

1

67112

67112

 

 

-811

-1%

TC_BE: HOLDINGS_RECORD upload cs00000int_0002

1

66237

66237

1

66027

66027

 

 

-210

0%

TC_BE: HOLDINGS_RECORD_rollback In-app edit cs00000int_0001

1

278619

278619

1

293612

293612

 

 

14993

5%

TC_BE: HOLDINGS_RECORD_rollback In-app edit cs00000int_0002

1

157679

157679

1

162571

162571

 

 

4892

3%

TC_BE: HOLDINGS_RECORD_rollback upload cs00000int_0001

1

56359

56359

1

66399

66399

 

 

10040

18%

TC_BE: HOLDINGS_RECORD_rollback upload cs00000int_0002

1

56353

56353

1

57142

57142

 

 

789

1%

TC_BE: ITEM upload cs00000int_0001

1

61560

61560

1

71325

71325

 

 

9765

16%

TC_BE: ITEM upload cs00000int_0002

1

67394

67394

1

63850

63850

 

 

-3544

-5%

TC_BE: ITEM_rollback upload cs00000int_0001

1

67479

67479

1

81827

81827

 

 

14348

21%

TC_BE: ITEM_rollback upload cs00000int_0002

1

57318

57318