From 1c856b7009ddf5526782f8d4fe796766187a1485 Mon Sep 17 00:00:00 2001 From: tomg10 Date: Tue, 14 May 2024 16:32:05 +0200 Subject: [PATCH 1/3] vacuum mechanism upgrade Signed-off-by: tomg10 --- ...bec216ea6336b859ad8093b64463426f7a6df37.json | 12 ++++++++++++ ...0cdd70e04bd6e714c8b763efdfe0259a5dd4128.json | 12 ------------ core/lib/dal/src/pruning_dal/mod.rs | 2 +- core/node/db_pruner/src/lib.rs | 17 +++++++++++------ 4 files changed, 24 insertions(+), 19 deletions(-) create mode 100644 core/lib/dal/.sqlx/query-3fce4cdef286a18aab88bbe11bec216ea6336b859ad8093b64463426f7a6df37.json delete mode 100644 core/lib/dal/.sqlx/query-b66045a20fd41f44627e5f1360cdd70e04bd6e714c8b763efdfe0259a5dd4128.json diff --git a/core/lib/dal/.sqlx/query-3fce4cdef286a18aab88bbe11bec216ea6336b859ad8093b64463426f7a6df37.json b/core/lib/dal/.sqlx/query-3fce4cdef286a18aab88bbe11bec216ea6336b859ad8093b64463426f7a6df37.json new file mode 100644 index 000000000000..8fb092873427 --- /dev/null +++ b/core/lib/dal/.sqlx/query-3fce4cdef286a18aab88bbe11bec216ea6336b859ad8093b64463426f7a6df37.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "\n VACUUM FREEZE l1_batches,\n miniblocks,\n storage_logs,\n events,\n call_traces,\n l2_to_l1_logs,\n transactions\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "3fce4cdef286a18aab88bbe11bec216ea6336b859ad8093b64463426f7a6df37" +} diff --git a/core/lib/dal/.sqlx/query-b66045a20fd41f44627e5f1360cdd70e04bd6e714c8b763efdfe0259a5dd4128.json b/core/lib/dal/.sqlx/query-b66045a20fd41f44627e5f1360cdd70e04bd6e714c8b763efdfe0259a5dd4128.json deleted file mode 100644 index 93f485f255f8..000000000000 --- a/core/lib/dal/.sqlx/query-b66045a20fd41f44627e5f1360cdd70e04bd6e714c8b763efdfe0259a5dd4128.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n VACUUM l1_batches,\n miniblocks,\n storage_logs,\n events,\n call_traces,\n l2_to_l1_logs,\n transactions\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [] - }, - "nullable": [] - }, - "hash": "b66045a20fd41f44627e5f1360cdd70e04bd6e714c8b763efdfe0259a5dd4128" -} diff --git a/core/lib/dal/src/pruning_dal/mod.rs b/core/lib/dal/src/pruning_dal/mod.rs index df1a9921a8ba..c4f449a2c270 100644 --- a/core/lib/dal/src/pruning_dal/mod.rs +++ b/core/lib/dal/src/pruning_dal/mod.rs @@ -448,7 +448,7 @@ impl PruningDal<'_, '_> { pub async fn run_vacuum_after_hard_pruning(&mut self) -> DalResult<()> { sqlx::query!( r#" - VACUUM l1_batches, + VACUUM FREEZE l1_batches, miniblocks, storage_logs, events, diff --git a/core/node/db_pruner/src/lib.rs b/core/node/db_pruner/src/lib.rs index 4b7eec11ad58..8fc302de9d8f 100644 --- a/core/node/db_pruner/src/lib.rs +++ b/core/node/db_pruner/src/lib.rs @@ -6,6 +6,7 @@ use anyhow::Context as _; use async_trait::async_trait; use serde::Serialize; use tokio::sync::watch; +use tokio::time::Instant; use zksync_dal::{pruning_dal::PruningInfo, Connection, ConnectionPool, Core, CoreDal}; use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_types::{L1BatchNumber, L2BlockNumber}; @@ -228,12 +229,6 @@ impl DbPruner { METRICS.observe_hard_pruning(stats); transaction.commit().await?; - let mut storage = self.connection_pool.connection_tagged("db_pruner").await?; - storage - .pruning_dal() - .run_vacuum_after_hard_pruning() - .await?; - let latency = latency.observe(); tracing::info!( "Hard pruned db l1_batches up to {last_soft_pruned_l1_batch} and L2 blocks up to {last_soft_pruned_l2_block}, \ @@ -278,6 +273,7 @@ impl DbPruner { .collect::>() ); + let mut last_vacuum_time = Instant::now(); while !*stop_receiver.borrow_and_update() { if let Err(err) = self.update_l1_batches_metric().await { tracing::warn!("Error updating DB pruning metrics: {err:?}"); @@ -299,6 +295,15 @@ impl DbPruner { Ok(pruning_done) => !pruning_done, }; + if Instant::now() - last_vacuum_time > Duration::from_secs(24 * 3600) { + let mut storage = self.connection_pool.connection_tagged("db_pruner").await?; + storage + .pruning_dal() + .run_vacuum_after_hard_pruning() + .await?; + last_vacuum_time = Instant::now(); + } + if should_sleep && tokio::time::timeout(next_iteration_delay, stop_receiver.changed()) .await From 73db211ecbf9f075cc2610654012dfdf2bda1ec0 Mon Sep 17 00:00:00 2001 From: tomg10 Date: Tue, 14 May 2024 16:32:34 +0200 Subject: [PATCH 2/3] zk fmt Signed-off-by: tomg10 --- core/node/db_pruner/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/node/db_pruner/src/lib.rs b/core/node/db_pruner/src/lib.rs index 8fc302de9d8f..966c3e41fd1d 100644 --- a/core/node/db_pruner/src/lib.rs +++ b/core/node/db_pruner/src/lib.rs @@ -5,8 +5,7 @@ use std::{fmt, sync::Arc, time::Duration}; use anyhow::Context as _; use async_trait::async_trait; use serde::Serialize; -use tokio::sync::watch; -use tokio::time::Instant; +use tokio::{sync::watch, time::Instant}; use zksync_dal::{pruning_dal::PruningInfo, Connection, ConnectionPool, Core, CoreDal}; use zksync_health_check::{Health, HealthStatus, HealthUpdater, ReactiveHealthCheck}; use zksync_types::{L1BatchNumber, L2BlockNumber}; From a95c98e74067e67d558348264356069997c3d450 Mon Sep 17 00:00:00 2001 From: tomg10 Date: Tue, 14 May 2024 16:38:15 +0200 Subject: [PATCH 3/3] fix Signed-off-by: tomg10 --- core/node/db_pruner/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/node/db_pruner/src/lib.rs b/core/node/db_pruner/src/lib.rs index 966c3e41fd1d..e2a9251b47a6 100644 --- a/core/node/db_pruner/src/lib.rs +++ b/core/node/db_pruner/src/lib.rs @@ -294,7 +294,7 @@ impl DbPruner { Ok(pruning_done) => !pruning_done, }; - if Instant::now() - last_vacuum_time > Duration::from_secs(24 * 3600) { + if Instant::now().duration_since(last_vacuum_time) > Duration::from_secs(24 * 3600) { let mut storage = self.connection_pool.connection_tagged("db_pruner").await?; storage .pruning_dal()