Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c4bf5cc8f | ||
|
|
e2de162931 | ||
|
|
4f606615eb |
@@ -594,7 +594,6 @@ fn query_from_sub(sub: &Subscription) -> (String, Vec<Box<dyn ToSql>>) {
|
|||||||
.map(|s| format!("SELECT content, created_at FROM ({})", s))
|
.map(|s| format!("SELECT content, created_at FROM ({})", s))
|
||||||
.collect();
|
.collect();
|
||||||
let query: String = subqueries_selects.join(" UNION ");
|
let query: String = subqueries_selects.join(" UNION ");
|
||||||
trace!("final query string: {}", query);
|
|
||||||
(query, params)
|
(query, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -620,6 +619,8 @@ pub async fn db_query(
|
|||||||
trace!("SQL generated in {:?}", start.elapsed());
|
trace!("SQL generated in {:?}", start.elapsed());
|
||||||
// show pool stats
|
// show pool stats
|
||||||
debug!("DB pool stats: {:?}", pool.state());
|
debug!("DB pool stats: {:?}", pool.state());
|
||||||
|
// cutoff for displaying slow queries
|
||||||
|
let slow_cutoff = Duration::from_millis(200);
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
if let Ok(conn) = pool.get() {
|
if let Ok(conn) = pool.get() {
|
||||||
// execute the query. Don't cache, since queries vary so much.
|
// execute the query. Don't cache, since queries vary so much.
|
||||||
@@ -628,11 +629,16 @@ pub async fn db_query(
|
|||||||
let mut first_result = true;
|
let mut first_result = true;
|
||||||
while let Some(row) = event_rows.next()? {
|
while let Some(row) = event_rows.next()? {
|
||||||
if first_result {
|
if first_result {
|
||||||
|
let first_result_elapsed = start.elapsed();
|
||||||
|
// logging for slow queries
|
||||||
|
if first_result_elapsed >= slow_cutoff {
|
||||||
|
info!("final query string (slow): {}", q);
|
||||||
|
} else {
|
||||||
|
trace!("final query string: {}", q);
|
||||||
|
}
|
||||||
debug!(
|
debug!(
|
||||||
"time to first result: {:?} (cid={}, sub={:?})",
|
"time to first result: {:?} (cid={}, sub={:?})",
|
||||||
start.elapsed(),
|
first_result_elapsed, client_id, sub.id
|
||||||
client_id,
|
|
||||||
sub.id
|
|
||||||
);
|
);
|
||||||
first_result = false;
|
first_result = false;
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-1
@@ -20,7 +20,7 @@ pragma mmap_size = 536870912; -- 512MB of mmap
|
|||||||
"##;
|
"##;
|
||||||
|
|
||||||
/// Latest database version
|
/// Latest database version
|
||||||
pub const DB_VERSION: usize = 8;
|
pub const DB_VERSION: usize = 9;
|
||||||
|
|
||||||
/// Schema definition
|
/// Schema definition
|
||||||
const INIT_SQL: &str = formatcp!(
|
const INIT_SQL: &str = formatcp!(
|
||||||
@@ -49,6 +49,7 @@ content TEXT NOT NULL -- serialized json of event object
|
|||||||
-- Event Indexes
|
-- Event Indexes
|
||||||
CREATE UNIQUE INDEX IF NOT EXISTS event_hash_index ON event(event_hash);
|
CREATE UNIQUE INDEX IF NOT EXISTS event_hash_index ON event(event_hash);
|
||||||
CREATE INDEX IF NOT EXISTS author_index ON event(author);
|
CREATE INDEX IF NOT EXISTS author_index ON event(author);
|
||||||
|
CREATE INDEX IF NOT EXISTS created_at_index ON event(created_at);
|
||||||
CREATE INDEX IF NOT EXISTS delegated_by_index ON event(delegated_by);
|
CREATE INDEX IF NOT EXISTS delegated_by_index ON event(delegated_by);
|
||||||
CREATE INDEX IF NOT EXISTS event_composite_index ON event(kind,created_at);
|
CREATE INDEX IF NOT EXISTS event_composite_index ON event(kind,created_at);
|
||||||
|
|
||||||
@@ -159,6 +160,10 @@ pub fn upgrade_db(conn: &mut PooledConnection) -> Result<()> {
|
|||||||
if curr_version == 7 {
|
if curr_version == 7 {
|
||||||
curr_version = mig_7_to_8(conn)?;
|
curr_version = mig_7_to_8(conn)?;
|
||||||
}
|
}
|
||||||
|
if curr_version == 8 {
|
||||||
|
curr_version = mig_8_to_9(conn)?;
|
||||||
|
}
|
||||||
|
|
||||||
if curr_version == DB_VERSION {
|
if curr_version == DB_VERSION {
|
||||||
info!(
|
info!(
|
||||||
"All migration scripts completed successfully. Welcome to v{}.",
|
"All migration scripts completed successfully. Welcome to v{}.",
|
||||||
@@ -396,3 +401,23 @@ PRAGMA user_version = 8;
|
|||||||
}
|
}
|
||||||
Ok(8)
|
Ok(8)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn mig_8_to_9(conn: &mut PooledConnection) -> Result<usize> {
|
||||||
|
info!("database schema needs update from 8->9");
|
||||||
|
// Those old indexes were actually helpful...
|
||||||
|
let upgrade_sql = r##"
|
||||||
|
CREATE INDEX IF NOT EXISTS created_at_index ON event(created_at);
|
||||||
|
CREATE INDEX IF NOT EXISTS event_composite_index ON event(kind,created_at);
|
||||||
|
PRAGMA user_version = 8;
|
||||||
|
"##;
|
||||||
|
match conn.execute_batch(upgrade_sql) {
|
||||||
|
Ok(()) => {
|
||||||
|
info!("database schema upgraded v8 -> v9");
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
error!("update failed: {}", err);
|
||||||
|
panic!("database could not be upgraded");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(8)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user