PTF-Test Hybrid DB Deployment on multiple tenants[Galileo environment]. Aurora serverless v2. Part 4
Overview
This report details the performance evaluation of two distinct database architectures—Amazon Aurora Serverless v2 and Provisioned RDS (db.r8gd family)—within a multi-tenant FOLIO environment. The objective of this testing phase is to benchmark system stability, scalability, and response times under production-like traffic conditions. Specifically, the evaluation aims to compare the elasticity of Serverless v2 against the consistent performance baseline of provisioned r8gd instances, assessing their ability to handle both "Common Day" and "Worst Day" production load(SMCH) patterns across 20 concurrent tenants.
Ticket: PERF-1424: Perform tests to compare performance with Serverless and high loadClosed
Summary:
Under Common Day load, Aurora Serverless v2 demonstrated better overall performance than the Provisioned
r8gd.4xl, delivering consistently lower p90 latencies for heavy inventory operations and authentication workflows. While both architectures processed similar throughput, Serverless v2 proved more efficient at maintaining stable response times and mitigating latency degradation.Test 6 was deliberately executed to evaluate the lower bounds of DB by downscaling to a db.r8gd.2xl instance under Common Day load. As anticipated, the architecture failed to sustain the 20-tenant concurrency. Severe database memory starvation resulted in a critically high error rate and triggered cascading module restarts, confirming that a 2xlarge instance is strictly insufficient for this baseline workload.
Under Worst Day load conditions, both Aurora Serverless v2 and Provisioned
db.r8gd.4xlsuccessfully sustained operations with comparable total throughput. Aurora Serverless demonstrated stronger resilience during heavy I/O tasks, yielding lower p90 latencies for critical inventory operations (e.g.,GET inventory itemsat 4.50s vs 5.15s, andGET inventory instanceat 20.95s vs 21.71s). Both architectures proved highly capable of absorbing peak traffic spikes without systemic degradation.Although the load profile was escalated from Common Day to Worst Day, we did not observe a corresponding increase in overall throughput. To address this bottleneck, we scaled the ECS cluster by allocating 4 tasks to critical modules (
mod-inventory,mod-inventory-storage,mod-source-record-manager, andmod-source-record-storage). This infrastructure tuning successfully unblocked the system, increasing total throughput from 1.9k RPS to 2.2k RPS.Comparing the standard Provisioned
db.r8gd.4xlarchitecture (Test 4) against the identical database configuration paired with a scaled ECS cluster (Test 5) reveals performance improvements under Worst Day load conditions. The ECS tuning eliminated application-level bottlenecks for heavy workflows. Most notably, response times for the criticalGET inventory instanceoperations plummeted from an average of ~17.1s down to ~3.7s, with 90th percentile (p90) latency dropping from 21.71s to 5.67s (a ~74% reduction).
Recommendations & Jiras
EUREKA-902: Optimize high-frequency SQL query on user_tenant table inIn Refinement
Permanently scale
mod-inventory,mod-inventory-storage,mod-source-record-manager, andmod-source-record-storageto 4 ECS tasks to prevent application-level compute bottlenecks. Testing confirmed this infrastructure tuning is essential, as it successfully unblocks processing constraints and increases overall system throughput from 1.9k to 2.2k RPS.Previous report:
PTF-Test Hybrid DB Deployment on multiple(30) tenants[Galileo environment]. Provision DB + Serverless V2. Part 2 ,
PTF-Test Hybrid DB Deployment on multiple tenants[Galileo environment]. Provisioned primary DB db.r7g.2xlarge paired with Dedicated Offload DB db.r8g.2xlarg. Part 3,
PTF-Test Hybrid DBDeployment on multiple tenants[Galileo enviroment].
Test runs
Test ID | Architecture | Load Model | Tenant Count | Notes | Status |
Test 1 | Aurora Serverless v2 (16-128 ACU) | Common Day | 20 | Baseline for Serverless scalability | PASSED |
Test 2 | Provisioned db.r8gd.4xl | Common Day | 20 | Baseline for Provisioned performance | PASSED |
Test 3 | Aurora Serverless v2 (16-128 ACU) | Worst Day | 20 | Serverless stress test | PASSED |
Test 4 | Provisioned db.r8gd.4xl | Worst Day | 20 | Provisioned stress test | PASSED |
Test 5 | Provisioned db.r8gd.4xl | Worst Day | 20 | Tuned ECS cluster (4 tasks for mod-inventory,mod-inventory-storage, mod-source-record-manager, mod-source-record-storage) | PASSED |
Test 6 | Provisioned db.r8gd.2xl | Common Day | 20 | Resource optimization assessment | FAILED |
Test results
Response time tables
Test 1, 2 - Common day production load
Requests | Test 1. Aurora Serverless | Test 2. r8gd.4xl | ||||
NumberOfSamples | Average | pct90 | NumberOfSamples | Average | pct90 | |
GET bound with parts | 4307 | 315.64 ms | 641.30 ms | 4449 | 319.13 ms | 666 ms |
GET course detail | 523830 | 20.09 ms | 36.90 ms | 513947 | 32.96 ms | 37 ms |
GET course instructors 1 | 523860 | 21.63 ms | 39 ms | 513975 | 44.67 ms | 40 ms |
GET course instructors 2 | 523855 | 21.39 ms | 39.70 ms | 513972 | 28.82 ms | 39 ms |
GET course instructors 3 | 523852 | 21.23 ms | 40 ms | 513971 | 31.22 ms | 38.90 ms |
GET course instructors 4 | 523847 | 21.29 ms | 40 ms | 513970 | 23.77 ms | 39 ms |
GET course instructors 5 | 523845 | 21.17 ms | 38.60 ms | 513968 | 21.25 ms | 38 ms |
GET course instructors 6 | 523841 | 21.15 ms | 38 ms | 513960 | 21.28 ms | 38.90 ms |
GET course list 1 | 523839 | 21.36 ms | 39.90 ms | 513957 | 32.48 ms | 39.90 ms |
GET course list 2 | 523835 | 21.39 ms | 38.80 ms | 513954 | 23.35 ms | 39.80 ms |
GET course list 3 | 523834 | 21.21 ms | 39 ms | 513950 | 25.90 ms | 39.60 ms |
GET holdings by id | 1047177 | 335.81 ms | 788.90 ms | 1025956 | 371.44 ms | 831 ms |
GET holdings list | 4311 | 1.48 s | 2.33 s | 4452 | 1.75 s | 3.09 s |
GET instance storage list | 4308 | 2.03 s | 3.82 s | 4450 | 2.25 s | 3.28 s |
GET institutions | 31815 | 332.30 ms | 694.20 ms | 32361 | 319.68 ms | 726.90 ms |
GET inventory instance 1 | 4335 | 16.53 s | 19.84 s | 4472 | 16.90 s | 22.03 s |
GET inventory instance 2 | 4313 | 16.40 s | 19.82 s | 4455 | 16.78 s | 21.54 s |
GET inventory items | 12423 | 3.78 s | 4.41 s | 13332 | 4.13 s | 4.88 s |
GET inventory view instances | 61827 | 750.23 ms | 1.34 s | 62010 | 812.06 ms | 1.47 s |
GET item by id 1 | 4313 | 346.44 ms | 695.80 ms | 4454 | 365.56 ms | 793 ms |
GET item by id 2 | 4312 | 333.77 ms | 669.20 ms | 4454 | 335.55 ms | 709.20 ms |
GET item storage search | 12417 | 1.06 s | 1.78 s | 13327 | 1.03 s | 1.82 s |
GET items by holdings | 4307 | 521.18 ms | 970.90 ms | 4449 | 530.59 ms | 1.08 s |
GET libraries | 31817 | 331.94 ms | 693.90 ms | 32367 | 321.67 ms | 724.50 ms |
GET locations | 31824 | 346.21 ms | 710 ms | 32372 | 338.28 ms | 735.20 ms |
GET material types | 31820 | 344.18 ms | 720.80 ms | 32370 | 334.99 ms | 751.70 ms |
GET metadata job executions | 61826 | 131.34 ms | 277.90 ms | 62006 | 170.98 ms | 220.50 ms |
GET version | 456943 | 18.14 ms | 43.90 ms | 460624 | 18.70 ms | 47.90 ms |
POST login with expiry | 234 | 99.40 ms | 239 ms | 234 | 357.25 ms | 1.19 s |
POST rtac batch | 21594 | 1.69 s | 2.32 s | 21970 | 1.37 s | 2.21 s |
Test 3, Test 4 and Test 5 - Worst day production load
Requests | Test 4. 4xl.r8gd | Test 3. Aurora Aerverless | Test 5. 4xl.r8gd + tuned cluster | ||||||
NumberOfSamples | Average | pct90 | NumberOfSamples | Average | pct90 | NumberOfSamples | Average | pct90 | |
GET bound with parts | 4108 | 364.98 ms | 708 ms | 3876 | 352.42 ms | 688.50 ms | 11652 | ||