diff --git a/documentation/en/src/benchmarks.md b/documentation/en/src/benchmarks.md index 15a7e0273..d9aad0bc1 100644 --- a/documentation/en/src/benchmarks.md +++ b/documentation/en/src/benchmarks.md @@ -9,28 +9,28 @@ by `pgbench` against the same PostgreSQL backend on identical hardware. Numbers below are relative throughput against each competitor and absolute per-transaction latency. -_Last updated: 2026-04-27 12:00 UTC._ +_Last updated: 2026-05-07 13:25 UTC._ ## TL;DR -- **vs pgbouncer** — pg_doorman peaks at **x12.0** TPS on prepared protocol, 120 clients. -- **vs odyssey** — pg_doorman wins by **+40%** at most (extended protocol, 120 clients). -- **Tail spread at 10 000 simple-protocol clients** (`p99/p50`, lower = more predictable) — pg_doorman 1.1× (59.9→64.5ms), pgbouncer 1.4× (276→387ms), odyssey 11× (17.9→204ms). +- **vs pgbouncer** — pg_doorman peaks at **x9.7** TPS on prepared protocol, 500 clients. +- **vs odyssey** — pg_doorman peaks at **x1.5** TPS on extended protocol, 10,000 clients. +- **Tail spread at 10 000 simple-protocol clients** (`p99/p50`, lower = more predictable) — pg_doorman 1.3× (39.2→51.6ms), pgbouncer 1.3× (278→367ms), odyssey 116× (2.60→301ms). ![Tail spread at 10,000 simple-protocol clients](images/benchmarks/tldr_tail_spread.svg) ### Environment -- **Provider**: Ubicloud `standard-60` (eu-central-h1) -- **Resources**: 60 vCPU / 235.9 GB +- **Provider**: Ubicloud `standard-30` (eu-central-h1) +- **Resources**: 30 vCPU / 117.9 GB - **Kernel**: `Linux 5.15.0-139-generic x86_64` -- **Versions**: PostgreSQL 14.22, pg_doorman 3.6.1, pgbouncer 1.25.1, odyssey 1.4.1 -- **Workers**: pg_doorman: 30, odyssey: 30 -- **Duration per pgbench run**: 60s -- **Started**: 2026-04-27 08:06 UTC -- **Finished**: 2026-04-27 11:03 UTC -- **Total wall-clock**: 2h 57m 08s -- **Commit**: [`c9dd765c`](https://github.com/ozontech/pg_doorman/commit/c9dd765c60605e453d203f93e2d5cfadf2734716) +- **Versions**: PostgreSQL 14.22, pg_doorman 3.8.0, pgbouncer 1.25.1, odyssey 1.4.1 +- **Workers**: pg_doorman: 15, odyssey: 15 +- **Duration per pgbench run**: 30s +- **Started**: 2026-05-07 11:39 UTC +- **Finished**: 2026-05-07 13:21 UTC +- **Total wall-clock**: 1h 42m 14s +- **Commit**: [`955a7402`](https://github.com/ozontech/pg_doorman/commit/955a7402701cb061123368e3afde09688ff6390f) ### Methodology @@ -83,51 +83,51 @@ the client count grows. Full p95 series ships in the raw | Test | vs pgbouncer | vs odyssey | |------|--------------|------------| -| 1 client | ≈0% | ≈0% | -| 40 clients | x2.9 | -46% | -| 120 clients | x9.9 | ≈0% | -| 500 clients | x6.6 | -32% | -| 10,000 clients | x4.7 | -34% | -| 1 client + Reconnect | -14% | x2.0 | -| 40 clients + Reconnect | x1.6 | N/A | -| 120 clients + Reconnect | x1.7 | N/A | -| 500 clients + Reconnect | x1.7 | N/A | -| 10,000 clients + Reconnect | +41% | N/A | -| 1 client + SSL | ≈0% | ≈0% | -| 40 clients + SSL | x3.1 | -38% | -| 120 clients + SSL | x8.5 | -5% | -| 500 clients + SSL | x10.6 | +18% | -| 10,000 clients + SSL | x7.1 | +12% | -| 1 client + SSL + Reconnect | -6% | x1.6 | -| 40 clients + SSL + Reconnect | ≈0% | -35% | -| 120 clients + SSL + Reconnect | +5% | -39% | -| 500 clients + SSL + Reconnect | +17% | -28% | -| 10,000 clients + SSL + Reconnect | -8% | -16% | +| 1 client | -3% | -9% | +| 40 clients | x2.9 | -42% | +| 120 clients | x6.0 | -24% | +| 500 clients | x6.7 | -11% | +| 10,000 clients | x6.9 | +10% | +| 1 client + Reconnect | ≈0% | x2.3 | +| 40 clients + Reconnect | x2.1 | x1.7 | +| 120 clients + Reconnect | x2.2 | N/A | +| 500 clients + Reconnect | x2.3 | N/A | +| 10,000 clients + Reconnect | x1.9 | N/A | +| 1 client + SSL | -7% | -6% | +| 40 clients + SSL | x3.0 | -39% | +| 120 clients + SSL | x7.1 | -29% | +| 500 clients + SSL | x7.7 | -20% | +| 10,000 clients + SSL | x8.3 | +19% | +| 1 client + SSL + Reconnect | -52% | +11% | +| 40 clients + SSL + Reconnect | ≈0% | -15% | +| 120 clients + SSL + Reconnect | +13% | -15% | +| 500 clients + SSL + Reconnect | +10% | -7% | +| 10,000 clients + SSL + Reconnect | +10% | ≈0% | ### Latency (ms; spread = p99 / p50) | Test | pg_doorman p50/p99 | spread | pgbouncer p50/p99 | spread | odyssey p50/p99 | spread | |------|-------------------:|-------:|------------------:|-------:|----------------:|-------:| -| 1 client | 0.08 / 0.10 | 1.4× | 0.07 / 0.10 | 1.4× | 0.07 / 0.12 | 1.7× | -| 40 clients | 0.27 / 0.50 | 1.8× | 0.74 / 1.90 | 2.6× | 0.12 / 0.30 | 2.5× | -| 120 clients | 0.29 / 0.91 | 3.2× | 2.86 / 6.77 | 2.4× | 0.24 / 2.07 | 8.8× | -| 500 clients | 2.30 / 4.38 | 1.9× | 12.6 / 27.6 | 2.2× | 0.82 / 7.87 | 9.5× | -| 10,000 clients | 59.9 / 64.5 | 1.1× | 276 / 387 | 1.4× | 17.9 / 204 | 11× | -| 1 client + Reconnect | 0.14 / 0.23 | 1.6× | 0.11 / 0.21 | 1.9× | 0.18 / 0.31 | 1.7× | -| 40 clients + Reconnect | 1.26 / 4.10 | 3.2× | 1.91 / 6.26 | 3.3× | 1.85 / 5.35 | 2.9× | -| 120 clients + Reconnect | 3.83 / 11.1 | 2.9× | 5.89 / 18.1 | 3.1× | 5.95 / 16.7 | 2.8× | -| 500 clients + Reconnect | 16.3 / 42.9 | 2.6× | 26.2 / 71.1 | 2.7× | 25.3 / 65.4 | 2.6× | -| 10,000 clients + Reconnect | 369 / 763 | 2.1× | 524 / 1106 | 2.1× | 744 / 1519 | 2.0× | -| 1 client + SSL | 0.08 / 0.11 | 1.4× | 0.08 / 0.11 | 1.4× | 0.08 / 0.12 | 1.6× | -| 40 clients + SSL | 0.27 / 0.50 | 1.8× | 0.87 / 2.16 | 2.5× | 0.15 / 0.28 | 1.9× | -| 120 clients + SSL | 0.42 / 1.16 | 2.7× | 3.71 / 8.61 | 2.3× | 0.30 / 2.07 | 7.0× | -| 500 clients + SSL | 1.09 / 2.54 | 2.3× | 17.0 / 34.7 | 2.0× | 1.04 / 5.42 | 5.2× | -| 10,000 clients + SSL | 26.9 / 64.0 | 2.4× | 369 / 511 | 1.4× | 29.7 / 82.4 | 2.8× | -| 1 client + SSL + Reconnect | 0.23 / 0.36 | 1.6× | 0.19 / 0.35 | 1.9× | 0.28 / 0.43 | 1.5× | -| 40 clients + SSL + Reconnect | 17.6 / 42.2 | 2.4× | 16.3 / 53.1 | 3.3× | 11.4 / 31.7 | 2.8× | -| 120 clients + SSL + Reconnect | 57.0 / 130 | 2.3× | 55.6 / 166 | 3.0× | 33.9 / 95.7 | 2.8× | -| 500 clients + SSL + Reconnect | 212 / 483 | 2.3× | 237 / 619 | 2.6× | 150 / 392 | 2.6× | -| 10,000 clients + SSL + Reconnect | 5033 / 10055 | 2.0× | 4052 / 10245 | 2.5× | 4361 / 8612 | 2.0× | +| 1 client | 0.07 / 0.10 | 1.3× | 0.07 / 0.10 | 1.4× | 0.07 / 0.10 | 1.5× | +| 40 clients | 0.26 / 0.49 | 1.9× | 0.71 / 1.73 | 2.4× | 0.12 / 0.40 | 3.2× | +| 120 clients | 0.43 / 1.59 | 3.7× | 2.65 / 6.11 | 2.3× | 0.25 / 2.66 | 11× | +| 500 clients | 2.07 / 6.26 | 3.0× | 11.3 / 24.8 | 2.2× | 0.67 / 12.6 | 19× | +| 10,000 clients | 39.2 / 51.6 | 1.3× | 278 / 367 | 1.3× | 2.60 / 301 | 116× | +| 1 client + Reconnect | 0.08 / 0.14 | 1.7× | 0.11 / 0.19 | 1.6× | 0.18 / 0.35 | 1.9× | +| 40 clients + Reconnect | 1.03 / 2.78 | 2.7× | 2.05 / 5.96 | 2.9× | 1.70 / 5.24 | 3.1× | +| 120 clients + Reconnect | 3.16 / 7.71 | 2.4× | 6.55 / 17.6 | 2.7× | 5.30 / 13.6 | 2.6× | +| 500 clients + Reconnect | 13.5 / 31.2 | 2.3× | 29.8 / 68.0 | 2.3× | 24.3 / 64.5 | 2.7× | +| 10,000 clients + Reconnect | 291 / 568 | 2.0× | 551 / 1169 | 2.1× | 859 / 1652 | 1.9× | +| 1 client + SSL | 0.08 / 0.11 | 1.3× | 0.08 / 0.12 | 1.5× | 0.07 / 0.12 | 1.7× | +| 40 clients + SSL | 0.28 / 0.62 | 2.2× | 0.84 / 1.94 | 2.3× | 0.13 / 0.60 | 4.5× | +| 120 clients + SSL | 0.47 / 1.93 | 4.1× | 3.37 / 7.77 | 2.3× | 0.26 / 3.79 | 15× | +| 500 clients + SSL | 1.69 / 10.7 | 6.3× | 15.7 / 31.5 | 2.0× | 0.68 / 13.7 | 20× | +| 10,000 clients + SSL | 35.8 / 64.2 | 1.8× | 373 / 526 | 1.4× | 7.26 / 351 | 48× | +| 1 client + SSL + Reconnect | 0.33 / 0.40 | 1.2× | 0.14 / 0.37 | 2.7× | 0.29 / 0.45 | 1.6× | +| 40 clients + SSL + Reconnect | 19.0 / 40.3 | 2.1× | 18.2 / 54.3 | 3.0× | 15.6 / 36.4 | 2.3× | +| 120 clients + SSL + Reconnect | 57.6 / 123 | 2.1× | 63.6 / 153 | 2.4× | 48.3 / 110 | 2.3× | +| 500 clients + SSL + Reconnect | 231 / 483 | 2.1× | 250 / 557 | 2.2× | 218 / 454 | 2.1× | +| 10,000 clients + SSL + Reconnect | 4277 / 9052 | 2.1× | 4938 / 9878 | 2.0× | 4254 / 8958 | 2.1× | --- @@ -139,41 +139,41 @@ the client count grows. Full p95 series ships in the raw | Test | vs pgbouncer | vs odyssey | |------|--------------|------------| -| 1 client | ≈0% | x1.6 | -| 40 clients | x3.0 | -21% | -| 120 clients | x10.4 | +40% | -| 500 clients | x7.4 | +7% | -| 10,000 clients | x5.2 | ≈0% | -| 1 client + Reconnect | -16% | x1.9 | -| 40 clients + Reconnect | x1.7 | N/A | -| 120 clients + Reconnect | x1.6 | x1.5 | -| 500 clients + Reconnect | x1.7 | N/A | -| 10,000 clients + Reconnect | +41% | x2.2 | -| 1 client + SSL | ≈0% | +49% | -| 40 clients + SSL | x3.3 | -13% | -| 120 clients + SSL | x9.4 | +50% | -| 500 clients + SSL | x10.4 | x1.7 | -| 10,000 clients + SSL | x7.1 | +25% | +| 1 client | +7% | x1.6 | +| 40 clients | x3.0 | -4% | +| 120 clients | x6.1 | -9% | +| 500 clients | x7.1 | +31% | +| 10,000 clients | x6.9 | x1.5 | +| 1 client + Reconnect | -13% | x2.4 | +| 40 clients + Reconnect | x2.2 | N/A | +| 120 clients + Reconnect | x2.4 | N/A | +| 500 clients + Reconnect | x2.2 | N/A | +| 10,000 clients + Reconnect | x2.0 | x3.0 | +| 1 client + SSL | +5% | +46% | +| 40 clients + SSL | x2.9 | -17% | +| 120 clients + SSL | x6.3 | ≈0% | +| 500 clients + SSL | x7.7 | +29% | +| 10,000 clients + SSL | x8.0 | x1.8 | ### Latency (ms; spread = p99 / p50) | Test | pg_doorman p50/p99 | spread | pgbouncer p50/p99 | spread | odyssey p50/p99 | spread | |------|-------------------:|-------:|------------------:|-------:|----------------:|-------:| -| 1 client | 0.07 / 0.11 | 1.4× | 0.07 / 0.10 | 1.4× | 0.11 / 0.18 | 1.6× | -| 40 clients | 0.27 / 0.48 | 1.8× | 0.76 / 1.90 | 2.5× | 0.18 / 0.48 | 2.7× | -| 120 clients | 0.28 / 0.89 | 3.2× | 3.06 / 6.87 | 2.2× | 0.35 / 3.52 | 10× | -| 500 clients | 2.08 / 3.98 | 1.9× | 12.8 / 27.7 | 2.2× | 1.55 / 13.2 | 8.5× | -| 10,000 clients | 55.4 / 60.3 | 1.1× | 288 / 387 | 1.3× | 52.2 / 326 | 6.2× | -| 1 client + Reconnect | 0.14 / 0.22 | 1.6× | 0.12 / 0.22 | 1.8× | 0.24 / 0.41 | 1.7× | -| 40 clients + Reconnect | 1.25 / 4.02 | 3.2× | 1.96 / 6.44 | 3.3× | 1.85 / 5.48 | 3.0× | -| 120 clients + Reconnect | 3.81 / 11.1 | 2.9× | 5.62 / 17.8 | 3.2× | 5.74 / 15.7 | 2.7× | -| 500 clients + Reconnect | 16.5 / 44.6 | 2.7× | 26.5 / 72.3 | 2.7× | 27.1 / 72.2 | 2.7× | -| 10,000 clients + Reconnect | 368 / 764 | 2.1× | 511 / 1139 | 2.2× | 816 / 1657 | 2.0× | -| 1 client + SSL | 0.09 / 0.11 | 1.2× | 0.08 / 0.12 | 1.5× | 0.12 / 0.20 | 1.7× | -| 40 clients + SSL | 0.27 / 0.49 | 1.8× | 0.91 / 2.20 | 2.4× | 0.23 / 0.37 | 1.6× | -| 120 clients + SSL | 0.38 / 1.05 | 2.8× | 3.68 / 8.69 | 2.4× | 0.57 / 2.62 | 4.6× | -| 500 clients + SSL | 1.01 / 2.65 | 2.6× | 17.6 / 36.1 | 2.1× | 2.29 / 7.34 | 3.2× | -| 10,000 clients + SSL | 27.7 / 65.9 | 2.4× | 384 / 521 | 1.4× | 49.2 / 152 | 3.1× | +| 1 client | 0.07 / 0.09 | 1.3× | 0.07 / 0.10 | 1.4× | 0.11 / 0.17 | 1.6× | +| 40 clients | 0.26 / 0.51 | 1.9× | 0.73 / 1.80 | 2.5× | 0.21 / 0.69 | 3.3× | +| 120 clients | 0.44 / 1.65 | 3.8× | 2.75 / 6.35 | 2.3× | 0.41 / 1.77 | 4.3× | +| 500 clients | 2.13 / 6.05 | 2.8× | 11.9 / 25.5 | 2.1× | 0.81 / 19.3 | 24× | +| 10,000 clients | 39.7 / 58.4 | 1.5× | 285 / 404 | 1.4× | 5.35 / 432 | 81× | +| 1 client + Reconnect | 0.14 / 0.21 | 1.5× | 0.13 / 0.20 | 1.5× | 0.32 / 0.48 | 1.5× | +| 40 clients + Reconnect | 1.04 / 2.69 | 2.6× | 2.16 / 5.97 | 2.8× | 1.68 / 5.25 | 3.1× | +| 120 clients + Reconnect | 3.17 / 7.70 | 2.4× | 7.32 / 18.3 | 2.5× | 5.43 / 16.0 | 2.9× | +| 500 clients + Reconnect | 13.5 / 31.6 | 2.3× | 27.8 / 67.7 | 2.4× | 25.3 / 69.1 | 2.7× | +| 10,000 clients + Reconnect | 291 / 569 | 2.0× | 571 / 1212 | 2.1× | 871 / 1692 | 1.9× | +| 1 client + SSL | 0.08 / 0.10 | 1.2× | 0.08 / 0.12 | 1.5× | 0.12 / 0.19 | 1.6× | +| 40 clients + SSL | 0.28 / 0.65 | 2.3× | 0.85 / 1.75 | 2.1× | 0.20 / 0.73 | 3.6× | +| 120 clients + SSL | 0.52 / 2.07 | 4.0× | 3.32 / 7.75 | 2.3× | 0.45 / 4.17 | 9.3× | +| 500 clients + SSL | 1.70 / 11.4 | 6.7× | 17.0 / 32.8 | 1.9× | 0.99 / 22.9 | 23× | +| 10,000 clients + SSL | 39.2 / 66.7 | 1.7× | 372 / 615 | 1.7× | 78.1 / 498 | 6.4× | --- @@ -185,41 +185,41 @@ the client count grows. Full p95 series ships in the raw | Test | vs pgbouncer | vs odyssey | |------|--------------|------------| -| 1 client | ≈0% | ≈0% | -| 40 clients | x3.4 | -49% | -| 120 clients | x12.0 | ≈0% | -| 500 clients | x8.5 | -29% | -| 10,000 clients | x6.2 | -32% | -| 1 client + Reconnect | -9% | x2.1 | -| 40 clients + Reconnect | x1.6 | +48% | -| 120 clients + Reconnect | x1.7 | N/A | -| 500 clients + Reconnect | x1.8 | N/A | -| 10,000 clients + Reconnect | +40% | x2.1 | -| 1 client + SSL | +3% | ≈0% | -| 40 clients + SSL | x3.8 | -36% | -| 120 clients + SSL | x10.0 | ≈0% | -| 500 clients + SSL | x12.7 | +19% | -| 10,000 clients + SSL | x8.6 | +12% | +| 1 client | ≈0% | -13% | +| 40 clients | x3.5 | -40% | +| 120 clients | x8.0 | -35% | +| 500 clients | x9.7 | -13% | +| 10,000 clients | x8.8 | +7% | +| 1 client + Reconnect | -8% | x2.1 | +| 40 clients + Reconnect | x1.9 | N/A | +| 120 clients + Reconnect | x2.0 | x1.6 | +| 500 clients + Reconnect | x2.2 | N/A | +| 10,000 clients + Reconnect | x2.0 | x2.9 | +| 1 client + SSL | -3% | ≈0% | +| 40 clients + SSL | x3.6 | -44% | +| 120 clients + SSL | x8.3 | -31% | +| 500 clients + SSL | x9.3 | -19% | +| 10,000 clients + SSL | x10.2 | +19% | ### Latency (ms; spread = p99 / p50) | Test | pg_doorman p50/p99 | spread | pgbouncer p50/p99 | spread | odyssey p50/p99 | spread | |------|-------------------:|-------:|------------------:|-------:|----------------:|-------:| -| 1 client | 0.07 / 0.10 | 1.4× | 0.07 / 0.10 | 1.4× | 0.07 / 0.11 | 1.6× | -| 40 clients | 0.27 / 0.49 | 1.8× | 0.90 / 2.23 | 2.5× | 0.12 / 0.26 | 2.2× | -| 120 clients | 0.30 / 0.94 | 3.2× | 3.82 / 8.20 | 2.1× | 0.23 / 1.48 | 6.3× | -| 500 clients | 2.21 / 4.23 | 1.9× | 16.5 / 33.0 | 2.0× | 0.81 / 6.93 | 8.6× | -| 10,000 clients | 57.5 / 62.9 | 1.1× | 353 / 465 | 1.3× | 17.5 / 205 | 12× | -| 1 client + Reconnect | 0.20 / 0.33 | 1.6× | 0.20 / 0.33 | 1.7× | 0.37 / 0.61 | 1.6× | -| 40 clients + Reconnect | 1.84 / 5.20 | 2.8× | 2.67 / 8.54 | 3.2× | 2.73 / 7.35 | 2.7× | -| 120 clients + Reconnect | 5.25 / 14.6 | 2.8× | 8.11 / 25.0 | 3.1× | 7.72 / 21.6 | 2.8× | -| 500 clients + Reconnect | 21.6 / 58.4 | 2.7× | 38.0 / 101 | 2.7× | 33.3 / 82.8 | 2.5× | -| 10,000 clients + Reconnect | 485 / 1031 | 2.1× | 672 / 1421 | 2.1× | 1026 / 2214 | 2.2× | -| 1 client + SSL | 0.08 / 0.12 | 1.4× | 0.08 / 0.12 | 1.5× | 0.08 / 0.13 | 1.7× | -| 40 clients + SSL | 0.26 / 0.48 | 1.8× | 1.02 / 2.59 | 2.5× | 0.15 / 0.27 | 1.8× | -| 120 clients + SSL | 0.42 / 1.16 | 2.8× | 4.44 / 9.74 | 2.2× | 0.28 / 1.15 | 4.0× | -| 500 clients + SSL | 1.08 / 2.60 | 2.4× | 21.5 / 41.0 | 1.9× | 1.06 / 5.35 | 5.0× | -| 10,000 clients + SSL | 27.1 / 58.3 | 2.1× | 463 / 609 | 1.3× | 29.8 / 86.2 | 2.9× | +| 1 client | 0.07 / 0.09 | 1.3× | 0.07 / 0.11 | 1.5× | 0.07 / 0.10 | 1.5× | +| 40 clients | 0.26 / 0.51 | 2.0× | 0.86 / 2.11 | 2.4× | 0.13 / 0.45 | 3.5× | +| 120 clients | 0.44 / 1.58 | 3.6× | 3.37 / 7.59 | 2.2× | 0.25 / 1.59 | 6.5× | +| 500 clients | 2.06 / 6.54 | 3.2× | 19.8 / 31.0 | 1.6× | 0.64 / 12.2 | 19× | +| 10,000 clients | 39.3 / 55.2 | 1.4× | 347 / 562 | 1.6× | 2.67 / 294 | 110× | +| 1 client + Reconnect | 0.21 / 0.32 | 1.5× | 0.20 / 0.34 | 1.7× | 0.39 / 0.61 | 1.6× | +| 40 clients + Reconnect | 1.77 / 4.75 | 2.7× | 3.16 / 8.56 | 2.7× | 2.73 / 7.73 | 2.8× | +| 120 clients + Reconnect | 4.88 / 12.1 | 2.5× | 9.17 / 25.2 | 2.8× | 7.80 / 20.0 | 2.6× | +| 500 clients + Reconnect | 18.9 / 41.8 | 2.2× | 40.3 / 96.7 | 2.4× | 38.3 / 91.9 | 2.4× | +| 10,000 clients + Reconnect | 391 / 780 | 2.0× | 768 / 1654 | 2.2× | 1128 / 2282 | 2.0× | +| 1 client + SSL | 0.08 / 0.10 | 1.3× | 0.07 / 0.10 | 1.4× | 0.07 / 0.12 | 1.7× | +| 40 clients + SSL | 0.28 / 0.63 | 2.3× | 0.97 / 2.45 | 2.5× | 0.12 / 0.53 | 4.2× | +| 120 clients + SSL | 0.47 / 1.91 | 4.1× | 3.95 / 9.11 | 2.3× | 0.27 / 3.64 | 14× | +| 500 clients + SSL | 1.75 / 10.6 | 6.0× | 19.5 / 37.4 | 1.9× | 0.75 / 13.2 | 18× | +| 10,000 clients + SSL | 35.9 / 67.2 | 1.9× | 439 / 878 | 2.0× | 8.81 / 348 | 40× | --- diff --git a/documentation/en/src/images/benchmarks/extended_latency.svg b/documentation/en/src/images/benchmarks/extended_latency.svg index a6d0ad586..b896cc932 100644 --- a/documentation/en/src/images/benchmarks/extended_latency.svg +++ b/documentation/en/src/images/benchmarks/extended_latency.svg @@ -6,7 +6,7 @@ - 2026-05-01T12:17:20.557240 + 2026-05-07T13:25:06.512241 image/svg+xml @@ -42,7 +42,7 @@ z +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 1 @@ -52,7 +52,7 @@ L 78.02321 25.837812 +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 40 @@ -62,7 +62,7 @@ L 260.876512 25.837812 +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 120 @@ -72,7 +72,7 @@ L 315.333397 25.837812 +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 500 @@ -82,7 +82,7 @@ L 386.073832 25.837812 +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 10,000 @@ -92,231 +92,231 @@ L 534.568665 25.837812 +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> @@ -326,13 +326,13 @@ L 529.346071 25.837812 - + - + 1 0 @@ -344,13 +344,13 @@ L 557.395938 290.174657 - + - + 1 0 @@ -361,13 +361,13 @@ L 557.395938 220.148713 - + - + 1 0 @@ -378,13 +378,13 @@ L 557.395938 150.12277 - + - + 1 0 @@ -395,233 +395,240 @@ L 557.395938 80.096827 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + @@ -630,76 +637,76 @@ L 557.395938 31.150793 - - - + + - - - + + - - - + + - + +L 260.876512 260.766544 +L 315.333397 245.203943 +L 386.073832 197.864119 +L 534.568665 110.366939 +" clip-path="url(#p98f92b1d79)" style="fill: none; stroke: #4575b4; stroke-width: 2.2; stroke-linecap: round"/> - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - At 10,000 clients (p50/p99): pg_doorman 55/60ms, pgbouncer 288/387ms, odyssey 52/326ms + At 10,000 clients (p50/p99): pg_doorman 40/58ms, pgbouncer 285/404ms, odyssey 5/432ms Extended protocol: latency p50 (solid) and p99 (dashed) @@ -857,73 +864,73 @@ Q 59.695938 73.169375 61.495938 73.169375 z " style="fill: #ffffff; opacity: 0.8; stroke: #d3d3d3; stroke-linejoin: miter"/> - + - + pg_doorman p50 - + - + pg_doorman p99 - + - + pgbouncer p50 - + - + pgbouncer p99 - + - + odyssey p50 - + - + @@ -933,7 +940,7 @@ L 200.704844 64.047031 - + diff --git a/documentation/en/src/images/benchmarks/prepared_latency.svg b/documentation/en/src/images/benchmarks/prepared_latency.svg index 5b3d8fc5f..6f63a391c 100644 --- a/documentation/en/src/images/benchmarks/prepared_latency.svg +++ b/documentation/en/src/images/benchmarks/prepared_latency.svg @@ -6,7 +6,7 @@ - 2026-05-01T12:17:20.759636 + 2026-05-07T13:25:06.883509 image/svg+xml @@ -42,7 +42,7 @@ z +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 1 @@ -52,7 +52,7 @@ L 78.02321 25.837812 +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 40 @@ -62,7 +62,7 @@ L 260.876512 25.837812 +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 120 @@ -72,7 +72,7 @@ L 315.333397 25.837812 +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 500 @@ -82,7 +82,7 @@ L 386.073832 25.837812 +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 10,000 @@ -92,231 +92,231 @@ L 534.568665 25.837812 +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> @@ -326,13 +326,13 @@ L 529.346071 25.837812 - + - + 1 0 @@ -344,13 +344,13 @@ L 557.395938 290.40095 - + - + 1 0 @@ -361,13 +361,13 @@ L 557.395938 221.835888 - + - + 1 0 @@ -378,13 +378,13 @@ L 557.395938 153.270827 - + - + 1 0 @@ -395,247 +395,254 @@ L 557.395938 84.705765 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + @@ -644,76 +651,76 @@ L 557.395938 26.761566 - - - + + - - - + + - - - + + - - + + - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - - + +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d73027; stroke-opacity: 0.75; stroke-width: 1.6"/> - - - - - - - + + + + + + - + +L 260.876512 282.294123 +L 315.333397 262.799537 +L 386.073832 235.31594 +L 534.568665 193.84596 +" clip-path="url(#p3b89f05abd)" style="fill: none; stroke: #fc8d59; stroke-width: 2.2; stroke-linecap: round"/> - - - - - - - + + + + + + - - + + - - - - - - - + + + + + + - At 10,000 clients (p50/p99): pg_doorman 58/63ms, pgbouncer 353/465ms, odyssey 18/205ms + At 10,000 clients (p50/p99): pg_doorman 39/55ms, pgbouncer 347/562ms, odyssey 3/294ms Prepared protocol: latency p50 (solid) and p99 (dashed) @@ -871,73 +878,73 @@ Q 59.695938 73.169375 61.495938 73.169375 z " style="fill: #ffffff; opacity: 0.8; stroke: #d3d3d3; stroke-linejoin: miter"/> - + - + pg_doorman p50 - + - + pg_doorman p99 - + - + pgbouncer p50 - + - + pgbouncer p99 - + - + odyssey p50 - + - + @@ -947,7 +954,7 @@ L 200.704844 64.047031 - + diff --git a/documentation/en/src/images/benchmarks/simple_latency.svg b/documentation/en/src/images/benchmarks/simple_latency.svg index d5525fbb9..b4c9ff9ce 100644 --- a/documentation/en/src/images/benchmarks/simple_latency.svg +++ b/documentation/en/src/images/benchmarks/simple_latency.svg @@ -6,7 +6,7 @@ - 2026-05-01T12:17:20.399015 + 2026-05-07T13:25:06.191361 image/svg+xml @@ -42,7 +42,7 @@ z +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 1 @@ -52,7 +52,7 @@ L 78.02321 25.837812 +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 40 @@ -62,7 +62,7 @@ L 260.876512 25.837812 +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 120 @@ -72,7 +72,7 @@ L 315.333397 25.837812 +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 500 @@ -82,7 +82,7 @@ L 386.073832 25.837812 +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.35; stroke-width: 0.6; stroke-linecap: round"/> 10,000 @@ -92,231 +92,231 @@ L 534.568665 25.837812 +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #cccccc; stroke-opacity: 0.15; stroke-width: 0.4; stroke-linecap: round"/> @@ -326,13 +326,13 @@ L 529.346071 25.837812 - + - + 1 0 @@ -344,13 +344,13 @@ L 557.395938 290.174657 - + - + 1 0 @@ -361,13 +361,13 @@ L 557.395938 220.148713 - + - + 1 0 @@ -378,13 +378,13 @@ L 557.395938 150.12277 - + - + 1 0 @@ -395,233 +395,233 @@ L 557.395938 80.096827 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -630,76 +630,76 @@ L 557.395938 31.150793 - - - + + - - - + + - - - + + - + - - - - - - - + + + + + + - + - - - - - - - + + + + + + - + - - - - - - - + + + + + + - +" clip-path="url(#p43d575b65c)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d73027; stroke-opacity: 0.75; stroke-width: 1.6"/> - - - - - - - + + + + + + +L 260.876512 282.452302 +L 315.333397 261.802228 +L 386.073832 231.378225 +L 534.568665 189.916829 +" clip-path="url(#p43d575b65c)" style="fill: none; stroke: #fc8d59; stroke-width: 2.2; stroke-linecap: round"/> - - - - - - - + + + + + + - + - - - - - - - + + + + + + - At 10,000 clients (p50/p99): pg_doorman 60/64ms, pgbouncer 276/387ms, odyssey 18/204ms + At 10,000 clients (p50/p99): pg_doorman 39/52ms, pgbouncer 278/367ms, odyssey 3/301ms Simple protocol: latency p50 (solid) and p99 (dashed) @@ -863,7 +863,7 @@ L 72.295938 37.626406 L 81.295938 37.626406 " style="fill: none; stroke: #4575b4; stroke-width: 2.2; stroke-linecap: round"/> - + @@ -875,7 +875,7 @@ L 72.295938 51.087031 L 81.295938 51.087031 " style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #4575b4; stroke-opacity: 0.75; stroke-width: 1.6"/> - + @@ -887,7 +887,7 @@ L 72.295938 64.547656 L 81.295938 64.547656 " style="fill: none; stroke: #d73027; stroke-width: 2.2; stroke-linecap: round"/> - + @@ -899,7 +899,7 @@ L 191.704844 37.626406 L 200.704844 37.626406 " style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d73027; stroke-opacity: 0.75; stroke-width: 1.6"/> - + @@ -911,7 +911,7 @@ L 191.704844 50.836719 L 200.704844 50.836719 " style="fill: none; stroke: #fc8d59; stroke-width: 2.2; stroke-linecap: round"/> - + @@ -923,7 +923,7 @@ L 191.704844 64.047031 L 200.704844 64.047031 " style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #fc8d59; stroke-opacity: 0.75; stroke-width: 1.6"/> - + @@ -933,7 +933,7 @@ L 200.704844 64.047031 - + diff --git a/documentation/en/src/images/benchmarks/tldr_tail_spread.svg b/documentation/en/src/images/benchmarks/tldr_tail_spread.svg index ec893bf98..839869b94 100644 --- a/documentation/en/src/images/benchmarks/tldr_tail_spread.svg +++ b/documentation/en/src/images/benchmarks/tldr_tail_spread.svg @@ -1,12 +1,12 @@ - + - 2026-05-01T12:17:20.251761 + 2026-05-07T13:25:05.848867 image/svg+xml @@ -22,112 +22,112 @@ - - + - pg_doorman + pg_doorman - pgbouncer + pgbouncer - odyssey + odyssey - + - 0 + 0 - + - 2 + 20 - + - 4 + 40 - + - 6 + 60 - + - 8 + 80 - + - 10 + 100 - + - 12 + 120 @@ -135,49 +135,49 @@ L 433.943438 52.701063 - +" clip-path="url(#p526d3c58d7)" style="fill: #bd0c0c; stroke: #696969; stroke-width: 0.6; stroke-linejoin: miter"/> - +" clip-path="url(#p526d3c58d7)" style="fill: #d3d3d3; stroke: #696969; stroke-width: 0.6; stroke-linejoin: miter"/> - +" clip-path="url(#p526d3c58d7)" style="fill: #d3d3d3; stroke: #696969; stroke-width: 0.6; stroke-linejoin: miter"/> - 1.1× + 1.3× - 1.4× + 1.3× - 11× + 116× - pg_doorman holds the median (1.1×); competitors drift to pgbouncer 1.4×, odyssey 11× + pg_doorman holds the median (1.3×); competitors drift to pgbouncer 1.3×, odyssey 116× - Tail spread at 10,000 simple-protocol clients + Tail spread at 10,000 simple-protocol clients - - + +