PTF - Performance testing of Export All Endpoint (Quesnelia) [non-ECS]
Overview
- This document contains results of testing Data Export All by the endpoint (POST data-export/export-all) with Default instances, authority, export holdings job profiles and with the custom profile Example 1 on the Quesnelia [non-ECS] release on qcp1 environment.
- PERF-890Getting issue details... STATUS
Summary
- Data Export tests finished successfully on qcp1 environment using the Default instances, authority, holdings export job profile and Custom Mapping Profiles - Example 1.
- During the tests data-export-all with Custom Mapping Profiles - Example 1 we observe Errors converting json to marc for instances with 9 and more holdings, task for investigation was created - MDEXP-780Getting issue details... STATUS
- Two very slow queries when checking deleted records in tables mod_inventory_storage.audit_instance and mod_inventory_storage.audit_holdings_record for Data-Export-All, task for investigation was created - MODINVSTOR-1234Getting issue details... STATUS
- No memory leaks are observed.
- The data export duration for default profiles and the duration for the concurrent test of default profiles plus the export of 10,000 instances with a custom profile are the same. This is because Data-Export-All uses one data-export module task, so if we run concurrent tests, each job will be executed on a separate data-export module task, because data-export module has two tasks.
Test Runs and Results
This table contains durations for Data Export.
Test # | Job Profile | Count of exported records | Data Export Duration | Results |
---|---|---|---|---|
1 | Default instances export job profile | 19664506 | 3:03:59 | COMPLETED |
Custom Mapping Profiles - Example 1 | 10000 | 0:11:14 | ||
2 | Default authority export job profile | 6186517 | 3:29:03 | COMPLETED |
Custom Mapping Profiles - Example 1 | 10000 | 0:01:49 | ||
3 | Default holdings export job profile | 20669235 | 1:46:56 | COMPLETED |
Custom Mapping Profiles - Example 1 | 10000 | 0:01:22 | ||
4 | Default instances export job profile | 19789508 | 2:34:09 | COMPLETED |
5 | Default holdings export job profile | 20794226 | 1:46:16 | COMPLETED |
6 | Default authority export job profile | 6186517 | 3:28:51 | COMPLETED |
7 | Custom Mapping Profiles - Example 1 | 19789503 | 5:51:08 | COMPLETED_WITH_ERRORS |
Resource utilization for Test №1, №2 and №3
Service CPU Utilization
Here we can see that mod-data-export used 150% CPU.
Service Memory Utilization
Here we can see that data-export module used 95% memory.
Kafka metrics
DB CPU Utilization
DB CPU was 90%.
DB Connections
Max number of DB connections was 750
DB load
Top SQL-queries
# | TOP 5 SQL statements |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
Resource utilization for Test №4, №5 and №6
Service CPU Utilization
Here we can see that mod-data-export used 194% CPU.
Service Memory Utilization
Here we can see that all modules show a stable trend except mod-source-record-manager.
Kafka metrics
DB CPU Utilization
DB CPU was 92%.
DB Connections
Max number of DB connections was 762.
DB load
Top SQL-queries
# | TOP 5 SQL statements |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
Resource utilization for Test №7
Service CPU Utilization
Here we can see that mod-data-export used 145% CPU.
Service Memory Utilization
Here we can see that mod-data-export used 93% memory .
Kafka metrics
DB CPU Utilization
DB CPU was 82%.
DB Connections
Max number of DB connections was 730.
DB load
Top SQL-queries
# | TOP 5 SQL statements |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
Appendix
Infrastructure
PTF -environment qcp1
- 10 m6i.2xlarge EC2 instances located in US East (N. Virginia)us-east-1
1 database instance, writer
Name Memory GIB vCPUs max_connections db.r6g.xlarge
32 GiB 4 vCPUs 2731 - Number of records in DB:
- fs09000000
- instances - 27289981
- items - 28463562
- holdings - 27535678
- authorities - 6193573
- fs09000000
- 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
- Data nodes
- 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
Methodology/Approach
Test set:
- Test 1: Manually tested 10k instances records files with the custom profile Example 1 and concurrently run Export All instances started by JMeter using endpoint(POST data-export/export-all) with profile Default instances export job profile. Data Export started on one tenant (fs09000000) with two tasks for data-export module.
- Test 2: Manually tested 10k instances records files with the custom profile Example 1 and concurrently run Export All instances started by JMeter using endpoint(POST data-export/export-all) with profile Default holdings export job profile. Data Export started on one tenant (fs09000000) with two tasks for data-export module.
- Test 3: Manually tested 10k instances records files with the custom profile Example 1 and concurrently run Export All instances started by JMeter using endpoint(POST data-export/export-all) with profile Default authority export job profile. Data Export started on one tenant (fs09000000) with two tasks for data-export module.
Test set:
- Test 4: Export All instances started by JMeter using endpoint(POST data-export/export-all) with profile Default instances export job profile. Data Export started on one tenant (fs09000000) with one task for data-export module.
- Test 5: Export All holdings started by JMeter using endpoint(POST data-export/export-all) with profile Default holdings export job profile. Data Export started on one tenant (fs09000000) with one task for data-export module.
- Test 6: Export All authority started by JMeter using endpoint(POST data-export/export-all) with profile Default authority export job profile. Data Export started on one tenant (fs09000000) with one task for data-export module.
Test №7:
- Export All instances started by JMeter using endpoint(POST data-export/export-all) with the Custom Profile Example 1. Data Export started on one tenant (fs09000000) with one task for data-export module.
To get status and time range for import jobs the query used:
select jsonb->'exportedFiles'->0->>'fileName' as fileName, job_profile_name,exported, started_date,completed_date, completed_date - started_date as duration ,status from fs09000000_mod_data_export.job_executions where started_date > '2024-07-8' order by started_date desc limit 1000;