Overview
- These tests are run to investigate the performance difference of mod-data-export with logLevel=info vs logLevel=warn for Juniper release. This testing was part of - MDEXP-394Getting issue details... STATUS where we observed that mod-data-export is continuously writing a lot of data to log. For 100K DE job, mod-data-export is writing 42Million records. This could also result in a crash if there is not enough CPU, memory allocated to mod-data-export.
2. Check how many jobs can run in parallel - - PERF-142Getting issue details... STATUS so data-export does not break
Backend:
- mod-data-export-4.1.1 (snapshot version)
- mod-source-record-storage-5.1.4
- mod-source-record-manager-3.1.3
- okapi-4.8.2
- mod-authtoken-2.8.0
Frontend:
- folio_data-export-4.1.0
Environment:
- 8 million inventory records
- 74 FOLIO back-end modules deployed in 144 ECS services
- 3 okapi ECS services
- 12 m5.large EC2 instances
- 1 writer db.r6g.xlarge 1 reader db.r6g.xlarge AWS RDS instance
- INFO logging level / WARN looging level
High-Level Summary
- With WARN level logging, seeing 9% improvement in memory utilization
- data-export/job-executions API is polled every 3 seconds vs 5 seconds in Goldenrod. This means there are more requests overall but it also improves data-export execution. Data-export job completes faster(around 2 seconds) compared to the previous release. Other than that, data-export is stable and see performance improvements compared to the Goldenrod release.
- A new feature added for data-export is it will kill failed job every 6 hours
- How many data-export jobs can run in parallel? Multiple jobs can run in parallel and 2.75 Million instance records can be exported at any given point in time. If we try to export more than that for example 3 Million instance records, mod-data-export crashes with OOM(Out Of Memory)
Test Runs
1 user - INFO level logging vs WARN level logging
Test | Total instances | Duration | mod-data-export log level | Total time to complete exporting all instances, holdings, and items |
1. | 100,000 | 30 min | INFO | 2.97 minutes |
2. | 100,000 | 30 min | WARN | 18 minutes |
Slow API taking more than 100 ms to return for 1 user:
API | 1 user - 10,000 instances(Avg) | 1 user - 100,000 instances(Avg) | 1 user - 500,000 instances(Avg) |
---|---|---|---|
POST_/data-export/fileDefinitions/{id}/upload | 145 milliseconds | 627 milliseconds | 1.82 seconds |
Fast queries involved during data-export job:
SQL query | Response time (Avg) |
---|---|
SELECT jsonb FROM fs09000000_mod_data_export.job_executions WHERE (jsonb->>'id') = '99fbccb3-c9bc-4278-b2e2-af130ef87030' | 1 millisecond |
SELECT fs09000000_mod_data_export.count_estimate('SELECT * FROM fs09000000_mod_data_export.job_executions WHERE id=''99fbccb3-c9bc-4278-b2e2-af130ef87030''') | 2 milliseconds |
CPU Utilization
CPU utilization increase as the number of instances increases from 100 to 500k. CPU reaches maximum for 100k, 500k instances but there is not much difference for 1 user and 2 users.
Service Memory Utilization
Memory increases gradually as we start running tests especially for mod-data-export and then stabilizes. For all other modules such as mod-source-record-storage, the okapi remains constant between 80% - 100%.
Check how many jobs can run in parallel
Multiple jobs can run in parallel but data-export fails if trying to export 3 Million instance records with the below configuration.
Current memory allocation to mod-data-export service in ECS task definition container:
Soft memory limit - 360 MB
Hard memory limit - 512 MB
Memory Utilization gradually increases from 101% to 141% as we increase the number of instance records where it eventually crashes.
Number of inventory instance records (Millions) | Average Memory Utilization (%) |
---|---|
1 | 101.66 |
2 | 102.77 |
2.5 | 124.4 |
2.75 | 136.11 |
3 | 141 (service fails with OOM) |
When trying to export 3M records, POST data-export/file-definitions/d63d8a83-e339-44b2-8a2f-41caaf080221/upload fails with 503
Appendix
For more raw data of the test run please see the attached test-report-honeysuckle.xlsx for Honeysuckle.