You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/03/28 03:26:39 UTC
[james-project] branch master updated: JAMES-3734 Document database benchmark methodologies and base performances (#937)
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new 51dabea JAMES-3734 Document database benchmark methodologies and base performances (#937)
51dabea is described below
commit 51dabeab1f0fa245940e4c8c9aaaa54e97131b95
Author: Trần Hồng Quân <55...@users.noreply.github.com>
AuthorDate: Mon Mar 28 10:26:34 2022 +0700
JAMES-3734 Document database benchmark methodologies and base performances (#937)
---
.../images/cassandra_stress_test_result_1.png | Bin 0 -> 68487 bytes
.../images/cassandra_stress_test_result_2.png | Bin 0 -> 62484 bytes
.../distributed-app/docs/modules/ROOT/nav.adoc | 1 +
.../modules/ROOT/pages/operate/db-benchmark.adoc | 450 +++++++++++++++++++++
.../docs/modules/ROOT/pages/operate/index.adoc | 4 +-
5 files changed, 454 insertions(+), 1 deletion(-)
diff --git a/server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_1.png b/server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_1.png
new file mode 100644
index 0000000..b4ab9fa
Binary files /dev/null and b/server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_1.png differ
diff --git a/server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_2.png b/server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_2.png
new file mode 100644
index 0000000..189f602
Binary files /dev/null and b/server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_2.png differ
diff --git a/server/apps/distributed-app/docs/modules/ROOT/nav.adoc b/server/apps/distributed-app/docs/modules/ROOT/nav.adoc
index b8b5ca3..d0693d0 100644
--- a/server/apps/distributed-app/docs/modules/ROOT/nav.adoc
+++ b/server/apps/distributed-app/docs/modules/ROOT/nav.adoc
@@ -57,6 +57,7 @@
*** xref:operate/cli.adoc[]
*** xref:operate/cassandra-migration.adoc[]
*** xref:operate/security.adoc[]
+*** xref:operate/db-benchmark.adoc[]
** xref:extending/index.adoc[]
*** xref:extending/mail-processing.adoc[]
*** xref:extending/mailbox-listeners.adoc[]
diff --git a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/db-benchmark.adoc b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/db-benchmark.adoc
new file mode 100644
index 0000000..1f50897
--- /dev/null
+++ b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/db-benchmark.adoc
@@ -0,0 +1,450 @@
+= Distributed James Server -- Database benchmarks
+:navtitle: Database benchmarks
+
+This document provides basic performance of Distributed James' databases, benchmark methodologies as a basis for a James administrator who
+can test and evaluate if his Distributed James databases are performing well.
+
+It includes:
+
+* A sample deployment topology
+* Propose benchmark methodology and base performance for each database. This aims to help operators to quickly identify
+performance issues and compliance of their databases.
+
+== Sample deployment topology
+
+We deploy a sample topology of Distributed James with these following databases:
+
+- Apache Cassandra 4 as main database
+- OpenDistro 1.13.1 as search engine
+- RabbitMQ 3.8.17 as message queue
+- OVH Swift S3 as an object storage
+
+With the above system, our email service operates stably with valuable performance.
+For a more details, it can handle a load throughput up to about 1000 JMAP requests per second with 99th percentile latency is 400ms.
+
+== Benchmark methodologies and base performances
+We are willing to share the benchmark methodologies and the result to you as a reference to evaluate your Distributed James' performance.
+Other evaluation methods are welcome, as long as your databases exhibit similar or even better performance than ours.
+It is up to your business needs. If your databases shows results that fall far from our baseline performance, there's a good chance that
+there are problems with your system, and you need to check it out thoroughly.
+
+=== Benchmark Cassandra
+
+==== Benchmark methodology
+===== Benchmark tool
+
+We use https://cassandra.apache.org/doc/latest/cassandra/tools/cassandra_stress.html[cassandra-stress tool] - an official
+tool of Cassandra for stress loading tests.
+
+The cassandra-stress tool is a Java-based stress testing utility for basic benchmarking and load testing a Cassandra cluster.
+Data modeling choices can greatly affect application performance. Significant load testing over several trials is the best method for discovering issues with a particular data model. The cassandra-stress tool is an effective tool for populating a cluster and stress testing CQL tables and queries. Use cassandra-stress to:
+
+- Quickly determine how a schema performs.
+- Understand how your database scales.
+- Optimize your data model and settings.
+- Determine production capacity.
+
+There are several operation types:
+
+- write-only, read-only, and mixed workloads of standard data
+- write-only and read-only workloads for counter columns
+- user configured workloads, running custom queries on custom schemas
+
+===== How to benchmark
+
+Here we are using a simple case to test and compare Cassandra performance between different setup environments.
+
+[source,yaml]
+----
+keyspace: stresscql
+
+keyspace_definition: |
+ CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
+
+table: mixed_workload
+
+table_definition: |
+ CREATE TABLE mixed_workload (
+ key uuid PRIMARY KEY,
+ a blob,
+ b blob
+ ) WITH COMPACT STORAGE
+
+columnspec:
+ - name: a
+ size: uniform(1..10000)
+ - name: b
+ size: uniform(1..100000)
+
+insert:
+ partitions: fixed(1)
+
+queries:
+ read:
+ cql: select * from mixed_workload where key = ?
+ fields: samerow
+----
+
+Create the yaml file as above and copy to a Cassandra node.
+
+Insert some sample data:
+
+[source,bash]
+----
+cassandra-stress user profile=mixed_workload.yml n=100000 "ops(insert=1)" cl=ONE -mode native cql3 user=<user> password=<password> -node <IP> -rate threads=8 -graph file=./graph_insert.xml title=Benchmark revision=insert_ONE
+----
+
+Read intensive scenario:
+
+[source,bash]
+----
+cassandra-stress user profile=mixed_workload.yml n=100000 "ops(insert=1,read=4)" cl=ONE -mode native cql3 user=<user> password=<password> -node <IP> -rate threads=8 -graph file=./graph_mixed.xml title=Benchmark revision=mixed_ONE
+----
+
+In there:
+
+- n=100000: The number of insert batches, not number of individual insert operations.
+- rate threads=8: The number of concurrent threads. If not specified it will start with 4 threads and increase until server reaches a limit.
+- ops(insert=1,read=4): This will execute insert and read queries in the ratio 1:4.
+- graph: Export results to graph in html format.
+
+==== Sample benchmark result
+image::cassandra_stress_test_result_1.png[]
+
+image::cassandra_stress_test_result_2.png[]
+
+==== References
+https://www.datastax.com/blog/improved-cassandra-21-stress-tool-benchmark-any-schema-part-1[Datastax - Cassandra stress tool]
+
+https://www.instaclustr.com/deep-diving-cassandra-stress-part-3-using-yaml-profiles/[Deep Diving cassandra-stress – Part 3 (Using YAML Profiles)]
+
+=== Benchmark Elasticsearch
+
+==== Benchmark methodology
+
+===== Benchmark tool
+We use https://github.com/elastic/rally[EsRally] - an official Elasticsearch benchmarking tool. EsRally provides the following features:
+
+- Automatically create Elasticsearch clusters, stress tests them, and delete them.
+- Manage stress testing data and solutions by Elasticsearch version.
+- Present stress testing data in a comprehensive way, allowing you to compare and analyze the data of different stress tests and store the data on a particular Elasticsearch instance for secondary analysis.
+- Collect Java Virtual Machine (JVM) details, such as memory and garbage collection (GC) data, to locate performance problems.
+
+You can have a look at https://elasticsearch-benchmarks.elastic.co/ where Elasticsearch also officially uses esrally to test its performance and publishes the results in real-time.
+
+===== How to benchmark
+Please follow https://esrally.readthedocs.io/en/latest/quickstart.html?spm=a2c65.11461447.0.0.e26a498c3KJZNe[Esrally quickstart documentation]
+to set up it first.
+
+Let's see which tracks (simulation profiles) that EsRally provides: ```esrally list tracks```.
+For our James use case, we are interested in ```pmc``` track: ```Full-text benchmark with academic papers from PMC```.
+
+Run the below script to benchmark against your Elasticsearch cluster:
+
+[source,bash]
+----
+esrally race --pipeline=benchmark-only --track=[track-name] --target-host=[ip_node1:port_node1],[ip_node2:port_node2],[ip_node3:port_node3] --client-options="use_ssl:false,verify_certs:false,basic_auth_user:'[user]',basic_auth_password:'[password]'"
+----
+
+In there:
+
+* --pipeline=benchmark-only: benchmark against a running cluster
+* track-name: track you want to benchmark
+* ip:port: Elasticsearch Node' socket
+* --client-options: change to your Elasticsearch authentication credentials
+
+==== Sample benchmark result
+===== PMC track
+
+[source]
+----
+| Metric | Task | Value | Unit |
+|---------------------------------------------------------------:|------------------------------:|------------:|--------:|
+| Min Throughput | index-append | 734.63 | docs/s |
+| Mean Throughput | index-append | 763.16 | docs/s |
+| Median Throughput | index-append | 746.5 | docs/s |
+| Max Throughput | index-append | 833.51 | docs/s |
+| 50th percentile latency | index-append | 4738.57 | ms |
+| 90th percentile latency | index-append | 8129.1 | ms |
+| 99th percentile latency | index-append | 11734.5 | ms |
+| 100th percentile latency | index-append | 14662.9 | ms |
+| 50th percentile service time | index-append | 4738.57 | ms |
+| 90th percentile service time | index-append | 8129.1 | ms |
+| 99th percentile service time | index-append | 11734.5 | ms |
+| 100th percentile service time | index-append | 14662.9 | ms |
+| error rate | index-append | 0 | % |
+| Min Throughput | default | 19.94 | ops/s |
+| Mean Throughput | default | 19.95 | ops/s |
+| Median Throughput | default | 19.95 | ops/s |
+| Max Throughput | default | 19.96 | ops/s |
+| 50th percentile latency | default | 23.1322 | ms |
+| 90th percentile latency | default | 25.4129 | ms |
+| 99th percentile latency | default | 29.1382 | ms |
+| 100th percentile latency | default | 29.4762 | ms |
+| 50th percentile service time | default | 21.4895 | ms |
+| 90th percentile service time | default | 23.589 | ms |
+| 99th percentile service time | default | 26.6134 | ms |
+| 100th percentile service time | default | 27.9068 | ms |
+| error rate | default | 0 | % |
+| Min Throughput | term | 19.93 | ops/s |
+| Mean Throughput | term | 19.94 | ops/s |
+| Median Throughput | term | 19.94 | ops/s |
+| Max Throughput | term | 19.95 | ops/s |
+| 50th percentile latency | term | 31.0684 | ms |
+| 90th percentile latency | term | 34.1419 | ms |
+| 99th percentile latency | term | 74.7904 | ms |
+| 100th percentile latency | term | 103.663 | ms |
+| 50th percentile service time | term | 29.6775 | ms |
+| 90th percentile service time | term | 32.4288 | ms |
+| 99th percentile service time | term | 36.013 | ms |
+| 100th percentile service time | term | 102.193 | ms |
+| error rate | term | 0 | % |
+| Min Throughput | phrase | 19.94 | ops/s |
+| Mean Throughput | phrase | 19.95 | ops/s |
+| Median Throughput | phrase | 19.95 | ops/s |
+| Max Throughput | phrase | 19.95 | ops/s |
+| 50th percentile latency | phrase | 23.0255 | ms |
+| 90th percentile latency | phrase | 26.1607 | ms |
+| 99th percentile latency | phrase | 31.2094 | ms |
+| 100th percentile latency | phrase | 45.5012 | ms |
+| 50th percentile service time | phrase | 21.5109 | ms |
+| 90th percentile service time | phrase | 24.4144 | ms |
+| 99th percentile service time | phrase | 26.1865 | ms |
+| 100th percentile service time | phrase | 43.5122 | ms |
+| error rate | phrase | 0 | % |
+
+----------------------------------
+[INFO] SUCCESS (took 1772 seconds)
+----------------------------------
+----
+
+===== PMC custom track
+We customized the PMC track by increasing search throughput target to figure out our Elasticsearch cluster limit.
+
+The result is that with 25-30 request/s we have a 99th percentile latency of 1s.
+
+==== References
+https://www.alibabacloud.com/blog/esrally-official-stress-testing-tool-for-elasticsearch_597102[esrally: Official Stress Testing Tool for Elasticsearch]
+
+https://esrally.readthedocs.io/en/latest/adding_tracks.html[Create a custom EsRally track]
+
+https://discuss.elastic.co/t/why-the-percentile-latency-is-several-times-more-than-service-time/69630[Why the percentile latency is several times more than service time]
+
+=== Benchmark RabbitMQ
+
+==== Benchmark methodology
+
+===== Benchmark tool
+We use https://github.com/rabbitmq/rabbitmq-perf-test[rabbitmq-perf-test] tool.
+
+===== How to benchmark
+Using PerfTestMulti for more friendly:
+
+- Provide input scenario from a single file
+- Provide output result as a single file. Can be visualized result file by the chart (graph WebUI)
+
+Run a command like below:
+
+[source,bash]
+----
+bin/runjava com.rabbitmq.perf.PerfTestMulti [scenario-file] [result-file]
+----
+
+In order to visualize result, coping [result-file] to ```/html/examples/[result-file]```.
+Start webserver to view graph by the command:
+
+[source,bash]
+----
+bin/runjava com.rabbitmq.perf.WebServer
+----
+Then browse: http://localhost:8080/examples/sample.html
+
+==== Sample benchmark result
+- Scenario file:
+
+[source]
+----
+[{'name': 'consume', 'type': 'simple',
+'uri': 'amqp://james:eeN7Auquaeng@localhost:5677',
+'params':
+ [{'time-limit': 30, 'producer-count': 2, 'consumer-count': 4}]}]
+----
+
+- Result file:
+
+[source,json]
+----
+{
+ "consume": {
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 4330.225080385852,
+ "avg-latency": 18975254,
+ "send-msg-rate": 455161.3183279743,
+ "recv-bytes-rate": 0,
+ "samples": [{
+ "elapsed": 15086,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 0,
+ "send-msg-rate": 0.06628662335940608,
+ "recv-bytes-rate": 0
+ },
+ {
+ "elapsed": 16086,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 1579,
+ "max-latency": 928296,
+ "min-latency": 278765,
+ "avg-latency": 725508,
+ "send-msg-rate": 388994,
+ "recv-bytes-rate": 0
+ },
+ {
+ "elapsed": 48184,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 3768.4918347742555,
+ "max-latency": 32969370,
+ "min-latency": 31852685,
+ "avg-latency": 32385432,
+ "send-msg-rate": 0,
+ "recv-bytes-rate": 0
+ },
+ {
+ "elapsed": 49186,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 4416.167664670658,
+ "max-latency": 33953465,
+ "min-latency": 32854771,
+ "avg-latency": 33373113,
+ "send-msg-rate": 0,
+ "recv-bytes-rate": 0
+ }]
+ }
+}
+----
+
+- Key result points:
+
+|===
+|Metrics |Unit |Result
+
+|Publisher throughput (the sending rate)
+|messages / second
+|3111
+
+|Consumer throughput (the receiving rate)
+|messages / second
+|4404
+|===
+
+=== Benchmark S3 storage
+
+==== Benchmark methodology
+
+===== Benchmark tool
+We use https://github.com/dvassallo/s3-benchmark[s3-benchmark] tool.
+
+===== How to benchmark
+1. Make sure you set up appropriate S3 credentials with `awscli`.
+2. If you are using a compatible S3 storage of cloud providers like OVH, you would need to configure
+`awscli-plugin-endpoint`. E.g: https://docs.ovh.com/au/en/storage/getting_started_with_the_swift_S3_API/[Getting started with the OVH Swift S3 API]
+3. Install `s3-benchmark` tool and run the command:
+
+[source,bash]
+----
+./s3-benchmark -endpoint=[endpoint] -region=[region] -bucket-name=[bucket-name] -payloads-min=[payload-min] -payloads-max=[payload-max] threads-max=[threads-max]
+----
+
+==== Sample benchmark result
+We did S3 performance testing with suitable email objects sizes: 4 KB, 128 KB, 1 MB, 8 MB.
+
+Result:
+
+[source,bash]
+----
+--- SETUP --------------------------------------------------------------------------------------------------------------------
+
+Uploading 4 KB objects
+ 100% |████████████████████████████████████████| [4s:0s]
+Uploading 128 KB objects
+ 100% |████████████████████████████████████████| [9s:0s]
+Uploading 1 MB objects
+ 100% |████████████████████████████████████████| [8s:0s]
+Uploading 8 MB objects
+ 100% |████████████████████████████████████████| [10s:0s]
+
+--- BENCHMARK ----------------------------------------------------------------------------------------------------------------
+
+Download performance with 4 KB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 0.6 MB/s | 36 10 17 22 36 57 233 249 | 37 10 17 22 36 57 233 249 |
+| 9 | 0.6 MB/s | 30 10 15 21 33 45 82 234 | 30 10 15 21 33 45 83 235 |
+| 10 | 0.2 MB/s | 55 11 18 22 28 52 248 1075 | 55 11 18 22 28 52 249 1075 |
+| 11 | 0.3 MB/s | 66 11 18 23 45 233 293 683 | 67 11 19 23 45 233 293 683 |
+| 12 | 0.6 MB/s | 35 12 19 22 43 55 67 235 | 35 12 19 22 43 56 67 235 |
+| 13 | 0.2 MB/s | 68 11 19 26 58 79 279 1037 | 68 11 19 26 58 80 279 1037 |
+| 14 | 0.6 MB/s | 43 17 20 24 52 56 230 236 | 43 17 20 25 52 56 230 236 |
+| 15 | 0.2 MB/s | 69 11 16 23 50 66 274 1299 | 69 11 16 24 50 66 274 1299 |
+| 16 | 0.5 MB/s | 52 9 19 31 81 95 228 237 | 53 9 19 31 81 95 229 237 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+
+Download performance with 128 KB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 3.3 MB/s | 71 16 22 28 39 66 232 1768 | 73 16 23 29 43 67 233 1769 |
+| 9 | 3.6 MB/s | 74 9 19 23 34 58 239 1646 | 75 10 20 24 37 59 240 1647 |
+| 10 | 2.9 MB/s | 97 16 21 24 48 89 656 2034 | 99 17 21 26 49 92 657 2035 |
+| 11 | 3.0 MB/s | 100 10 21 26 39 64 1049 2029 | 101 11 21 27 40 65 1050 2030 |
+| 12 | 3.0 MB/s | 76 12 19 24 44 56 256 2012 | 77 13 20 25 48 69 258 2013 |
+| 13 | 6.1 MB/s | 73 10 13 20 43 223 505 1026 | 74 10 15 21 43 224 506 1027 |
+| 14 | 5.5 MB/s | 81 11 15 23 51 240 666 1060 | 82 12 16 23 54 241 667 1060 |
+| 15 | 2.7 MB/s | 80 10 19 28 43 59 234 2222 | 84 11 25 34 47 60 236 2224 |
+| 16 | 18.6 MB/s | 58 10 19 26 61 224 248 266 | 61 10 22 29 65 224 249 267 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+
+Download performance with 1 MB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 56.4 MB/s | 41 12 26 34 43 57 94 235 | 136 30 69 100 161 284 345 396 |
+| 9 | 55.2 MB/s | 53 19 32 39 50 69 238 247 | 149 26 84 117 164 245 324 655 |
+| 10 | 33.9 MB/s | 74 17 27 37 50 77 456 1060 | 177 29 97 134 205 273 484 1076 |
+| 11 | 57.3 MB/s | 56 26 35 44 57 71 251 298 | 185 40 93 129 216 329 546 871 |
+| 12 | 37.7 MB/s | 66 21 33 43 58 73 102 1024 | 202 24 81 125 205 427 839 1222 |
+| 13 | 57.6 MB/s | 59 24 35 40 58 71 275 289 | 215 40 94 181 288 393 500 674 |
+| 14 | 47.1 MB/s | 73 18 46 56 66 75 475 519 | 229 30 116 221 272 441 603 686 |
+| 15 | 58.2 MB/s | 65 11 40 51 63 75 260 294 | 243 29 132 174 265 485 831 849 |
+| 16 | 23.1 MB/s | 96 14 46 55 62 80 124 2022 | 278 31 124 187 249 634 827 2028 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+
+Download performance with 8 MB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 58.4 MB/s | 88 35 65 79 88 96 288 307 | 1063 458 564 759 928 1151 4967 6841 |
+| 9 | 50.4 MB/s | 137 32 52 69 145 286 509 1404 | 1212 160 471 581 1720 2873 3744 4871 |
+| 10 | 58.2 MB/s | 77 46 54 66 77 98 275 285 | 1319 377 432 962 1264 3232 4266 6151 |
+| 11 | 58.4 MB/s | 97 32 63 72 80 91 323 707 | 1429 325 593 722 1648 3020 6172 6370 |
+| 12 | 58.5 MB/s | 108 26 65 81 91 261 301 519 | 1569 472 696 1101 1915 3175 4066 5110 |
+| 13 | 56.1 MB/s | 115 35 69 83 93 125 329 1092 | 1712 458 801 1165 2354 3559 3865 5945 |
+| 14 | 58.6 MB/s | 103 26 70 78 88 112 309 656 | 1807 789 999 1269 1998 3258 5201 6651 |
+| 15 | 58.3 MB/s | 113 31 55 67 79 134 276 1490 | 1947 497 1081 1756 2730 3557 3799 3974 |
+| 16 | 58.0 MB/s | 99 35 67 79 96 146 282 513 | 2091 531 882 1136 2161 6034 6686 6702 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+----
+
+We believe that the actual OVH Swift S3' throughput should be at least about 100 MB/s. This was not fully achieved due to
+network limitations of the client machine performing the benchmark.
+
+
+
diff --git a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc
index f1d33c9..0eaee06 100644
--- a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc
+++ b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc
@@ -3,7 +3,7 @@
The following pages detail how to operate the Distributed server.
-Once you have a Distributed James server up and running you then need to ensure it operates correctly.
+Once you have a Distributed James server up and running you then need to ensure it operates correctly and has a decent performance.
You may also need to perform some operation maintenance or recover from incidents. This section covers
these topics.
@@ -24,6 +24,8 @@ distributed James operators.
We also included a guide for xref:operate/migrating.adoc[migrating existing data] into the distributed server.
+We introduced xref:operate/db-benchmark.adoc[James database's base performance and how to benchmark] them.
+
Read more about xref:operate/cassandra-migration.adoc[Cassandra data migration].
== Upgrading
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org