perf(executor): aggregate realized PnL in SQL to cut DB egress - #102
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
2 Skipped Deployments
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The executor settlement loop (settlement.ts) was the dominant source of Postgres egress, independent of user traffic:
accountValue()ranSELECT *over that account's entire closed-trade history just to sum realized PnL in JS.(
reconcileAccounthad the sameSELECT *-then-reducepattern, though only per close.)Fix
Aggregate in SQL instead of in JS. New
settledTotals()returnssum(realized_pnl)+count(*)as one row, using the existing(account_id, status)index:accountValue(hot path, every tick) andreconcileAccountboth use it.accountsread is narrowed to juststarting_equityinstead ofSELECT *.Behavior
Identical — it's the same sum, computed in the database. The 2 settlement tests pass unchanged, plus a new db test asserts
settledTotalsreturnssum=750.25, count=2and excludes open positions.The 250 ms tick interval is intentionally unchanged (it's matched to the mark feed); the aggregate alone removes the egress problem, so there's no reason to touch money-path timing.
Verification
pnpm typecheck, biome lint, executor tests (2), and db tests (5) all pass.