Skip to content

Commit

Permalink
Merge pull request #139 from NLincoln/sqlite-speedup
Browse files Browse the repository at this point in the history
sqlite-specific performance tuning
zhaofengli authored Jul 9, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2 parents 717cc95 + 759dbc9 commit ee8f374
Showing 1 changed file with 26 additions and 10 deletions.
36 changes: 26 additions & 10 deletions server/src/lib.rs
Original file line number Diff line number Diff line change
@@ -107,9 +107,28 @@ impl StateInner {
async fn database(&self) -> ServerResult<&DatabaseConnection> {
self.database
.get_or_try_init(|| async {
Database::connect(&self.config.database.url)
let db = Database::connect(&self.config.database.url)
.await
.map_err(ServerError::database_error)
.map_err(ServerError::database_error);
if let Ok(DatabaseConnection::SqlxSqlitePoolConnection(ref conn)) = db {
// execute some sqlite-specific performance optimizations
// see https://phiresky.github.io/blog/2020/sqlite-performance-tuning/ for
// more details
// intentionally ignore errors from this: this is purely for performance,
// not for correctness, so we can live without this
_ = conn
.execute_unprepared(
"
pragma journal_mode=WAL;
pragma synchronous=normal;
pragma temp_store=memory;
pragma mmap_size = 30000000000;
",
)
.await;
}

db
})
.await
}
@@ -225,14 +244,11 @@ pub async fn run_api_server(cli_listen: Option<SocketAddr>, config: Config) -> R

let listener = TcpListener::bind(&listen).await?;

let (server_ret, _) = tokio::join!(
axum::serve(listener, rest).into_future(),
async {
if state.config.database.heartbeat {
let _ = state.run_db_heartbeat().await;
}
},
);
let (server_ret, _) = tokio::join!(axum::serve(listener, rest).into_future(), async {
if state.config.database.heartbeat {
let _ = state.run_db_heartbeat().await;
}
},);

server_ret?;

0 comments on commit ee8f374

Please sign in to comment.