mirror of
https://github.com/scsibug/nostr-rs-relay.git
synced 2024-11-14 06:59:07 -05:00
feat: log reader DB pool stats every minute
This commit is contained in:
parent
3e4ae4aeec
commit
ce0e00ffb3
22
src/db.rs
22
src/db.rs
|
@ -94,6 +94,16 @@ pub fn build_pool(
|
||||||
pool
|
pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Display database pool stats every 1 minute
|
||||||
|
pub async fn monitor_pool(name: &str, pool: SqlitePool) {
|
||||||
|
let sleep_dur = Duration::from_secs(60);
|
||||||
|
loop {
|
||||||
|
log_pool_stats(name, &pool);
|
||||||
|
tokio::time::sleep(sleep_dur).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Perform normal maintenance
|
/// Perform normal maintenance
|
||||||
pub fn optimize_db(conn: &mut PooledConnection) -> Result<()> {
|
pub fn optimize_db(conn: &mut PooledConnection) -> Result<()> {
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
|
@ -671,15 +681,13 @@ fn _pool_at_capacity(pool: &SqlitePool) -> bool {
|
||||||
fn log_pool_stats(name: &str, pool: &SqlitePool) {
|
fn log_pool_stats(name: &str, pool: &SqlitePool) {
|
||||||
let state: r2d2::State = pool.state();
|
let state: r2d2::State = pool.state();
|
||||||
let in_use_cxns = state.connections - state.idle_connections;
|
let in_use_cxns = state.connections - state.idle_connections;
|
||||||
trace!(
|
debug!(
|
||||||
"DB pool {:?} usage (in_use: {}, available: {})",
|
"DB pool {:?} usage (in_use: {}, available: {}, max: {})",
|
||||||
name,
|
name,
|
||||||
in_use_cxns,
|
in_use_cxns,
|
||||||
state.connections
|
state.connections,
|
||||||
|
pool.max_size()
|
||||||
);
|
);
|
||||||
if state.connections == in_use_cxns {
|
|
||||||
debug!("DB pool {:?} is empty (in_use: {})", name, in_use_cxns);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Perform database maintenance on a regular basis
|
/// Perform database maintenance on a regular basis
|
||||||
|
@ -743,8 +751,6 @@ pub async fn db_query(
|
||||||
if sql_gen_elapsed > Duration::from_millis(10) {
|
if sql_gen_elapsed > Duration::from_millis(10) {
|
||||||
debug!("SQL (slow) generated in {:?}", start.elapsed());
|
debug!("SQL (slow) generated in {:?}", start.elapsed());
|
||||||
}
|
}
|
||||||
// show pool stats
|
|
||||||
log_pool_stats("reader", &pool);
|
|
||||||
// cutoff for displaying slow queries
|
// cutoff for displaying slow queries
|
||||||
let slow_cutoff = Duration::from_millis(2000);
|
let slow_cutoff = Duration::from_millis(2000);
|
||||||
// any client that doesn't cause us to generate new rows in 5
|
// any client that doesn't cause us to generate new rows in 5
|
||||||
|
|
|
@ -358,6 +358,10 @@ pub fn start_server(settings: Settings, shutdown_rx: MpscReceiver<()>) -> Result
|
||||||
db_max_conn,
|
db_max_conn,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
// spawn a task to check the pool size.
|
||||||
|
let pool_monitor = pool.clone();
|
||||||
|
tokio::spawn(async move {db::monitor_pool("reader", pool_monitor).await;});
|
||||||
|
|
||||||
// A `Service` is needed for every connection, so this
|
// A `Service` is needed for every connection, so this
|
||||||
// creates one from our `handle_request` function.
|
// creates one from our `handle_request` function.
|
||||||
let make_svc = make_service_fn(|conn: &AddrStream| {
|
let make_svc = make_service_fn(|conn: &AddrStream| {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user