All Products
Search
Document Center

PolarDB:Orca performance white paper

Last Updated:Feb 28, 2026

This topic presents benchmark results for the Orca feature in PolarDB for MySQL Enterprise Edition 8.0.2. Orca is a persistent database built on PolarDB for MySQL that is fully compatible with the Redis protocol. When you enable the Orca feature, you can access data through a Redis protocol endpoint without deploying a separate Redis service.

The benchmarks measure throughput (QPS) and latency across different value sizes, concurrency levels, and network modes to help you evaluate Orca's performance characteristics for your workload.

Test environment

ComponentConfiguration
PolarDB clusterCluster Edition, MySQL 8.0.2 database engine version, polar.mysql.x4.2xlarge node specifications (16 cores, 64 GB), PSL5 storage type
Blink Tree index accelerationEnabled (loose_innodb_polar_blink_tree=ON) to improve query performance
ECS client instanceecs.c8i.16xlarge (64 cores, 128 GB)
NetworkECS instance and PolarDB cluster in the same region and virtual private cloud (VPC), connected through an Orca private endpoint
The ECS instance connects through an Orca private endpoint to ensure high access performance and efficient, secure data transmission within the VPC.

Test tool

All tests use memtier_benchmark, a multi-threaded stress testing tool from Redis Labs.

Test scenarios

The tests evaluate Orca performance under two concurrency levels (128 and 512 concurrent connections) using two network mechanisms:

  • Ping-pong mode: The client sends one request and waits for the response before sending the next request. This mode reflects typical interactive workloads.

  • Pipeline mode: The client sends multiple requests without waiting for individual responses, using a pipeline depth of 32 (--pipeline=32). This mode maximizes throughput for batch-oriented workloads.

Each concurrency level is tested with four value sizes: 128 bytes, 1 KB, 4 KB, and 16 KB.

Test parameters

128 concurrent connections

Value sizeThreadsConnections per threadTotal connectionsOperations per connectionKey rangeTotal data volume
128 bytes3241282,000,000[1, 128,000,000]Approx. 30 GB
1 KB3241282,000,000[1, 128,000,000]Approx. 40 GB
4 KB324128200,000[1, 12,800,000]Approx. 60 GB
16 KB324128200,000[1, 12,800,000]Approx. 750 GB

512 concurrent connections

Value sizeThreadsConnections per threadTotal connectionsOperations per connectionKey rangeTotal data volume
128 bytes32165122,000,000[1, 512,000,000]Approx. 150 GB
1 KB32165122,000,000[1, 512,000,000]Approx. 175 GB
4 KB3216512200,000[1, 51,200,000]Approx. 250 GB
16 KB3216512200,000[1, 51,200,000]Approx. 1.5 TB

Parameter descriptions

FieldDescription
Value sizeThe size of the data value used in each test. The tested sizes are 128 bytes, 1 KB, 4 KB, and 16 KB.
ThreadsThe number of threads used in each test scenario. All scenarios use 32 threads.
Connections per threadThe number of client connections created by each thread. 4 connections for 128-concurrency scenarios; 16 connections for 512-concurrency scenarios.
Total connectionsThe total number of concurrent connections (threads multiplied by connections per thread).
Operations per connectionThe number of write and read operations run per connection.
Key rangeThe range of randomly generated keys for write and read operations.
Total data volumeThe total data volume, calculated from the value size, operations count, and connections count.

Test metrics

MetricDescription
QPSThe number of read and write operations per second (operations/sec). Higher values indicate greater throughput capacity.
Avg LatencyThe average latency of read and write operations, in milliseconds (ms). Lower values indicate faster response times.
p99 LatencyThe latency below which 99% of operations fall, in milliseconds (ms). Lower values indicate more stable performance under load.

Test results

Troubleshooting authentication errors

Important

If you encounter either of the following authentication errors during execution:

  • "error: authentication failed [-ERR wrong number of arguments for 'auth'/'hello' command.]"

  • "error: authentication failed [-WRONGPASS invalid username-password pair or user is disabled.]" Replace "-a $password" with the "-a username:password" format, where username is your username and password is your password. For details, see the official memtier_benchmark documentation.

128 concurrency results

Ping-pong mode (128 concurrency)

Value sizeWorkloadQPSAvg Latency (ms)p99 Latency (ms)
128 bytesWrite-only115,179.721.093.12
128 bytesRead-only302,828.590.411.46
128 bytesRead/write200,585.950.632.14
1 KBWrite-only91,244.761.406.46
1 KBRead-only310,197.230.411.46
1 KBRead/write142,757.040.894.67
4 KBWrite-only49,899.542.5518.30
4 KBRead-only275,966.230.461.44
4 KBRead/write86,027.861.4814.40
16 KBWrite-only6,225.0220.8284.99
16 KBRead-only166,434.330.781.44
16 KBRead/write12,868.2410.0370.14

Pipeline mode (128 concurrency)

Value sizeWorkloadQPSAvg Latency (ms)p99 Latency (ms)
128 bytesWrite-only306,757.4513.3562.46
128 bytesRead-only1,598,605.282.5413.82
128 bytesRead/write272,943.4915.0058.62
1 KBWrite-only195,675.5721.03232.45
1 KBRead-only981,181.214.1739.94
1 KBRead/write191,592.6321.46129.02
4 KBWrite-only69,978.3758.80352.25
4 KBRead-only497,229.358.2268.61
4 KBRead/write97,213.7042.25352.25
16 KBWrite-only6,542.18627.002,981.89
16 KBRead-only215,512.8119.0945.57
16 KBRead/write12,600.41325.681,581.06

512 concurrency results

Ping-pong mode (512 concurrency)

Value sizeWorkloadQPSAvg Latency (ms)p99 Latency (ms)
128 bytesWrite-only85,516.585.9860.16
128 bytesRead-only320,063.101.6014.72
128 bytesRead/write208,489.072.4622.53
1 KBWrite-only95,896.765.3636.86
1 KBRead-only498,535.491.045.02
1 KBRead/write187,732.882.7519.20
4 KBWrite-only38,969.6113.17111.61
4 KBRead-only408,631.461.284.67
4 KBRead/write78,955.686.5071.68
16 KBWrite-only6,439.6079.68245.76
16 KBRead-only211,629.972.4415.17
16 KBRead/write12,453.0641.15216.06

Pipeline mode (512 concurrency)

Value sizeWorkloadQPSAvg Latency (ms)p99 Latency (ms)
128 bytesWrite-only116,795.27140.162,834.43
128 bytesRead-only323,316.8250.77436.22
128 bytesRead/write205,215.8979.932,719.74
1 KBWrite-only149,738.66109.441,024.00
1 KBRead-only929,717.3917.73137.22
1 KBRead/write208,624.3178.351,277.95
4 KBWrite-only48,330.42339.823,948.54
4 KBRead-only494,936.8033.53243.71
4 KBRead/write83,907.15195.163,112.96
16 KBWrite-only6,586.622,503.7740,894.46
16 KBRead-only208,420.7079.56708.61
16 KBRead/write13,054.471,260.1415,269.89

Test commands

This section provides the complete memtier_benchmark commands for every test scenario. Replace the following placeholders with your actual values:

  • $host: The Orca private endpoint hostname

  • $port: The Orca private endpoint port

  • $password: Your authentication credentials (use username:password format)

The commands follow a consistent pattern. The key differences across scenarios are the -c flag (connections per thread), -d flag (data size in bytes), --key-maximum flag (key range upper bound), -n flag (operations per connection), and --ratio flag (write:read ratio). Pipeline mode commands include the --pipeline=32 flag.

128 concurrency commands

128 bytes

  1. Ping-pong write-only (128 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=128000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (128 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=128000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (128 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=128000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (128 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=128000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (128 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=128000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (128 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=128000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

1 KB

  1. Ping-pong write-only (128 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=12800000 --key-minimum=1 --key-prefix=key_ --ratio=1:0
  2. Ping-pong read-only (128 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=12800000 --key-minimum=1 --key-prefix=key_ --ratio=0:1
  3. Ping-pong read/write (128 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=12800000 --key-minimum=1 --key-prefix=key_ --ratio=1:1
  4. Pipeline write-only (128 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=12800000 --key-minimum=1 --key-prefix=key_ --ratio=1:0
  5. Pipeline read-only (128 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=12800000 --key-minimum=1 --key-prefix=key_ --ratio=0:1
  6. Pipeline read/write (128 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=12800000 --key-minimum=1 --key-prefix=key_ --ratio=1:1

4 KB

  1. Ping-pong write-only (128 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (128 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (128 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (128 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (128 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (128 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

16 KB

  1. Ping-pong write-only (128 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (128 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (128 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (128 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (128 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (128 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 4 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=12800000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

512 concurrency commands

128 bytes

  1. Ping-pong write-only (512 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=512000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (512 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=512000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (512 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=512000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (512 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=512000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (512 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=512000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (512 concurrency, 128-byte value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 2000000  --random-data --randomize --distinct-client-seed -d 128 --key-maximum=512000000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

1 KB

  1. Ping-pong write-only (512 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (512 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (512 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (512 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (512 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (512 concurrency, 1 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000 --random-data --randomize --distinct-client-seed -d 1024 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

4 KB

  1. Ping-pong write-only (512 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (512 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (512 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (512 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (512 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (512 concurrency, 4 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 4096 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

16 KB

  1. Ping-pong write-only (512 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  2. Ping-pong read-only (512 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  3. Ping-pong read/write (512 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1
  4. Pipeline write-only (512 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:0
  5. Pipeline read-only (512 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=0:1
  6. Pipeline read/write (512 concurrency, 16 KB value):

        memtier_benchmark -s $host -p $port -a $password -c 16 -t 32 --pipeline=32 -n 200000  --random-data --randomize --distinct-client-seed -d 16384 --key-maximum=51200000 --key-minimum=1 --key-prefix= --key-pattern=R:R --ratio=1:1

Conclusion

The benchmark results demonstrate the following performance characteristics of the PolarDB Orca feature:

  • Data durability through distributed storage: The PolarDB Orca feature leverages the distributed storage architecture and three-replica redundancy mechanism of PolarDB for MySQL to prevent data loss.

  • Higher throughput in pipeline mode: In pipeline scenarios, the PolarDB Orca feature significantly improves system throughput using extensive aggregation optimizations. Pipeline mode is best suited for batch-oriented workloads where maximizing throughput is more important than minimizing per-request latency. You can select the pipeline mode as needed.

  • Read performance scales well: Across all value sizes and concurrency levels, read-only workloads consistently achieve the highest QPS and lowest latency, reflecting Orca's optimized read path.

  • Value size impacts write performance: Write throughput decreases as value size increases, which is expected due to the larger data volume that must be persisted. For example, at 128 concurrency in ping-pong mode, write-only QPS drops from 115,179.72 (128 bytes) to 6,225.02 (16 KB).