From 1fc7769f9f0219da0d4a2e28a103db6c22f249fa Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Tue, 6 Apr 2021 10:29:22 -0700 Subject: [PATCH] Optimize database and run quick check --- main.js | 10 +++++++++- ts/sql/Server.ts | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 03f5ccc774..2520afb71e 100644 --- a/main.js +++ b/main.js @@ -121,6 +121,9 @@ const { Environment } = require('./ts/environment'); const sql = new MainSQL(); +let sqlInitTimeStart = 0; +let sqlInitTimeEnd = 0; + let appStartInitialSpellcheckSetting = true; const defaultWebPrefs = { @@ -963,10 +966,12 @@ app.on('ready', async () => { // from when it's first ready until the loading screen disappears. ipc.once('signal-app-loaded', () => { const loadTime = Date.now() - startTime; + const sqlInitTime = sqlInitTimeEnd - sqlInitTimeStart; console.log('App loaded - time:', loadTime); + console.log('SQL init - time:', sqlInitTime); if (enableCI) { - console._log('ci: app_loaded=%j', { loadTime }); + console._log('ci: app_loaded=%j', { loadTime, sqlInitTime }); } }); @@ -1027,6 +1032,8 @@ app.on('ready', async () => { key = crypto.randomBytes(32).toString('hex'); userConfig.set('key', key); } + + sqlInitTimeStart = Date.now(); const sqlInitPromise = sql.initialize({ configDir: userDataPath, key, @@ -1074,6 +1081,7 @@ app.on('ready', async () => { try { await sqlInitPromise; + sqlInitTimeEnd = Date.now(); } catch (error) { console.log('sql.initialize was unsuccessful; returning early'); const buttonIndex = dialog.showMessageBoxSync({ diff --git a/ts/sql/Server.ts b/ts/sql/Server.ts index aad78947b2..f1b523e013 100644 --- a/ts/sql/Server.ts +++ b/ts/sql/Server.ts @@ -313,7 +313,7 @@ function getSQLCipherIntegrityCheck(db: Database): Array | undefined { } function getSQLIntegrityCheck(db: Database): string | undefined { - const checkResult = db.pragma('integrity_check', { simple: true }); + const checkResult = db.pragma('quick_check', { simple: true }); if (checkResult !== 'ok') { return checkResult; } @@ -1618,6 +1618,11 @@ async function close(): Promise { const dbRef = globalInstance; globalInstance = undefined; + + // SQLLite documentation suggests that we run `PRAGMA optimize` right before + // closing the database connection. + dbRef.pragma('optimize'); + dbRef.close(); }