Merge pull request #139 from NLincoln/sqlite-speedup

sqlite-specific performance tuning
This commit is contained in:
Zhaofeng Li 2024-07-09 08:12:19 -04:00 committed by GitHub
commit ee8f374737
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -107,9 +107,28 @@ impl StateInner {
async fn database(&self) -> ServerResult<&DatabaseConnection> { async fn database(&self) -> ServerResult<&DatabaseConnection> {
self.database self.database
.get_or_try_init(|| async { .get_or_try_init(|| async {
Database::connect(&self.config.database.url) let db = Database::connect(&self.config.database.url)
.await .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 .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 listener = TcpListener::bind(&listen).await?;
let (server_ret, _) = tokio::join!( let (server_ret, _) = tokio::join!(axum::serve(listener, rest).into_future(), async {
axum::serve(listener, rest).into_future(), if state.config.database.heartbeat {
async { let _ = state.run_db_heartbeat().await;
if state.config.database.heartbeat { }
let _ = state.run_db_heartbeat().await; },);
}
},
);
server_ret?; server_ret?;