Performance Measurements
This page documents load test results for different releases of cardano-rosetta-java
, evaluating performance across various deployment scenarios.
Service Level Agreements (SLAs)
Our performance evaluation is based on the following Service Level Agreements (SLAs), which define the acceptable thresholds for production environments:
- Response Time: A p99 of less than 1 second is the target for all standard API endpoints.
- Error Rate: A non-2xx response rate of less than 1% is considered acceptable.
In specific high-load scenarios, such as querying addresses with hundreds of thousands of transactions, these SLAs may be adjusted to assess system stability under extreme conditions. Any such adjustments are noted in the relevant test results.
Load tests are conducted using Apache Bench (ab) with a ramp-up strategy, progressively increasing concurrency to a predefined ceiling of 500 simultaneous requests.
To better understand the environments in which these results were obtained, please refer to our hardware profiles documentation.
v1.2.9 (Jun 11, 2025)
Mid-level Hardware Profile
Machine Specs: 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved for each modes:
Pruning Enabled (REMOVE_SPENT_UTXOS=true
)
REMOVE_SPENT_UTXOS=true
)- Docker Compose
- Huge Address (~373k txs)
- Huge Address (~1.6M txs)
Data is taken from the test with spent UTXOs are retained for 7 days by setting REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=30240
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /network/status | 1000 | 169ms | 218ms | 0 | 0.00% | 11206.81 |
2 | /account/balance | 825 | 693ms | 954ms | 0 | 0.00% | 2295.26 |
3 | /account/coins | 725 | 654ms | 907ms | 0 | 0.00% | 2194.91 |
4 | /block | 575 | 811ms | 995ms | 0 | 0.00% | 1129.28 |
5 | /block/transaction | 550 | 737ms | 913ms | 0 | 0.00% | 1187.63 |
6 | /search/transactions | 675 | 314ms | 417ms | 0 | 0.00% | 4269.48 |
7 | /construction/metadata | 1000 | 197ms | 343ms | 0 | 0.00% | 14321.98 |
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under pruning configurations. For details on pruning, see Spent UTXO Pruning.
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
Data is taken from the test with spent UTXOs are retained for 7 days by setting REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=30240
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 500 | 153ms | 414ms | 0 | 0.00% | 7012.95 |
2 | /account/coins | 500 | 184ms | 402ms | 0 | 0.00% | 5964.08 |
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under pruning configurations. For details on pruning, see Spent UTXO Pruning.
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
Data is taken from the test with spent UTXOs are retained for 7 days by setting REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=30240
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 500 | 1304ms | 1710ms | 0 | 0.00% | 694.10 |
2 | /account/coins | 500 | 1184ms | 1551ms | 0 | 0.00% | 779.39 |
Pruning Disabled (REMOVE_SPENT_UTXOS=false
)
REMOVE_SPENT_UTXOS=false
)- Docker Compose
- Huge Address (~373k txs)
- Huge Address (~1.6M txs)
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /network/status | 500 | 169ms | 198ms | 0 | 0.00% | 6120.35 |
2 | /account/balance | 225 | 824ms | 958ms | 0 | 0.00% | 391.41 |
3 | /account/coins | 225 | 783ms | 917ms | 0 | 0.00% | 411.56 |
4 | /block | 175 | 684ms | 837ms | 0 | 0.00% | 407.10 |
5 | /block/transaction | 200 | 691ms | 967ms | 10 | 0.04% | 435.23 |
6 | /search/transactions | 175 | 154ms | 204ms | 150 | 0.30% | 1727.60 |
7 | /construction/metadata | 500 | 210ms | 379ms | 0 | 0.00% | 8331.37 |
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under non pruning configurations. For details on pruning, see Spent UTXO Pruning.
For this specific test with pruning disabled on an address with 373,000 transactions, the standard 1-second Service Level Agreement (SLA) is not achievable. The SLA was adjusted to 10 seconds to evaluate system stability under extreme load.
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 4 | 6486ms | 7263ms | 0 | 0.00% | 1.02 |
2 | /account/coins | 8 | 9011ms | 9384ms | 0 | 0.00% | 1.20 |
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under non pruning configurations. For details on pruning, see Spent UTXO Pruning.
For this specific test with pruning disabled on an address with ~1.6M transactions, the standard 1-second Service Level Agreement (SLA) is not achievable. The SLA was adjusted to 10 seconds to evaluate system stability under extreme load. The results for /account/balance
at concurrency 1 are reported despite slightly exceeding this adjusted SLA to provide a transparent view of the performance boundary.
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 1 | 10427ms | 10427ms | 0 | 0.00% | 0.16 |
2 | /account/coins | 1 | 9612ms | 9612ms | 0 | 0.00% | 0.11 |
Advanced-level Hardware Profile
Machine Specs: 16 cores, 16 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved for each modes:
Pruning Enabled (REMOVE_SPENT_UTXOS=true
)
REMOVE_SPENT_UTXOS=true
)- Docker Compose
- Huge Address (~373k txs)
- Huge Address (~1.6M txs)
Data is taken from the test with spent UTXOs are retained for 30 days by setting REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=129600
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /network/status | 1000 | 300ms | 430ms | 0 | 0.00% | 8673.16 |
2 | /account/balance | 675 | 718ms | 961ms | 0 | 0.00% | 2038.31 |
3 | /account/coins | 700 | 673ms | 853ms | 0 | 0.00% | 2039.88 |
4 | /block | 625 | 707ms | 924ms | 0 | 0.00% | 1764.33 |
5 | /block/transaction | 700 | 549ms | 727ms | 0 | 0.00% | 2439.62 |
6 | /search/transactions | 700 | 448ms | 590ms | 0 | 0.00% | 3009.91 |
7 | /construction/metadata | 1000 | 473ms | 713ms | 0 | 0.00% | 9783.88 |
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under pruning configurations. For details on pruning, see Spent UTXO Pruning.
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
Data is taken from the test with spent UTXOs are retained for 30 days by setting REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=129600
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 500 | 146ms | 252ms | 0 | 0.00% | 7651.95 |
2 | /account/coins | 500 | 169ms | 330ms | 0 | 0.00% | 6335.54 |
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under pruning configurations. For details on pruning, see Spent UTXO Pruning.
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
Data is taken from the test with spent UTXOs are retained for 30 days by setting REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=129600
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 500 | 6952ms | 7651ms | 0 | 0.00% | 88.99 |
2 | /account/coins | 500 | 6897ms | 8181ms | 3 | 0.05% | 97.37 |
Pruning Disabled (REMOVE_SPENT_UTXOS=false
)
REMOVE_SPENT_UTXOS=false
)- Docker Compose
- Huge Address (~373k txs)
- Huge Address (~1.6M txs)
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /network/status | 800 | 113ms | 142ms | 0 | 0.00% | 14370.82 |
2 | /account/balance | 325 | 793ms | 951ms | 0 | 0.00% | 671.91 |
3 | /account/coins | 275 | 812ms | 993ms | 0 | 0.00% | 569.68 |
4 | /block | 200 | 762ms | 916ms | 0 | 0.00% | 409.54 |
5 | /block/transaction | 200 | 787ms | 974ms | 0 | 0.00% | 417.31 |
6 | /search/transactions | 625 | 417ms | 555ms | 0 | 0.00% | 3069.85 |
7 | /construction/metadata | 800 | 143ms | 273ms | 0 | 0.00% | 13296.60 |
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under non pruning configurations. For details on pruning, see Spent UTXO Pruning.
For this specific test with pruning disabled, the standard 1-second Service Level Agreement (SLA) is not achievable. Therefore, the SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 0 | 0ms | 0ms | 0 | 0.00% | 0.00 |
2 | /account/coins | 20 | 9492ms | 9892ms | 0 | 0.00% | 2.50 |
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under non pruning configurations. For details on pruning, see Spent UTXO Pruning.
For this specific test with pruning disabled, the standard 1-second Service Level Agreement (SLA) is not achievable. Therefore, the SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 2 | 9209ms | 9209ms | 0 | 0.00% | 0.29 |
2 | /account/coins | 2 | 7419ms | 7437ms | 0 | 0.00% | 0.32 |
v1.2.7 (Apr 29, 2025)
- Docker Compose
- Hardware Profile: mid-level
- Machine Specs: 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) |
---|---|---|---|---|
1 | /network/status | 200 | 61ms | 73ms |
2 | /account/balance | 200 | 708ms | 833ms |
3 | /account/coins | 200 | 737ms | 875ms |
4 | /block | 200 | 618ms | 722ms |
5 | /block/transaction | 175 | 552ms | 691ms |
6 | /search/transactions | 175 | 119ms | 143ms |
7 | /construction/metadata | 56 | 11ms | 15ms |
v1.2.6 (Apr 15, 2025)
- Single Docker
- Docker Compose
- Hardware Profile: mid-level
- Machine Specs: 16 cores, 16 threads, 125GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) |
---|---|---|---|---|
1 | /network/status | 500 | 82ms | 103ms |
2 | /account/balance | 500 | 750ms | 902ms |
3 | /account/coins | 500 | 720ms | 883ms |
4 | /block | 200 | 726ms | 980ms |
5 | /block/transaction | 175 | 596ms | 733ms |
6 | /search/transactions | 175 | 74ms | 94ms |
7 | /construction/metadata | 500 | 72ms | 97ms |
- Hardware Profile: mid-level
- Machine Specs: 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) |
---|---|---|---|---|
1 | /network/status | 500 | 150ms | 171ms |
2 | /account/balance | 150 | 640ms | 777ms |
3 | /account/coins | 225 | 812ms | 949ms |
4 | /block | 200 | 706ms | 960ms |
5 | /block/transaction | 125 | 397ms | 469ms |
6 | /search/transactions | 175 | 130ms | 161ms |
7 | /construction/metadata | 500 | 127ms | 178ms |
v1.2.0 (Feb 13, 2025)
The following tests were conducted on a mid-level hardware profile with the following specifications: 8 cores, 8 threads, 48GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+.
- Docker Compose
- Huge Address (~373k txs)
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /network/status | 500 | 185ms | 274ms | 0 | 0.00% | 5842.36 |
2 | /account/balance | 150 | 554ms | 957ms | 0 | 0.00% | 301.71 |
3 | /account/coins | 150 | 511ms | 890ms | 0 | 0.00% | 323.91 |
4 | /block | 8 | 45ms | 50ms | 0 | 0.00% | 212.68 |
5 | /block/transaction | 8 | 36ms | 39ms | 0 | 0.00% | 255.65 |
6 | /search/transactions | 8 | 18ms | 22ms | 0 | 0.00% | 743.97 |
7 | /construction/metadata | 300 | 152ms | 201ms | 0 | 0.00% | 6305.56 |
This scenario evaluates the performance of querying an address with approximately 373k transactions.
For this specific test with pruning disabled on an address with ~373k transactions, the standard 1-second Service Level Agreement (SLA) is not achievable. The SLA was adjusted to 10 seconds to evaluate system stability under extreme load.
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 4 | 7689ms | 8633ms | 0 | 0.00% | 0.90 |
2 | /account/coins | 4 | 7322ms | 8006ms | 0 | 0.00% | 0.90 |