Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
outlinetrue

...

Test №

Date

Test Conditions

Results

1

12/12/24, 9:48 AM UTC

PO with PO Lines (1) + locations (5) + Change instance connection (Move holdings)

Completed
212/12/24, 11:32 AM UTC

PO with PO Lines (10) + locations (3) + Change instance connection (Create new holdings)

Completed
3

12/12/24, 1:21 PM UTC

PO with PO Lines (50) + locations (3) + Change instance connection (Move holdings, Find or Create new holdings)

Completed

...


Transactions

Response Time (milliseconds)
Data size 500kData size 1 millionData size 5 millionData size 500kData size 1 millionData size 5 million
AverageAverageAveragepct90pct90pct90
GET audit-data/acquisition/order/[order_10]272834727489
GET audit-data/acquisition/order-line/[po_line_id_10]292729777090
GET audit-data/acquisition/piece/]pieces_10]/status-change-history282827646869
GET audit-data/acquisition/order/[order_50]181618584748
GET audit-data/acquisition/order-line/[po_line_id_50]2023405360344
GET audit-data/acquisition/piece/]pieces_50]/status-change-history172019445151
GET audit-data/acquisition/order/[order_100]222023625966
GET audit-data/acquisition/order-line/[po_line_id_100]272532656375
GET audit-data/acquisition/piece/]pieces_100]/status-change-history222123616260
GET audit-data/acquisition/order/[order_1000]4752481009881
GET audit-data/acquisition/order-line/[po_line_id_1000]122126132212231222
GET audit-data/acquisition/piece/]pieces_1000]/status-change-history60505311710596



Comparison

Test №1-№2-№3

The following table compares the results between tests №1,  №2 and №3. 

  • Open Order: Response times increased nearly 10x in Test 3 compared to Test 1 due to the higher load (50 items per order).
  • Unopen Order: Similarly, response times grew approximately 4-5x in Test 3.

...

Here we can see that all modules show a stable trend.

Kafka metrics


OpenSearch Data Nodes metrics

...

DB CPU in the average were 20% for Scenario 1, 30% for Scenario 2 and 40% for Scenario 3.

Image RemovedImage Added

DB Connections

Max DB connections was 1560.

Image RemovedImage Added

DB load

 Image Removed Image Added                                                                                                                    

Top SQL-queries

Image RemovedImage Added

...

SELECT i.json
  || jsonb_build_object('tenantId', i.tenant_id,
                        'shared', i.shared,
                        'isBoundWith', i.is_bound_with,
                        'holdings', COALESCE(jsonb_agg(DISTINCT h.json || jsonb_build_object('tenantId', h.tenant_id)) FILTER (WHERE h.json IS NOT NULL), '[]'::jsonb),
                        'items', COALESCE(jsonb_agg(it.json || jsonb_build_object('tenantId', it.tenant_id)) FILTER (WHERE it.json IS NOT NULL), '[]'::jsonb)) as json
FROM cs00000int_mod_search.instance i
  LEFT JOIN cs00000int_mod_search.holding h on h.instance_id = i.id
  LEFT JOIN cs00000int_mod_search.item it on it.holding_id = h.id
  WHERE i.id IN ($1::uuid)
  GROUP BY i.id

...

SELECT * FROM cs00000int_mod_orders_storage.internal_lock WHERE lock_name = $1 FOR UPDATE

...

SELECT jsonb FROM cs00000int_mod_orders_storage.po_line WHERE lower(f_unaccent(po_line.jsonb->>'locations')) LIKE lower(f_unaccent('%b4585aae-b502-43e6-95c6-4de1c038f6af%')) 
LIMIT 2147483647 OFFSET 0

...

SELECT i.json
  || jsonb_build_object('tenantId', i.tenant_id,
                        'shared', i.shared,
                        'isBoundWith', i.is_bound_with,
                        'holdings', COALESCE(jsonb_agg(DISTINCT h.json || jsonb_build_object('tenantId', h.tenant_id)) FILTER (WHERE h.json IS NOT NULL), '[]'::jsonb),
                        'items', COALESCE(jsonb_agg(it.json || jsonb_build_object('tenantId', it.tenant_id)) FILTER (WHERE it.json IS NOT NULL), '[]'::jsonb)) as json
FROM cs00000int_mod_search.instance i
  LEFT JOIN cs00000int_mod_search.holding h on h.instance_id = i.id
  LEFT JOIN cs00000int_mod_search.item it on it.holding_id = h.id
  WHERE i.id IN ($1::uuid,$2::uuid,$3::uuid,$4::uuid,$5::uuid,$6::uuid)
  GROUP BY i.id

...

SELECT cs00000int_mod_orders_storage.count_estimate('SELECT jsonb,id FROM cs00000int_mod_orders_storage.acquisitions_unit WHERE (CASE WHEN length(lower(f_unaccent(''false''))) 
<= 600 THEN left(lower(f_unaccent(acquisitions_unit.jsonb->>''isDeleted'')),600) LIKE lower(f_unaccent(''false'')) ELSE left(lower(f_unaccent(acquisitions_unit.jsonb->>''isDeleted'')),600)
LIKE left(lower(f_unaccent(''false'')),600) AND lower(f_unaccent(acquisitions_unit.jsonb->>''isDeleted'')) LIKE lower(f_unaccent(''false'')) END) AND
(CASE WHEN length(lower(f_unaccent(''false''))) <= 600 THEN left(lower(f_unaccent(acquisitions_unit.jsonb->>''protectRead'')),600) LIKE lower(f_unaccent(''false''))
ELSE left(lower(f_unaccent(acquisitions_unit.jsonb->>''protectRead'')),600) LIKE left(lower(f_unaccent(''false'')),600) AND lower(f_unaccent(acquisitions_unit.jsonb->>''protectRead''))
LIKE lower(f_unaccent(''false'')) END)')


Appendix

Infrastructure

PTF - environment Ramsons (rcon)

...

Appendix

Infrastructure

PTF - environment Ramsons (rcon)

  • 10 m6g.2xlarge EC2 instances located in US East (N. Virginia)us-east-1 [Number of ECS instances, instance type, location region]

  • 1 instance of db.r6.xlarge database instance: Writer instance

  • OpenSearch

    • domain: ptf-test

    • Number of nodes: 7

    • Version: OpenSearch_2_13_R20240520-P5

  • MSK - fse-tenant

    • 4 kafka.m7g.xlarge brokers in 2 zones

    • Apache Kafka version 3.7.x

    • EBS storage volume per broker 300 GiB

    • auto.create.topics.enable=true

    • log.retention.minutes=480

    • default.replication.factor=3

...