Files
git.stella-ops.org/docs/workflow/engine/11-postgres-performance-baseline-2026-03-17.json
master f5b5f24d95 Add StellaOps.Workflow engine: 14 libraries, WebService, 8 test projects
Extract product-agnostic workflow engine from Ablera.Serdica.Workflow into
standalone StellaOps.Workflow.* libraries targeting net10.0.

Libraries (14):
- Contracts, Abstractions (compiler, decompiler, expression runtime)
- Engine (execution, signaling, scheduling, projections, hosted services)
- ElkSharp (generic graph layout algorithm)
- Renderer.ElkSharp, Renderer.ElkJs, Renderer.Msagl, Renderer.Svg
- Signaling.Redis, Signaling.OracleAq
- DataStore.MongoDB, DataStore.PostgreSQL, DataStore.Oracle

WebService: ASP.NET Core Minimal API with 22 endpoints

Tests (8 projects, 109 tests pass):
- Engine.Tests (105 pass), WebService.Tests (4 E2E pass)
- Renderer.Tests, DataStore.MongoDB/Oracle/PostgreSQL.Tests
- Signaling.Redis.Tests, IntegrationTests.Shared

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:14:44 +02:00

214 lines
6.6 KiB
JSON

{
"Date": "2026-03-17",
"Workspace": "C:\\dev\\serdica-backend4",
"TestCommand": "dotnet test src/Serdica/Ablera.Serdica.Workflow/__Tests/Ablera.Serdica.Workflow.IntegrationTests/Ablera.Serdica.Workflow.IntegrationTests.csproj -c Release --no-build --filter \"FullyQualifiedName~PostgresPerformance\"",
"SuiteResult": {
"Passed": 11,
"Total": 11,
"Duration": "2 m 16 s"
},
"RawArtifactDirectory": "src/Serdica/Ablera.Serdica.Workflow/__Tests/Ablera.Serdica.Workflow.IntegrationTests/bin/Release/net9.0/TestResults/workflow-performance/",
"PostgresEnvironment": {
"DockerImage": "postgres:16-alpine",
"Database": "workflow",
"Version": "PostgreSQL 16.13",
"Backend": "Durable queue tables plus LISTEN/NOTIFY wake hints"
},
"MeasurementViews": {
"SerialLatencyScenario": "postgres-signal-roundtrip-latency-serial",
"SteadyThroughputScenario": "postgres-signal-roundtrip-throughput-parallel",
"CapacityScenarioPrefix": "postgres-signal-roundtrip-capacity-"
},
"Notes": {
"TopWaitCounts": [
{
"Name": "Client:ClientRead",
"Count": 13
},
{
"Name": "",
"Count": 1
}
],
"Interpretation": [
"Serial latency baseline and steady throughput baseline are separated from the capacity ladder.",
"The capacity ladder still scales through c16 on this local PostgreSQL Docker setup.",
"Immediate queue handling remains much cheaper than full workflow resume.",
"The dominant observed backend state is client read waiting, not an obvious storage stall."
]
},
"Scenarios": [
{
"ScenarioName": "postgres-signal-roundtrip-capacity-c1",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 16,
"Concurrency": 1,
"DurationMilliseconds": 3895.54,
"ThroughputPerSecond": 4.11,
"AverageLatencyMilliseconds": 3738.08,
"P95LatencyMilliseconds": 3762.51,
"MaxLatencyMilliseconds": 3771.10,
"TopWait": "Client:ClientRead",
"CounterDeltas": {
"xact_commit": 251,
"xact_rollback": 7,
"blks_hit": 1654,
"blks_read": 24,
"tup_inserted": 48,
"tup_updated": 48,
"tup_deleted": 16
}
},
{
"ScenarioName": "postgres-signal-roundtrip-capacity-c4",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 64,
"Concurrency": 4,
"DurationMilliseconds": 3700.99,
"ThroughputPerSecond": 17.29,
"AverageLatencyMilliseconds": 3577.49,
"P95LatencyMilliseconds": 3583.70,
"MaxLatencyMilliseconds": 3584.43,
"TopWait": "Client:ClientRead",
"CounterDeltas": {
"xact_commit": 1080,
"xact_rollback": 21,
"blks_hit": 7084,
"blks_read": 1,
"tup_inserted": 192,
"tup_updated": 192,
"tup_deleted": 64
}
},
{
"ScenarioName": "postgres-signal-roundtrip-capacity-c8",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 128,
"Concurrency": 8,
"DurationMilliseconds": 3853.89,
"ThroughputPerSecond": 33.21,
"AverageLatencyMilliseconds": 3713.31,
"P95LatencyMilliseconds": 3718.66,
"MaxLatencyMilliseconds": 3719.34,
"TopWait": "Client:ClientRead",
"CounterDeltas": {
"xact_commit": 2348,
"xact_rollback": 44,
"blks_hit": 17069,
"blks_read": 0,
"tup_inserted": 384,
"tup_updated": 384,
"tup_deleted": 128
}
},
{
"ScenarioName": "postgres-signal-roundtrip-capacity-c16",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 256,
"Concurrency": 16,
"DurationMilliseconds": 4488.07,
"ThroughputPerSecond": 57.04,
"AverageLatencyMilliseconds": 4251.48,
"P95LatencyMilliseconds": 4287.87,
"MaxLatencyMilliseconds": 4294.09,
"TopWait": "Client:ClientRead",
"CounterDeltas": {
"xact_commit": 4536,
"xact_rollback": 48,
"blks_hit": 40443,
"blks_read": 0,
"tup_inserted": 768,
"tup_updated": 768,
"tup_deleted": 256
}
},
{
"ScenarioName": "postgres-signal-roundtrip-latency-serial",
"Tier": "WorkflowPerfLatency",
"OperationCount": 16,
"Concurrency": 1,
"DurationMilliseconds": 49290.47,
"ThroughputPerSecond": 0.32,
"AverageLatencyMilliseconds": 3079.33,
"P95LatencyMilliseconds": 3094.94,
"MaxLatencyMilliseconds": 3101.71,
"PhaseLatencySummaries": {
"start": {
"AverageMilliseconds": 6.12,
"P95Milliseconds": 9.29,
"MaxMilliseconds": 11.26
},
"signalPublish": {
"AverageMilliseconds": 5.63,
"P95Milliseconds": 6.82,
"MaxMilliseconds": 7.53
},
"signalToCompletion": {
"AverageMilliseconds": 3073.20,
"P95Milliseconds": 3086.59,
"MaxMilliseconds": 3090.44
}
}
},
{
"ScenarioName": "postgres-signal-roundtrip-throughput-parallel",
"Tier": "WorkflowPerfThroughput",
"OperationCount": 96,
"Concurrency": 16,
"DurationMilliseconds": 3729.17,
"ThroughputPerSecond": 25.74,
"AverageLatencyMilliseconds": 3603.54,
"P95LatencyMilliseconds": 3635.59,
"MaxLatencyMilliseconds": 3649.96,
"TopWait": "Client:ClientRead",
"CounterDeltas": {
"xact_commit": 1502,
"xact_rollback": 38,
"blks_hit": 21978,
"blks_read": 24,
"tup_inserted": 288,
"tup_updated": 288,
"tup_deleted": 96
},
"PhaseLatencySummaries": {
"start": {
"AverageMilliseconds": 16.21,
"P95Milliseconds": 40.31,
"MaxMilliseconds": 47.02
},
"signalPublish": {
"AverageMilliseconds": 18.11,
"P95Milliseconds": 23.62,
"MaxMilliseconds": 28.41
},
"signalToCompletion": {
"AverageMilliseconds": 3504.24,
"P95Milliseconds": 3530.38,
"MaxMilliseconds": 3531.14
}
}
},
{
"ScenarioName": "postgres-signal-roundtrip-soak",
"Tier": "WorkflowPerfSoak",
"OperationCount": 108,
"Concurrency": 8,
"DurationMilliseconds": 25121.68,
"ThroughputPerSecond": 4.30,
"AverageLatencyMilliseconds": 4164.52,
"P95LatencyMilliseconds": 4208.42,
"MaxLatencyMilliseconds": 4209.96,
"TopWait": "Client:ClientRead",
"CounterDeltas": {
"xact_commit": 3313,
"xact_rollback": 352,
"blks_hit": 26548,
"blks_read": 269,
"tup_inserted": 774,
"tup_updated": 339,
"tup_deleted": 108
}
}
]
}