/
PTF - Performance testing of moving Parsed Records Flattening From Database To Module Space (Quesnelia) [non-ECS]

PTF - Performance testing of moving Parsed Records Flattening From Database To Module Space (Quesnelia) [non-ECS]

Overview

  • This document contains comparing results of testing  Data Import for MARC Bibliographic records with create and update jobs on the Quesnelia [non-ECS] release on qcp1 environment with two different versions of  mod-source-record-storage 5.8.0and5.9.0-SNAPSHOT.387 (moved json parsing function from DB to module)

PERF-924 - Getting issue details... STATUS  

Summary

  • Data Import tests finished successfully on qcp1 environment using the PTF - Create 2 and PTF - Updates Success - 6 profiles with 10k, 100k and 200k file records.
  • DI duration growth correlates to the number of records imported.
  • Comparing between  mod-source-record-storage 5.8.0 and mod-source-record-storage 5.9.0-SNAPSHOT.387
    • Data Import durations have performance degradation of around 35% for all Data-imports jobs.
    • Server and Database metrics at the same level for both versions of mod-source-record-storage module.
  • No memory leaks are observed.

Test Runs and Results

This table contains durations for Data Import. 

ProfileTenantMARC FileTest #

DI Duration
mod-source-record-storage
5.8.0
(hh:mm:ss)

Test #DI Duration
mod-source-record-storage
5.9.0-SNAPSHOT.387
(hh:mm:ss)
Results
DI MARC Bib Create (PTF - Create 2)fs0900000025K.mrc10:11:1470:14:30Completed
fs09000000100K.mrc20:46:0281:03:37Completed
fs09000000200K.mrc31:30:0592:10:52Completed
DI MARC Bib Update (PTF - Updates Success - 6)fs0900000025K.mrc40:37:11100:26:37Completed
fs09000000100K.mrc51:21:57111:51:49Completed
fs09000000200K.mrc62:43:16123:38:51Completed


Comparison

This table contains durations comparison between  mod-source-record-storage 5.8.0 and mod-source-record-storage 5.9.0-SNAPSHOT.387.

ProfileMARC File

DI Duration
mod-source-record-storage
5.8.0
(hh:mm:ss)

DI Duration
mod-source-record-storage
5.9.0-SNAPSHOT.387
(hh:mm:ss)
Delta
(hh:mm:ss / %)
DI MARC Bib Create (PTF - Create 2)25K.mrc0:11:140:14:300:03:1
+29%
100K.mrc0:46:021:03:370:17:35
+38%
200K.mrc1:30:052:10:520:40:47
+45%
DI MARC Bib Update (PTF - Updates Success - 6)25K.mrc0:37:110:26:370:10:34
28%
100K.mrc1:21:571:51:490:29:52
+36%
200K.mrc2:43:163:38:510:55:35
+34%




Resource utilization for Test Set №1

 Resource utilization table
CPURAM
mod-inventory-b124%
mod-inventory-b
91%
mod-quick-marc-b92%
mod-source-record-manager-b
71%
mod-di-converter-storage-b78%
mod-circulation-item-b
58%
nginx-okapi50%
mod-source-record-storage-b
56%
mod-data-import-b34%
mod-di-converter-storage-b
53%
mod-source-record-storage-b27%
okapi-b
44%
okapi-b24%
mod-data-import-b
44%
mod-source-record-manager-b20%
mod-patron-blocks-b
44%
mod-inventory-storage-b18%
mod-feesfines-b
41%
mod-pubsub-b7%
mod-configuration-b
41%
mod-remote-storage-b3%
mod-pubsub-b
34%
mod-configuration-b2%
mod-quick-marc-b
33%
mod-circulation-item-b2%
mod-users-bl-b
32%
mod-authtoken-b2%
mod-authtoken-b
29%
mod-feesfines-b2%
mod-circulation-storage-b
24%
mod-circulation-storage-b2%
mod-inventory-storage-b
23%
mod-users-bl-b0.60%
mod-remote-storage-b
21%
mod-patron-blocks-b0.30%
nginx-okapi
5%

Service CPU Utilization

Here we can see that mod-data-import used 250% CPU in spike and mod-inventory used 115% CPU.

Service Memory Utilization

Here we can see that all modules show a stable trend except mod-source-record-manager.

DB CPU Utilization

DB CPU was 90%.

CPU (User) usage by broker

Disk usage by broker


DB Connections

Max number of DB connections was 918.

DB load

                                                                                                                     

Top SQL-queries


#TOP 5 SQL statements
1
insert into "marc_records_lb" ("id", "content") values (cast($1 as uuid), cast($2 as jsonb)) on conflict ("id") do update set "content" = cast($3 as jsonb)
2
INSERT INTO fs09000000_mod_source_record_manager.events_processed (handler_id, event_id) VALUES ($1, $2)
3
INSERT INTO fs09000000_mod_source_record_manager.journal_records (id, job_execution_id, source_id, source_record_order, entity_type, entity_id, entity_hrid, action_type, action_status, error, 
action_date, title, instance_id, holdings_id, order_id, permanent_location_id, tenant_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17)
4
INSERT INTO fs09000000_mod_inventory_storage.instance (id, jsonb) VALUES ($1, $2) RETURNING jsonb
5
INSERT INTO fs09000000_mod_inventory_storage.item (id, jsonb) VALUES ($1, $2) RETURNING jsonb

Resource utilization for Test Set №2

 Resource utilization table
CPURAM
mod-inventory-b111%mod-inventory-b92%
mod-quick-marc-b88%mod-source-record-manager-b72%
mod-di-converter-storage-b60%mod-circulation-item-b60%
nginx-okapi41%okapi-b56%
mod-source-record-storage-b21%mod-di-converter-storage-b54%
okapi-b19%mod-source-record-storage-b48%
mod-inventory-storage-b15%mod-data-import-b46%
mod-source-record-manager-b14%mod-patron-blocks-b44%
mod-pubsub-b7%mod-feesfines-b42%
mod-remote-storage-b3.20%mod-configuration-b42%
mod-feesfines-b2.30%mod-pubsub-b36%
mod-configuration-b2.20%mod-users-bl-b35%
mod-circulation-item-b2.20%mod-quick-marc-b34%
mod-circulation-storage-b1.60%mod-authtoken-b31%
mod-data-import-b1.50%mod-inventory-storage-b26%
mod-authtoken-b1.30%mod-circulation-storage-b24%
mod-users-bl-b0.50%mod-remote-storage-b21%
mod-patron-blocks-b0.30%nginx-okapi5%

Service CPU Utilization

Here we can see that mod-data-import used 240% CPU in spike and mod-inventory used 111% CPU.

Service Memory Utilization

Here we can see that all modules show a stable trend except mod-source-record-manager.

CPU (User) usage by broker

Disk usage by broker

DB CPU Utilization

DB CPU was 95%.

DB Connections

Max number of DB connections was 942.

DB load

                                                                                                                     

Top SQL-queries


#TOP 5 SQL statements
1
INSERT INTO fs09000000_mod_source_record_manager.events_processed (handler_id, event_id) VALUES ($1, $2)
2
INSERT INTO fs09000000_mod_source_record_manager.journal_records (id, job_execution_id, source_id, source_record_order, entity_type, entity_id, entity_hrid, action_type, action_status, error, action_date, 
title, instance_id, holdings_id, order_id, permanent_location_id, tenant_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17)
3
WITH deleted_rows AS (     delete from marc_indexers mi     where exists(         select 1         from marc_records_tracking mrt         where mrt.is_dirty = true           and mrt.marc_id = mi.marc_id          
and mrt.version > mi.version ) returning mi.marc_id), deleted_rows2 AS ( delete from marc_indexers mi where exists( select 1 from records_lb
where records_lb.id = mi.marc_id and records_lb.state = 'OLD' ) returning mi.marc_id) INSERT INTO marc_indexers_deleted_ids
SELECT DISTINCT marc_id FROM deleted_rows UNION SELECT marc_id FROM deleted_rows2
4
INSERT INTO fs09000000_mod_inventory_storage.item (id, jsonb) VALUES ($1, $2) RETURNING jsonb
5
INSERT INTO fs09000000_mod_inventory_storage.instance (id, jsonb) VALUES ($1, $2) RETURNING jsonb

Appendix

Infrastructure

PTF -environment qcp1

  • 10 m6i.2xlarge EC2 instances located in US East (N. Virginia)us-east-1
  • 1 database  instance, writer

    NameMemory GIBvCPUsmax_connections

    db.r6g.xlarge

    32 GiB4 vCPUs2731
  • Number of records in DB:
    •  fs09000000
      • instances - 25901331
      • items - 27074913
      • holdings - 25871735
  • Open Search ptf-test
    • Data nodes
      • Instance type - r6g.2xlarge.search
      • Number of nodes - 4
      • Version: OpenSearch_2_7_R20240502
    • Dedicated master nodes
      • Instance type - r6g.large.search
      • Number of nodes - 3
  • MSK tenant
    • 4 m5.2xlarge brokers in 2 zones
    • Apache Kafka version 2.8.0

    • EBS storage volume per broker 300 GiB

    • auto.create.topics.enable=true
    • log.retention.minutes=480
    • default.replication.factor=3


 Quesnelia modules memory and CPU parameters

Module Version

qcp1-pvt

RevisionTask CountMem Hard LimitMem Soft LimitCPUXmxMetaspaceSizeMaxMetaspaceSize
mod-users-bl:7.7.0521440115251292288128
mod-configuration:5.10.052102489612876888128
mod-authtoken:2.15.1621440115251292288128
mod-data-import:3.1.081204818442561292384512
mod-remote-storage:3.2.0524920447210243960512512
mod-inventory-storage:27.1.0524096369020483076384512
pub-okapi:2023.06.14321024896128768Not foundNot found
mod-feesfines:19.1.052102489612876888128
okapi:5.3.053168414401024922384512
nginx-okapi:2023.06.14321024896128Not foundNot foundNot found
mod-quick-marc:5.1.051228821761281664384512
mod-source-record-manager:3.9.0-SNAPSHOT.330625600500020483500384512
mod-patron-blocks:1.10.0521024896102476888128
mod-pubsub:2.13.052153614401024922384512
mod-circulation:24.2.0522880259215361814384512
mod-di-converter-storage:2.2.052102489612876888128
mod-inventory:20.2.0522880259210241814384512
mod-source-record-storage:5.8.0525600500020483500384512
mod-circulation-storage:17.2.0522880259215361814384512


Methodology/Approach

DI tests scenario (DI MARC Bib Create\Update) were started from UI.

Test set №1:

  • Test 1: Manually tested 25k records files DI MARC Bib Create started on one tenant (fs09000000) with version of module mod-source-record-storage:5.8.0.
  • Test 2: Manually tested 100k records files DI MARC Bib Create started on one tenant (fs09000000) with version of module mod-source-record-storage:5.8.0.
  • Test 3: Manually tested 200k records files DI MARC Bib Create started on one tenant (fs09000000) with version of module mod-source-record-storage:5.8.0.
  • Test 4: Manually tested 25k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.8.0.
  • Test 5: Manually tested 100k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.8.0.
  • Test 6: Manually tested 200k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.8.0.

Test set №2:

  • Test 7: Manually tested 25k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.9.0-SNAPSHOT.387.
  • Test 8: Manually tested 100k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.9.0-SNAPSHOT.387.
  • Test 9: Manually tested 200k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.9.0-SNAPSHOT.387.
  • Test 10: Manually tested 25k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.9.0-SNAPSHOT.387.
  • Test 11: Manually tested 100k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.9.0-SNAPSHOT.387.
  • Test 12: Manually tested 200k records files DI MARC Bib Update started on one tenant (fs09000000) with version of module mod-source-record-storage:5.9.0-SNAPSHOT.387.

To get status and time range for import jobs the query used: 

SQL Query
select file_name, job_Profile_name, started_date,completed_date, completed_date - started_date as duration ,status
from fs09000000_mod_source_record_manager.job_execution order by started_date desc limit 2000;


Related content