RWM Console cluster: risingwave-alinma.alinma-rw.svc.cluster.local

← cluster insights objects private_asset_holdings_mv explain
Overview Objects Graph History
materialized view · insights.private_asset_holdings_mv profiled over 5s
seconds (1–30)

Job is idle — throughput ~0; structure shown.

Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
39 operators
Materialize · insights.private_asset_holdings_mv
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · private_holdings_dm_next.client_id = clients_portfolios_dm_…
2 actors
HashJoin · Inner · private_holdings_dm_next.client_id = clients_portfolios_dm_… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · clients_portfolios_dm_next
2 actors
Filter · clients_portfolios_dm_next
0% idle 2 actors
StreamScan · clients_portfolios_dm_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · private_holdings_dm_next.asset_id = private_assets_dm_next.…
2 actors
HashJoin · Inner · private_holdings_dm_next.asset_id = private_assets_dm_next.… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · private_assets_dm_next
2 actors
Filter · private_assets_dm_next
0% idle 2 actors
StreamScan · private_assets_dm_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · private_holdings_dm_next
2 actors
Filter · private_holdings_dm_next
0% idle 2 actors
StreamScan · private_holdings_dm_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Heat = the operator's output-buffer backpressure over the sampling window. Click a node to fold its subtree.
Materialize · insights.private_asset_holdings_mv Materialize insights.private_asset_… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · private_holdings_dm_next.client_id = clients_portfolios_dm_… SyncLogStore Inner · private_holding… — · 2 actors HashJoin · Inner · private_holdings_dm_next.client_id = clients_portfolios_dm_… HashJoin Inner · private_holding… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · clients_portfolios_dm_next Project clients_portfolios_dm_n… — · 2 actors Filter · clients_portfolios_dm_next Filter clients_portfolios_dm_n… idle · 2 actors StreamScan · clients_portfolios_dm_next StreamScan clients_portfolios_dm_n… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · private_holdings_dm_next.asset_id = private_assets_dm_next.… SyncLogStore Inner · private_holding… — · 2 actors HashJoin · Inner · private_holdings_dm_next.asset_id = private_assets_dm_next.… HashJoin Inner · private_holding… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · private_assets_dm_next Project private_assets_dm_next — · 2 actors Filter · private_assets_dm_next Filter private_assets_dm_next idle · 2 actors StreamScan · private_assets_dm_next StreamScan private_assets_dm_next idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · private_holdings_dm_next Project private_holdings_dm_next — · 2 actors Filter · private_holdings_dm_next Filter private_holdings_dm_next idle · 2 actors StreamScan · private_holdings_dm_next StreamScan private_holdings_dm_next idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors
Streaming operator plan from EXPLAIN ANALYZE. Node heat = backpressure. Drag to pan, scroll to zoom.
Fragments (DESCRIBE FRAGMENTS) — click to expand
Fragment 37232 (Actor 742847,742846)
StreamMaterialize { columns: [portfolio_id, asset_id, name, local_name, category, ownership_percentage, private_holdings_dm_next.client_id(hidden), private_holdings_dm_next.id(hidden), clients_portfolios_dm_next.client_id(hidden), clients_portfolios_dm_next.effective_start_date(hidden)], stream_key: [private_holdings_dm_next.client_id, asset_id, private_holdings_dm_next.id, portfolio_id, clients_portfolios_dm_next.effective_start_date], pk_columns: [private_holdings_dm_next.client_id, asset_id, private_holdings_dm_next.id, portfolio_id, clients_portfolios_dm_next.effective_start_date], pk_conflict: NoCheck }
├── output: [ clients_portfolios_dm_next.portfolio_id, private_holdings_dm_next.asset_id, private_assets_dm_next.name, private_assets_dm_next.local_name, private_assets_dm_next.category, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.client_id, private_holdings_dm_next.id, clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.effective_start_date ]
├── stream key: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ]
└── MergeExecutor { output: [ clients_portfolios_dm_next.portfolio_id, private_holdings_dm_next.asset_id, private_assets_dm_next.name, private_assets_dm_next.local_name, private_assets_dm_next.category, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.client_id, private_holdings_dm_next.id, clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.effective_start_date ], stream key: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }

Fragment 37233 (Actor 742844,742845)
StreamSyncLogStore { output: [ clients_portfolios_dm_next.portfolio_id, private_holdings_dm_next.asset_id, private_assets_dm_next.name, private_assets_dm_next.local_name, private_assets_dm_next.category, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.client_id, private_holdings_dm_next.id, clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.effective_start_date ], stream key: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }
└── StreamHashJoin { type: Inner, predicate: private_holdings_dm_next.client_id = clients_portfolios_dm_next.client_id }
    ├── output: [ clients_portfolios_dm_next.portfolio_id, private_holdings_dm_next.asset_id, private_assets_dm_next.name, private_assets_dm_next.local_name, private_assets_dm_next.category, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.client_id, private_holdings_dm_next.id, clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.effective_start_date ]
    ├── stream key: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ]
    ├── MergeExecutor { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_holdings_dm_next.id, private_assets_dm_next.id ], stream key: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }
    └── MergeExecutor { output: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ], stream key: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }

Fragment 37234 (Actor 742855,742854)
StreamLocalityProvider { locality_columns: [private_holdings_dm_next.client_id] } { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_holdings_dm_next.id, private_assets_dm_next.id ], stream key: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }
└── MergeExecutor { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_holdings_dm_next.id, private_assets_dm_next.id ], stream key: [ private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }

Fragment 37235 (Actor 742857,742856)
StreamSyncLogStore { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_holdings_dm_next.id, private_assets_dm_next.id ], stream key: [ private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }
└── StreamHashJoin { type: Inner, predicate: private_holdings_dm_next.asset_id = private_assets_dm_next.id } { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_holdings_dm_next.id, private_assets_dm_next.id ], stream key: [ private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }
    ├── MergeExecutor { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id ], stream key: [ private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }
    └── MergeExecutor { output: [ private_assets_dm_next.id, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name ], stream key: [ private_assets_dm_next.id ] }

Fragment 37236 (Actor 742859,742858)
StreamLocalityProvider { locality_columns: [private_holdings_dm_next.asset_id] } { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id ], stream key: [ private_holdings_dm_next.asset_id, private_holdings_dm_next.id ] }
└── MergeExecutor { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id ], stream key: [ private_holdings_dm_next.id ] }

Fragment 37237 (Actor 742636,742635)
StreamProject { exprs: [private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id] } { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id ], stream key: [ private_holdings_dm_next.id ] }
└── StreamFilter { predicate: IsNull(private_holdings_dm_next.disabled_at) } { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id, private_holdings_dm_next.disabled_at ], stream key: [ private_holdings_dm_next.id ] }
    └── StreamTableScan { table: private_holdings_dm_next, columns: [client_id, asset_id, ownership_percentage, id, disabled_at] } { output: [ private_holdings_dm_next.client_id, private_holdings_dm_next.asset_id, private_holdings_dm_next.ownership_percentage, private_holdings_dm_next.id, private_holdings_dm_next.disabled_at ], stream key: [ private_holdings_dm_next.id ] }
        ├── Upstream { output: [ client_id, asset_id, ownership_percentage, id, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ client_id, asset_id, ownership_percentage, id, disabled_at ], stream key: [] }

Fragment 37238 (Actor 742638,742637)
StreamProject { exprs: [private_assets_dm_next.id, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name] } { output: [ private_assets_dm_next.id, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name ], stream key: [ private_assets_dm_next.id ] }
└── StreamFilter { predicate: IsNull(private_assets_dm_next.disabled_at) } { output: [ private_assets_dm_next.id, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_assets_dm_next.disabled_at ], stream key: [ private_assets_dm_next.id ] }
    └── StreamTableScan { table: private_assets_dm_next, columns: [id, category, name, local_name, disabled_at] } { output: [ private_assets_dm_next.id, private_assets_dm_next.category, private_assets_dm_next.name, private_assets_dm_next.local_name, private_assets_dm_next.disabled_at ], stream key: [ private_assets_dm_next.id ] }
        ├── Upstream { output: [ id, category, name, local_name, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ id, category, name, local_name, disabled_at ], stream key: [] }

Fragment 37239 (Actor 742861,742860)
StreamLocalityProvider { locality_columns: [clients_portfolios_dm_next.client_id] } { output: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ], stream key: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }
└── MergeExecutor { output: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ], stream key: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }

Fragment 37240 (Actor 742863,742862)
StreamProject { exprs: [clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date] } { output: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ], stream key: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }
└── StreamFilter { predicate: (clients_portfolios_dm_next.owner_type = 'PRIMARY':Varchar) AND IsNull(clients_portfolios_dm_next.disabled_at) } { output: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date, clients_portfolios_dm_next.owner_type, clients_portfolios_dm_next.disabled_at ], stream key: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }
    └── StreamTableScan { table: clients_portfolios_dm_next, columns: [client_id, portfolio_id, effective_start_date, owner_type, disabled_at] } { output: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date, clients_portfolios_dm_next.owner_type, clients_portfolios_dm_next.disabled_at ], stream key: [ clients_portfolios_dm_next.client_id, clients_portfolios_dm_next.portfolio_id, clients_portfolios_dm_next.effective_start_date ] }
        ├── Upstream { output: [ client_id, portfolio_id, effective_start_date, owner_type, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ client_id, portfolio_id, effective_start_date, owner_type, disabled_at ], stream key: [] }