From a6935016487f9817bd901b78be4a306cc2408d9e Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 8 Jun 2026 18:49:30 -0400 Subject: [PATCH] Optimize latest completed accounting bucket lookup --- .../share-accounting.service.ts | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/ORM/share-accounting/share-accounting.service.ts b/src/ORM/share-accounting/share-accounting.service.ts index 2ccba82..5bdde7a 100644 --- a/src/ORM/share-accounting/share-accounting.service.ts +++ b/src/ORM/share-accounting/share-accounting.service.ts @@ -258,19 +258,22 @@ export class ShareAccountingService implements OnModuleDestroy { } const rows = await this.acceptedShareRepository.query(` - WITH clock AS ( + WITH clock AS MATERIALIZED ( SELECT time_bucket(INTERVAL '10 minutes', NOW()) AS "currentBucket" ), - bounds AS ( + latest_bucket AS MATERIALIZED ( + SELECT "bucket" + FROM "accepted_share_10m", clock + WHERE "bucket" < clock."currentBucket" + ORDER BY "bucket" DESC + LIMIT 1 + ), + bounds AS MATERIALIZED ( SELECT "currentBucket", COALESCE( - ( - SELECT MAX("bucket") - FROM "accepted_share_10m", clock - WHERE "bucket" < clock."currentBucket" - ), + (SELECT "bucket" FROM latest_bucket), "currentBucket" - INTERVAL '10 minutes' ) AS "latestCompletedBucket" FROM clock @@ -353,19 +356,22 @@ export class ShareAccountingService implements OnModuleDestroy { private async loadSummary(filter: AccountingFilter): Promise { const { whereSql, params } = this.buildWhereClause(filter); const [summary] = await this.acceptedShareRepository.query(` - WITH clock AS ( + WITH clock AS MATERIALIZED ( SELECT time_bucket(INTERVAL '10 minutes', NOW()) AS "currentBucket" ), - bounds AS ( + latest_bucket AS MATERIALIZED ( + SELECT "bucket" + FROM "accepted_share_10m", clock + WHERE "bucket" < clock."currentBucket" + ORDER BY "bucket" DESC + LIMIT 1 + ), + bounds AS MATERIALIZED ( SELECT "currentBucket", COALESCE( - ( - SELECT MAX("bucket") - FROM "accepted_share_10m", clock - WHERE "bucket" < clock."currentBucket" - ), + (SELECT "bucket" FROM latest_bucket), "currentBucket" - INTERVAL '10 minutes' ) AS "latestCompletedBucket" FROM clock