Files
git.stella-ops.org/docs/workflow/engine/12-mongo-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

212 lines
7.1 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~MongoPerformance\"",
"SuiteResult": {
"Passed": 14,
"Total": 14,
"Duration": "48 s"
},
"RawArtifactDirectory": "src/Serdica/Ablera.Serdica.Workflow/__Tests/Ablera.Serdica.Workflow.IntegrationTests/bin/Release/net9.0/TestResults/workflow-performance/",
"MongoEnvironment": {
"DockerImage": "mongo:7.0",
"Topology": "single-node replica set",
"Version": "7.0.30",
"Backend": "Durable collections plus change-stream wake hints"
},
"MeasurementViews": {
"SerialLatencyScenario": "mongo-signal-roundtrip-latency-serial",
"SteadyThroughputScenario": "mongo-signal-roundtrip-throughput-parallel",
"CapacityScenarioPrefix": "mongo-signal-roundtrip-capacity-"
},
"Notes": {
"TopWaitCounts": [
{
"Name": "(none)",
"Count": 14
}
],
"Interpretation": [
"Serial latency baseline and steady throughput baseline are separated from the capacity ladder.",
"Mongo exposed two backend-correctness issues during the first performance pass: bounded idle receive and explicit collection bootstrap.",
"Mongo scales very strongly through c8 on this local replica-set baseline.",
"c16 is the first visible pressure rung because latency rises materially even though throughput still improves."
]
},
"Scenarios": [
{
"ScenarioName": "mongo-signal-roundtrip-capacity-c1",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 16,
"Concurrency": 1,
"DurationMilliseconds": 2259.99,
"ThroughputPerSecond": 7.08,
"AverageLatencyMilliseconds": 1394.99,
"P95LatencyMilliseconds": 1576.55,
"MaxLatencyMilliseconds": 2063.72,
"CounterDeltas": {
"opcounters.command": 183,
"opcounters.insert": 48,
"opcounters.update": 48,
"opcounters.delete": 16,
"metrics.document.returned": 80,
"metrics.document.inserted": 48,
"metrics.document.updated": 48,
"metrics.document.deleted": 16
}
},
{
"ScenarioName": "mongo-signal-roundtrip-capacity-c4",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 64,
"Concurrency": 4,
"DurationMilliseconds": 1668.99,
"ThroughputPerSecond": 38.35,
"AverageLatencyMilliseconds": 1244.81,
"P95LatencyMilliseconds": 1472.61,
"MaxLatencyMilliseconds": 1527.26,
"CounterDeltas": {
"opcounters.command": 684,
"opcounters.insert": 192,
"opcounters.update": 192,
"opcounters.delete": 64,
"metrics.document.returned": 320,
"metrics.document.inserted": 192,
"metrics.document.updated": 192,
"metrics.document.deleted": 64
}
},
{
"ScenarioName": "mongo-signal-roundtrip-capacity-c8",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 128,
"Concurrency": 8,
"DurationMilliseconds": 1938.12,
"ThroughputPerSecond": 66.04,
"AverageLatencyMilliseconds": 1477.49,
"P95LatencyMilliseconds": 1743.52,
"MaxLatencyMilliseconds": 1757.88,
"CounterDeltas": {
"opcounters.command": 1349,
"opcounters.insert": 384,
"opcounters.update": 384,
"opcounters.delete": 128,
"metrics.document.returned": 640,
"metrics.document.inserted": 384,
"metrics.document.updated": 384,
"metrics.document.deleted": 128
}
},
{
"ScenarioName": "mongo-signal-roundtrip-capacity-c16",
"Tier": "WorkflowPerfCapacity",
"OperationCount": 256,
"Concurrency": 16,
"DurationMilliseconds": 3728.88,
"ThroughputPerSecond": 68.65,
"AverageLatencyMilliseconds": 3203.94,
"P95LatencyMilliseconds": 3507.95,
"MaxLatencyMilliseconds": 3527.96,
"CounterDeltas": {
"opcounters.command": 2515,
"opcounters.insert": 768,
"opcounters.update": 768,
"opcounters.delete": 256,
"metrics.document.returned": 1280,
"metrics.document.inserted": 768,
"metrics.document.updated": 768,
"metrics.document.deleted": 256
}
},
{
"ScenarioName": "mongo-signal-roundtrip-latency-serial",
"Tier": "WorkflowPerfLatency",
"OperationCount": 16,
"Concurrency": 1,
"DurationMilliseconds": 1675.77,
"ThroughputPerSecond": 9.55,
"AverageLatencyMilliseconds": 97.88,
"P95LatencyMilliseconds": 149.20,
"MaxLatencyMilliseconds": 324.02,
"PhaseLatencySummaries": {
"start": {
"AverageMilliseconds": 26.34,
"P95Milliseconds": 79.35,
"MaxMilliseconds": 251.36
},
"signalPublish": {
"AverageMilliseconds": 8.17,
"P95Milliseconds": 10.75,
"MaxMilliseconds": 12.17
},
"signalToCompletion": {
"AverageMilliseconds": 71.54,
"P95Milliseconds": 77.94,
"MaxMilliseconds": 79.48
}
}
},
{
"ScenarioName": "mongo-signal-roundtrip-throughput-parallel",
"Tier": "WorkflowPerfThroughput",
"OperationCount": 96,
"Concurrency": 16,
"DurationMilliseconds": 1258.48,
"ThroughputPerSecond": 76.28,
"AverageLatencyMilliseconds": 1110.94,
"P95LatencyMilliseconds": 1121.22,
"MaxLatencyMilliseconds": 1127.11,
"PhaseLatencySummaries": {
"start": {
"AverageMilliseconds": 20.88,
"P95Milliseconds": 28.64,
"MaxMilliseconds": 33.67
},
"signalPublish": {
"AverageMilliseconds": 16.01,
"P95Milliseconds": 20.90,
"MaxMilliseconds": 22.71
},
"signalToCompletion": {
"AverageMilliseconds": 988.88,
"P95Milliseconds": 1000.12,
"MaxMilliseconds": 1004.92
}
},
"CounterDeltas": {
"opcounters.command": 1049,
"opcounters.insert": 288,
"opcounters.update": 288,
"opcounters.delete": 96,
"metrics.document.returned": 480,
"metrics.document.inserted": 288,
"metrics.document.updated": 288,
"metrics.document.deleted": 96
}
},
{
"ScenarioName": "mongo-signal-roundtrip-soak",
"Tier": "WorkflowPerfSoak",
"OperationCount": 108,
"Concurrency": 8,
"DurationMilliseconds": 2267.91,
"ThroughputPerSecond": 47.62,
"AverageLatencyMilliseconds": 322.40,
"P95LatencyMilliseconds": 550.50,
"MaxLatencyMilliseconds": 572.73,
"CounterDeltas": {
"opcounters.command": 2264,
"opcounters.insert": 324,
"opcounters.update": 324,
"opcounters.delete": 108,
"metrics.document.returned": 540,
"metrics.document.inserted": 324,
"metrics.document.updated": 324,
"metrics.document.deleted": 108,
"transactions.totalStarted": 216,
"transactions.totalCommitted": 216
}
}
]
}