From 1c153bc78498296378fb8fa8f36166994de8729b Mon Sep 17 00:00:00 2001 From: Greg Heartsfield Date: Tue, 20 Dec 2022 13:23:21 -0600 Subject: [PATCH] perf: shed DB query load when queue gets large --- src/db.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/db.rs b/src/db.rs index 67584d3..de31f29 100644 --- a/src/db.rs +++ b/src/db.rs @@ -647,8 +647,16 @@ pub async fn db_query( let pre_spawn_start = Instant::now(); task::spawn_blocking(move || { let db_queue_time = pre_spawn_start.elapsed(); - // report queuing time if it is slow - if db_queue_time > Duration::from_secs(1) { + // if the queue time was very long (>5 seconds), spare the DB and abort. + if db_queue_time > Duration::from_secs(5) { + info!( + "shedding DB query load from {:?} (cid: {}, sub: {:?})", + db_queue_time, client_id, sub.id + ); + return Ok(()); + } + // otherwise, report queuing time if it is slow + else if db_queue_time > Duration::from_secs(1) { debug!( "(slow) DB query queued for {:?} (cid: {}, sub: {:?})", db_queue_time, client_id, sub.id