ZITADEL Docs
APIsBenchmarksv4.17.1

introspect benchmark of zitadel v4.17.1

Benchmark results of the v4.17.1 release of Zitadel.

Performance test results

MetricValue
Baselinenone
PurposeTest current performance
Test start2026-08-27 15:31:22 UTC
Test end2026-08-27 16:01:22 UTC
Test duration30min
Executed testintrospect
k6 versionv2.1.0
VUs600
Client locationUS1
ZITADEL locationUS1
ZITADEL container specificationvCPU: 6
Memory: 6 Gi
Container min scale: 7
Container max scale: 7
ZITADEL Versionv4.17.1
ZITADEL SettingsEventstore autovacuum (new in v4.17): Enabled: true
VacuumThreshold: 1000000
AnalyzeThreshold: 1000000
Tuned for the ~4,000 events/s expected during the benchmark, per the tuning guide.
ZITADEL feature flagsEnabled: loginDefaultOrg (instance), oidcTokenExchange (system), enableBackChannelLogout (system), consoleUseV2UserApi (instance)
improvedPerformance (instance): IMPROVED_PERFORMANCE_PROJECT_GRANT, IMPROVED_PERFORMANCE_PROJECT, IMPROVED_PERFORMANCE_USER_GRANT, IMPROVED_PERFORMANCE_ORG_DOMAIN_VERIFIED
Disabled: loginV2 (explicitly false at instance), userSchema, debugOidcParentError, oidcSingleV1SessionTermination, permissionCheckV2
Captured from the instance before the run (sequence 7, set 2026-08-27 13:35:31 UTC); the same capture covers manipulate_user at 13:41 and the rest of the sweep from 14:56, so all eleven targets ran the same configuration.
This restores like-for-like comparison with the v4 pages, which ran five improvedPerformance options. The fifth, IMPROVED_PERFORMANCE_ORG_BY_ID, is reserved in the proto and no longer exists.
Databasetype: psql
version: v17.4
Database locationUS1
Database specificationvCPU: 8
memory: 32Gib
ZITADEL metrics during testCPU: p50 39%, p99 50% (peak 58%)
Memory: p50 6%, peak 15%
Instances: 7 (constant), no container startups recorded
Server-side: 2,325 req/s, latency p50 33ms / p95 1.1s / p99 1.3s
Observed errors1,400 of 4,159,863 requests failed (0.03%): 2x connection reset, 1,398x not individually logged (see k6 output). 2,800 of 8,317,316 checks failed (0.03%): introspect status ok (1400 failed), introspect active (1400 failed)
Top 3 most expensive database queries1: Query events by aggregate_id and event_types, ordered by sequence (4,034 s)
2: Query events by instance_id, aggregate_types, event_types, position (paged) (1,765 s)
3: Load user with primary login name and human profile (1,497 s)
Ranked by total accumulated execution time summed across concurrent sessions (Cloud SQL Query Insights) — not CPU time; it can exceed the wall-clock window.
Database metrics during testCPU: 98% median, 99% peak
Memory: 40%
Connections: 46
Transactions: 11,597/s
IOPS: read 0, write 10
CPU-saturated — the bottleneck for this target.
k6 Iterations per second2297
k6 outputoutput
flowchart outcomeScale. Database CPU is the limit: 98% median against ZITADEL at 39%, with advisory lock wait only 0% of the top-5 query time. Raising the database beyond 8 vCPU is the next step, and throughput should be re-measured against the increase.

Endpoint latencies

k6 output

  █ TOTAL RESULTS

    checks_total.......: 8317316 4594.588805/s
    checks_succeeded...: 99.96%  8314516 out of 8317316
    checks_failed......: 0.03%   2800 out of 8317316

    ✓ user defined
    ✓ authorize status ok
    ✓ login name status ok
    ✓ login shows password page
    ✓ password status ok
    ✓ password callback
    ✓ code set
    ✓ token status ok
    ✓ access token created
    ✓ id token created
    ✓ info created
    ✓ org created
    ✓ add project status ok
    ✓ add api status ok
    ✓ add app key status ok
    ✓ openid configuration
    ✗ introspect status ok
      ↳  99% — ✓ 4156046 / ✗ 1400
    ✗ introspect active
      ↳  99% — ✓ 4156046 / ✗ 1400
    ✓ org removed

    CUSTOM
    app_add_app_duration.................: min=38.25ms  avg=444.17ms max=964.29ms p(50)=442.27ms p(95)=874.88ms p(99)=906.87ms
    app_add_app_key_duration.............: min=110.68ms avg=1.1s     max=2.09s    p(50)=1.13s    p(95)=1.87s    p(99)=1.93s
    login_ui_enter_login_name_duration...: min=153.7ms  avg=159.94ms max=166.17ms p(50)=159.94ms p(95)=165.55ms p(99)=166.05ms
    login_ui_enter_password_duration.....: min=5.47ms   avg=8.75ms   max=12.03ms  p(50)=8.75ms   p(95)=11.7ms   p(99)=11.96ms
    login_ui_init_login_duration.........: min=64.27ms  avg=78.53ms  max=92.79ms  p(50)=78.53ms  p(95)=91.37ms  p(99)=92.51ms
    login_ui_token_duration..............: min=157.39ms avg=205.82ms max=254.26ms p(50)=205.82ms p(95)=249.41ms p(99)=253.29ms
    oidc_introspect_duration.............: min=12.32ms  avg=259.25ms max=23.99s   p(50)=46.46ms  p(95)=1.16s    p(99)=1.36s
    org_create_org_duration..............: min=56.57ms  avg=56.57ms  max=56.57ms  p(50)=56.57ms  p(95)=56.57ms  p(99)=56.57ms
    project_add_project_duration.........: min=41.65ms  avg=355.6ms  max=749.58ms p(50)=352.72ms p(95)=626.33ms p(99)=682.79ms

    HTTP
    http_req_duration....................: min=5.47ms   avg=259.38ms max=23.99s   p(50)=46.49ms  p(95)=1.16s    p(99)=1.36s
      { expected_response:true }.........: min=5.47ms   avg=258.8ms  max=23.99s   p(50)=46.47ms  p(95)=1.16s    p(99)=1.36s
    http_req_failed......................: 0.03%   1400 out of 4159863
    http_reqs............................: 4159863 2297.960059/s

    EXECUTION
    iteration_duration...................: min=12.55ms  avg=259.71ms max=23.99s   p(50)=46.87ms  p(95)=1.16s    p(99)=1.36s
    iterations...........................: 4157446 2296.624878/s
    vus..................................: 0       min=0               max=600
    vus_max..............................: 600     min=600             max=600

    NETWORK
    data_received........................: 195 GB  108 MB/s
    data_sent............................: 5.1 GB  2.8 MB/s

running (30m10.2s), 000/600 VUs, 4157446 complete and 0 interrupted iterations
default ✓ [ 100% ] 600 VUs  30m0s

Was this page helpful?

On this page