@@ -8104,7 +8104,8 @@ JOIN root_times r USING (id)",
81048104
81058105/**
81068106 * This view is used to display the cluster utilization over 14 days bucketed by 8 hours.
8107- * It's specifically for the Console's environment overview page to speed up load times
8107+ * It's specifically for the Console's environment overview page to speed up load times.
8108+ * This query should be kept in sync with MaterializeInc/console/src/api/materialize/cluster/replicaUtilizationHistory.ts
81088109 */
81098110pub static MZ_CONSOLE_CLUSTER_UTILIZATION_OVERVIEW : LazyLock < BuiltinView > = LazyLock :: new ( || {
81108111 BuiltinView {
@@ -8142,70 +8143,87 @@ pub static MZ_CONSOLE_CLUSTER_UTILIZATION_OVERVIEW: LazyLock<BuiltinView> = Lazy
81428143 cluster_id
81438144 FROM mz_catalog.mz_cluster_replicas
81448145),
8146+ replica_metrics_history AS (
8147+ SELECT
8148+ m.occurred_at,
8149+ m.replica_id,
8150+ r.size,
8151+ (SUM(m.cpu_nano_cores::float8) / (s.cpu_nano_cores * s.processes)) AS cpu_percent,
8152+ (SUM(m.memory_bytes::float8) / (s.memory_bytes * s.processes)) AS memory_percent,
8153+ (SUM(m.disk_bytes::float8) / (s.disk_bytes * s.processes)) AS disk_percent,
8154+ SUM(m.disk_bytes::float8) AS disk_bytes,
8155+ SUM(m.memory_bytes::float8) AS memory_bytes,
8156+ s.disk_bytes * s.processes AS total_disk_bytes,
8157+ s.memory_bytes * s.processes AS total_memory_bytes
8158+ FROM
8159+ replica_history AS r
8160+ INNER JOIN mz_catalog.mz_cluster_replica_sizes AS s ON r.size = s.size
8161+ INNER JOIN mz_internal.mz_cluster_replica_metrics_history AS m ON m.replica_id = r.replica_id
8162+ GROUP BY
8163+ m.occurred_at,
8164+ m.replica_id,
8165+ r.size,
8166+ s.cpu_nano_cores,
8167+ s.memory_bytes,
8168+ s.disk_bytes,
8169+ s.processes
8170+ ),
81458171replica_utilization_history_binned AS (
81468172 SELECT m.occurred_at,
81478173 m.replica_id,
8148- m.process_id,
8149- (m.cpu_nano_cores::float8 / s.cpu_nano_cores) AS cpu_percent,
8150- (m.memory_bytes::float8 / s.memory_bytes) AS memory_percent,
8151- (m.disk_bytes::float8 / s.disk_bytes) AS disk_percent,
8152- m.disk_bytes::float8 AS disk_bytes,
8153- m.memory_bytes::float8 AS memory_bytes,
8154- s.disk_bytes AS total_disk_bytes,
8155- s.memory_bytes AS total_memory_bytes,
8156- r.size,
8174+ m.cpu_percent,
8175+ m.memory_percent,
8176+ m.memory_bytes,
8177+ m.disk_percent,
8178+ m.disk_bytes,
8179+ m.total_disk_bytes,
8180+ m.total_memory_bytes,
8181+ m.size,
81578182 date_bin(
81588183 '8 HOURS',
81598184 occurred_at,
81608185 '1970-01-01'::timestamp
81618186 ) AS bucket_start
81628187 FROM replica_history AS r
8163- JOIN mz_catalog.mz_cluster_replica_sizes AS s ON r.size = s.size
8164- JOIN mz_internal.mz_cluster_replica_metrics_history AS m ON m.replica_id = r.replica_id
8188+ JOIN replica_metrics_history AS m ON m.replica_id = r.replica_id
81658189 WHERE mz_now() <= date_bin(
81668190 '8 HOURS',
81678191 occurred_at,
81688192 '1970-01-01'::timestamp
81698193 ) + INTERVAL '14 DAYS'
81708194),
8171- -- For each (replica, process_id, bucket), take the (replica, process_id , bucket) with the highest memory
8195+ -- For each (replica, bucket), take the (replica, bucket) with the highest memory
81728196max_memory AS (
8173- SELECT DISTINCT ON (bucket_start, replica_id, process_id ) bucket_start,
8197+ SELECT DISTINCT ON (bucket_start, replica_id) bucket_start,
81748198 replica_id,
8175- process_id,
81768199 memory_percent,
81778200 occurred_at
81788201 FROM replica_utilization_history_binned
81798202 OPTIONS (DISTINCT ON INPUT GROUP SIZE = 480)
81808203 ORDER BY bucket_start,
81818204 replica_id,
8182- process_id,
81838205 COALESCE(memory_bytes, 0) DESC
81848206),
81858207max_disk AS (
8186- SELECT DISTINCT ON (bucket_start, replica_id, process_id ) bucket_start,
8208+ SELECT DISTINCT ON (bucket_start, replica_id) bucket_start,
81878209 replica_id,
8188- process_id,
81898210 disk_percent,
81908211 occurred_at
81918212 FROM replica_utilization_history_binned
81928213 OPTIONS (DISTINCT ON INPUT GROUP SIZE = 480)
81938214 ORDER BY bucket_start,
81948215 replica_id,
8195- process_id,
81968216 COALESCE(disk_bytes, 0) DESC
81978217),
81988218max_cpu AS (
8199- SELECT DISTINCT ON (bucket_start, replica_id, process_id ) bucket_start,
8219+ SELECT DISTINCT ON (bucket_start, replica_id) bucket_start,
82008220 replica_id,
8201- process_id,
82028221 cpu_percent,
82038222 occurred_at
82048223 FROM replica_utilization_history_binned
82058224 OPTIONS (DISTINCT ON INPUT GROUP SIZE = 480)
82068225 ORDER BY bucket_start,
82078226 replica_id,
8208- process_id,
82098227 COALESCE(cpu_percent, 0) DESC
82108228),
82118229/*
@@ -8215,7 +8233,7 @@ max_cpu AS (
82158233 values may not occur at the same time if the bucket interval is large.
82168234 */
82178235max_memory_and_disk AS (
8218- SELECT DISTINCT ON (bucket_start, replica_id, process_id ) bucket_start,
8236+ SELECT DISTINCT ON (bucket_start, replica_id) bucket_start,
82198237 replica_id,
82208238 memory_percent,
82218239 disk_percent,
@@ -8241,10 +8259,9 @@ max_memory_and_disk AS (
82418259 OPTIONS (DISTINCT ON INPUT GROUP SIZE = 480)
82428260 ORDER BY bucket_start,
82438261 replica_id,
8244- process_id,
82458262 COALESCE(memory_and_disk_percent, 0) DESC
82468263),
8247- -- For each (replica, process_id, bucket), get its offline events at that time
8264+ -- For each (replica, bucket), get its offline events at that time
82488265replica_offline_event_history AS (
82498266 SELECT date_bin(
82508267 '8 HOURS',
0 commit comments