Data Import with Check-ins Check-outs (Quesnelia)[non-ECS]

Overview

This document contains the results of testing Check-in/Check-out and Data Import for MARC Bibliographic records in the Quesnelia release.

Ticket: PERF-824 - Getting issue details... STATUS

Summary

  • Data import tests finished successfully for all files. Duration of DI grew in correspondence with the number of records in files.
  • Check-in and Check-out with 8 virtual users was performed during DI Create and Update jobs. No issues.
  • Data Import in Quesnelia with CICO perform faster than without it.
  • Comparing Poppy and Quesnelia releases
    • Check-in / Check-out perform better in Quesnelia.  Response time improved during Create jobs - 30% in Average, and during DI Update jobs - 15% in Average.
    • DI durations do not differ much
  • Resource utilization
    • Average CPU utilization did not exceed 150% for all modules. The highest consumption observed from mod-inventory - 144% in DI Update job with 25k file. The same maximum level as in Poppy. 
    • No memory leaks observed during tests.
    • Average DB CPU usage during data import has 5% decreasing in Quesnelia - close to 90%.
    • Average connection count during data import is about 750 connections for create jobs that is 450 connections higher than in Poppy. For update jobs - 730 connections.

Test Runs 

Test #

Scenario

Load levelComment
1DI MARC Bib Create5K, 10K, 25K, 50K, 100K consequentially
CICO 8 users
2DI MARC Bib Update5K, 10K, 25K, 50K, 100K consequentially
CICO 8 users

Test Results

Data import

Files for Data Import update jobs prepared during previous tests. So no need to run Data Export.

Profile
MARC File


DI Duration

Quesnelia (hh:mm:ss)

Check In, Check Out Response time (8 users)

Quesnelia

CI Average secCO Average sec
DI MARC Bib Create (PTF - Create 2)5K.mrc00:02:320.6450.901
10K.mrc00:05:030.6280.922
25K.mrc00:11:580.6390.960
50K.mrc00:23:290.6781.003
100K.mrc00:46:070.6860.998
DI MARC Bib Update (PTF - Updates Success - 1)5K.mrc00:03:240.6280.975
10K.mrc00:06:290.6641.018
25K.mrc00:16:150.7171.062
50K.mrc00:33:330.7211.071
100K.mrc01:10:140.7391.081

Check-in/Check-out without DI

ScenarioLoad levelRequestResponse time, sec
Quesnelia
95 percaverage
Circulation Check-in/Check-out (without Data import)8 usersCheck-in0.6090.521
Check-out1.0700.803

Comparison

CICO with DI comparison

DI duration results without Check-In and Check-Out for Quesnelia were taken from the report Data Import test report (Quesnelia)[non-ECS].

ProfileMARC FileDI DurationDeviation, % (compared DI Quesnelia without CICO and with CICO)DI Delta, (hh:mm:ss) Poppy/Quesnelia (with CICO)Check In, Check Out Response time (8 users)Check In, Check Out Response time (8 users)Delta, %

without CI/COwith CI/COPoppyQuesnelia Poppy/Quesnelia Poppy/Quesnelia 
PoppyQuesneliaPoppyQuesneliaCI Average secCO Average secCI Average secCO Average secCICO
DI MARC Bib Create (PTF - Create 2)5K.mrc00:02:3900:03:2000:02:5300:02:32- 24% / 48 sec

- 00:00:21

0.9011.3750.6450.901-28.41%-34.47%
10K.mrc00:05:0000:06:0000:04:3200:05:03- 15% / 57 sec+ 00:00:310.9021.470.6280.922-30.38%-37.28%
25K.mrc00:11:1500:13:4100:11:1400:11:58- 12% / 1 min 43 sec+ 00:00:4411.5710.6390.96-36.10%-38.89%
50K.mrc00:22:1600:21:5900:21:5500:23:29+ 6% / 1 min 34 sec+ 00:01:340.9811.460.6781.003-30.89%-31.30%
100K.mrc00:49:5800:40:1600:47:0200:46:07+ 14% / 5 min 51 sec- 00:00:551.0181.4910.6860.998-32.61%-33.07%
DI MARC Bib Update (PTF - Updates Success - 6)5K.mrc00:02:2800:07:1000:03:1900:03:24- 52% / 3 min 46 sec+ 00:00:050.7551.1690.6280.975-16.82%-16.60%
10K.mrc00:05:3100:10:2700:06:2000:06:29- 37% / 3 min 58 sec+ 00:00:090.751.3070.6641.018-11.47%-22.11%
25K.mrc00:14:5000:23:1600:14:0400:16:15- 30% / 7 min 1 sec+ 00:02:110.8221.4030.7171.062-12.77%-24.31%
50K.mrc00:32:5300:40:5200:29:5900:33:33- 17% / 7 min 19 sec+ 00:03:340.8931.4240.7211.071-19.26%-24.79%
100K.mrc01:14:3901:02:0001:03:0301:10:14+ 13% / 8 min 14 sec+ 00:07:110.9081.510.7391.081-18.61%-28.41%

The following table compares test results of current release (Quesnelia ) to the previous release (Poppy).

* Poppy DI and CICO results are taken from Data Import with Check-ins Check-outs Poppy

Detailed CICO response time comparison

ScenarioLoad levelRequestResponse time, sec
Poppy
Response time, sec
Quesnelia
95 percaverage95 percaverage
Circulation Check-in/Check-out (without Data import)8 usersCheck-in0.4890.4310.6090.521
Check-out0.9690.8281.0700.803

Detailed CICO response time for CICO with DI in Poppy

Request*Response time (avg, sec)
Pure CICOCICO + 100K MARC BIB CreateCICO + 100K MARC BIB Update
RequestPureCreateUpdate
Check-Out Controller803.14998.181081.19
Check-In Controller521.62686.69739.48
POST_circulation/check-out-by-barcode (Submit_barcode_checkout)289.16397.54432.5
POST_circulation/check-in-by-barcode (Submit_barcode_checkin)210.45318.34331.21
GET_circulation/loans (Submit_barcode_checkout)150.84186.52203.77
GET_users (Get_check_in_page)76.9890.13113.47
GET_inventory/items (Submit_barcode_checkin)59.4889.7399.01
GET_inventory/items (Submit_barcode_checkout)55.2379.9685.51
GET_circulation/requests_status_openAwaitingPickup (Submit_patron_barcode)20.5122.5424.33
GET_circulation/requests (Submit_barcode_checkin)20.1722.523.68
GET_circulation/loans (Submit_patron_barcode)20.0622.3323.63

*Top-10 requests were taken for analysis.

Response time

DI MARC BIB Create + CICO

DI MARC BIB Update + CICO

Service CPU Utilization

Average CPU utilization did not exceed 150% for all the modules. The highest consumption observed from mod-inventory. The same level as in Poppy. 

Spike for mod-data-import module observed instantly after the start in DI Create job with 100k file by 150%. For other tests it didn't exceed 110%.

 CPU Create, Update 100k
Service100k DI Create100k DI Update
mod-inventory-b129125.13
mod-quick-marc-b110.2496.74
mod-di-converter-storage-b62.680.57
nginx-okapi48.5583.36
mod-source-record-storage-b23.134.47
okapi-b20.1339.37
mod-inventory-storage-b16.8117.5
mod-source-record-manager-b14.9516.85
mod-pubsub-b8.029.63
mod-dcb-b7.898.99
mod-users-b7.0920.8
mod-configuration-b2.619.46
mod-feesfines-b2.617.75
mod-patron-b2.592.46
mod-oa-b2.262.24
mod-entities-links-b1.892.46
mod-authtoken-b1.8914.56
mod-circulation-storage-b1.812.05
mod-search-b1.761.33
mod-data-import-b1.571.61
edge-patron-b0.980.94
mod-users-bl-b0.660.72
mod-circulation-b0.41.57
mod-patron-blocks-b0.320.67
pub-okapi0.133.78
pub-edge0.090.13

DI MARC BIB Create and Update + CICO

Service Memory Utilization

There is memory utilization increasing observed which is caused by previous modules restarting (everyday cluster shut down process).

Top 5 modules with highest memory consumption: mod-inventory - 87%, mod-search - 87%, mod-oa - 75%, mod-dcb - 68%, mod-source-record-manager - 66%, 

Mod-data-export-worker-b was no level of 93% before and after tests.

 Memory consumption
Memory
mod-inventory-b86.92
mod-search-b86.83
mod-oa-b75.51
mod-dcb-b68.81
mod-source-record-manager-b66.84
mod-source-record-storage-b58.86
mod-users-b42.52
mod-pubsub-b40.83
mod-data-import-b39.75
mod-di-converter-storage-b38.99
mod-users-bl-b38.92
okapi-b37.63
mod-feesfines-b34.15
mod-patron-blocks-b32.59
mod-configuration-b29.06
mod-quick-marc-b27.48
mod-inventory-storage-b25.77
mod-entities-links-b24.85
mod-patron-b24.7
mod-circulation-b24.02
mod-circulation-storage-b22.78
mod-authtoken-b21.42
edge-patron-b18.02
nginx-okapi4.85
pub-okapi4.58
pub-edge4.46

DB CPU Utilization

Average DB CPU usage during data import is about 90% It decreased 5% from 95% in Poppy.

DB Connections

Average connection count during data import is about 750 connections for create jobs that is 450 connections higher than in Poppy. For update jobs - 730 connections.

DB load

Create jobs

Update jobs



Top SQL-queries:

Create jobs

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)

INSERT INTO fs09000000_mod_source_record_manager.events_processed (handler_id, event_id) VALUES ($1, $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)

Update jobs

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)

INSERT INTO fs09000000_mod_source_record_manager.events_processed (handler_id, event_id) VALUES ($1, $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)

UPDATE fs09000000_mod_inventory_storage.instance SET jsonb = $1::jsonb WHERE id='99b071cf-f789-4dfe-a238-d62c40bccfc0'

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
  • 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

Task count for modules mod-agreements, mod-serials-management, mod-graphql set to 0 during tests.

Modules

 All modules
ModuleTask Def. RevisionModule VersionTask CountMem Hard LimitMem Soft limitCPU unitsXmxMetaspaceSizeMaxMetaspaceSize
qcp1-pvt








Tue Apr 30 18:21:36 UTC 2024








mod-remote-storage3mod-remote-storage:3.2.024920447210243960512512
mod-ncip3mod-ncip:1.14.42102489612876888128
mod-finance-storage3mod-finance-storage:8.6.021024896102470088128
mod-agreements3mod-agreements:7.0.0015921488128000
mod-ebsconet3mod-ebsconet:2.2.0212481024128700128256
mod-organizations3mod-organizations:1.9.02102489612870088128
mod-consortia2mod-consortia:1.1.023072204812820485121024
edge-sip22edge-sip2:3.2.0-SNAPSHOT.2092102489612876888128
mod-serials-management3mod-serials-management:1.0.00248023121281792384512
mod-settings3mod-settings:1.0.32102489620076888128
mod-data-import6mod-data-import:3.1.01204818442561292384512
edge-dematic3edge-dematic:2.2.01102489612876888128
mod-search3mod-search:3.2.0225922480204814405121024
mod-inn-reach2mod-inn-reach:3.2.0-SNAPSHOT.86236003240102428805121024
mod-tags3mod-tags:2.2.02102489612876888128
edge-courses3edge-courses:1.4.02102489612876888128
mod-authtoken4mod-authtoken:2.15.121440115251292288128
mod-inventory-update3mod-inventory-update:3.3.02102489612876888128
mod-notify3mod-notify:3.2.02102489612876888128
mod-configuration3mod-configuration:5.10.02102489612876888128
mod-orders-storage3mod-orders-storage:13.7.02102489651270088128
edge-caiasoft3edge-caiasoft:2.2.02102489612876888128
mod-login-saml3mod-login-saml:2.8.02102489612876888128
mod-erm-usage-harvester3mod-erm-usage-harvester:4.5.02102489612876888128
mod-licenses3mod-licenses:6.0.02248023121281792384512
mod-gobi3mod-gobi:2.8.02102489612870088128
mod-password-validator3mod-password-validator:3.2.0214401298128768384512
mod-bulk-operations3mod-bulk-operations:2.0.023072260010241536384512
mod-fqm-manager3mod-fqm-manager:2.0.12300026001282048384512
edge-dcb3edge-dcb:1.1.02102489612876888128
mod-graphql4mod-graphql:1.12.10102489612876888128
mod-finance3mod-finance:4.9.02102489612870088128
mod-erm-usage3mod-erm-usage:4.7.02102489612876888128
mod-batch-print4mod-batch-print:1.1.02102489612876888128
mod-copycat3mod-copycat:1.6.02102451212876888128
mod-lists3mod-lists:2.0.02300026001282048384512
mod-entities-links4mod-entities-links:3.0.0225922480400144001024
mod-permissions6mod-permissions:6.5.02168415445121024384512
pub-edge3pub-edge:2023.06.142102489612876800
mod-orders3mod-orders:12.8.022048144010241024384512
edge-patron3edge-patron:5.1.02102489625676888128
edge-ncip3edge-ncip:1.9.22102489612876888128
edge-inn-reach2edge-inn-reach:3.1.1-SNAPSHOT.452102489612876888128
mod-users-bl3mod-users-bl:7.7.021440115251292288128
mod-oa2mod-oa:2.1.0-SNAPSHOT.622102489612876888128
mod-inventory-storage3mod-inventory-storage:27.1.024096369020483076384512
mod-invoice4mod-invoice:5.8.021440115251292288128
mod-user-import3mod-user-import:3.8.02102489612876888128
mod-sender4mod-sender:1.12.02102489612876888128
edge-oai-pmh3edge-oai-pmh:2.9.021512136010241440384512
mod-data-export-worker3mod-data-export-worker:3.2.123072204810242048384512
mod-rtac3mod-rtac:3.6.02102489612876888128
mod-circulation-storage3mod-circulation-storage:17.2.022880259215361814384512
mod-calendar3mod-calendar:3.1.02102489612876888128
mod-source-record-storage3mod-source-record-storage:5.8.025600500020483500384512
mod-event-config3mod-event-config:2.7.02102489612876888128
mod-courses3mod-courses:1.4.102102489612876888128
mod-circulation-item3mod-circulation-item:1.0.021024896128000
mod-inventory3mod-inventory:20.2.022880259210241814384512
mod-email3mod-email:1.17.02102489612876888128
mod-pubsub3mod-pubsub:2.13.02153614401024922384512
mod-circulation3mod-circulation:24.2.022880259215361814384512
mod-di-converter-storage3mod-di-converter-storage:2.2.02102489612876888128
edge-rtac3edge-rtac:2.7.12102489612876888128
edge-orders3edge-orders:3.0.02102489612876888128
mod-users4mod-users:19.3.12102489612876888128
mod-template-engine3mod-template-engine:1.20.02102489612876888128
mod-patron-blocks3mod-patron-blocks:1.10.021024896102476888128
mod-audit3mod-audit:2.9.02102489612876888128
edge-fqm3edge-fqm:2.0.02102489612876888128
mod-source-record-manager3mod-source-record-manager:3.8.025600500020483500384512
nginx-edge3nginx-edge:2023.06.1421024896128000
mod-quick-marc3mod-quick-marc:5.1.01228821761281664384512
nginx-okapi3nginx-okapi:2023.06.1421024896128000
okapi-b4okapi:5.3.03168414401024922384512
mod-feesfines3mod-feesfines:19.1.02102489612876888128
mod-invoice-storage3mod-invoice-storage:5.8.021872153610241024384512
mod-dcb4mod-dcb:1.1.02102489612876888128
mod-service-interaction3mod-service-interaction:4.0.12204818442561290384512
mod-data-export10mod-data-export:5.0.41204815241024000
mod-patron3mod-patron:6.1.02102489612876888128
mod-oai-pmh3mod-oai-pmh:3.13.024096369020483076384512
edge-connexion3edge-connexion:1.2.02102489612876888128
mod-kb-ebsco-java3mod-kb-ebsco-java:4.0.02102489612876888128
mod-notes3mod-notes:5.2.021024896128952384512
mod-data-export-spring3mod-data-export-spring:3.2.01204818442561536384512
mod-organizations-storage3mod-organizations-storage:4.7.02102489612870088128
mod-login3mod-login:7.11.02144012981024768384512
pub-okapi3pub-okapi:2023.06.142102489612876800
mod-eusage-reports3mod-eusage-reports:2.1.12102489612876888128


Methodology/Approach

  • To run CI/CO - Ubuntu AWS instance was used as load generator
  • DI tests were started from UI