From 048e7f8678c34a71f305f828be71d2d9a0f3d847 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 6 Jun 2020 16:39:03 -0300 Subject: [PATCH 1/4] [IMPROVE][Performance] Add new database indexes to improve data query performance --- app/models/server/models/LivechatVisitors.js | 3 +++ app/models/server/models/Messages.js | 2 +- app/models/server/models/Rooms.js | 11 ++++++++--- app/models/server/models/Sessions.js | 1 + app/models/server/models/Subscriptions.js | 1 + app/models/server/models/_BaseDb.js | 4 +++- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/models/server/models/LivechatVisitors.js b/app/models/server/models/LivechatVisitors.js index 571d950b0feec..da339d681401b 100644 --- a/app/models/server/models/LivechatVisitors.js +++ b/app/models/server/models/LivechatVisitors.js @@ -8,6 +8,9 @@ import Settings from './Settings'; export class LivechatVisitors extends Base { constructor() { super('livechat_visitor'); + + this.tryEnsureIndex({ token: 1 }); + this.tryEnsureIndex({ 'phone.phoneNumber': 1 }, { sparse: true }); } /** diff --git a/app/models/server/models/Messages.js b/app/models/server/models/Messages.js index ca29fe391eaa3..285161850efa5 100644 --- a/app/models/server/models/Messages.js +++ b/app/models/server/models/Messages.js @@ -9,7 +9,7 @@ export class Messages extends Base { constructor() { super('message'); - this.tryEnsureIndex({ rid: 1, ts: 1 }); + this.tryEnsureIndex({ rid: 1, ts: 1, _updatedAt: 1 }); this.tryEnsureIndex({ ts: 1 }); this.tryEnsureIndex({ 'u._id': 1 }); this.tryEnsureIndex({ editedAt: 1 }, { sparse: true }); diff --git a/app/models/server/models/Rooms.js b/app/models/server/models/Rooms.js index 6e5007cabf90b..0fc41e2a02dbf 100644 --- a/app/models/server/models/Rooms.js +++ b/app/models/server/models/Rooms.js @@ -11,12 +11,17 @@ export class Rooms extends Base { super(...args); this.tryEnsureIndex({ name: 1 }, { unique: true, sparse: true }); - this.tryEnsureIndex({ default: 1 }); - this.tryEnsureIndex({ featured: 1 }); + this.tryEnsureIndex({ default: 1 }, { sparse: true }); + this.tryEnsureIndex({ featured: 1 }, { sparse: true }); + this.tryEnsureIndex({ muted: 1 }, { sparse: true }); this.tryEnsureIndex({ t: 1 }); this.tryEnsureIndex({ 'u._id': 1 }); - this.tryEnsureIndex({ 'tokenpass.tokens.token': 1 }); this.tryEnsureIndex({ ts: 1 }); + // Tokenpass + this.tryEnsureIndex({ 'tokenpass.tokens.token': 1 }, { sparse: true }); + this.tryEnsureIndex({ tokenpass: 1 }, { sparse: true }); + // livechat + this.tryEnsureIndex({ 'v.token': 1 }, { sparse: true }); // discussions this.tryEnsureIndex({ prid: 1 }, { sparse: true }); this.tryEnsureIndex({ fname: 1 }, { sparse: true }); diff --git a/app/models/server/models/Sessions.js b/app/models/server/models/Sessions.js index 5992261e2f944..9eb2286322890 100644 --- a/app/models/server/models/Sessions.js +++ b/app/models/server/models/Sessions.js @@ -376,6 +376,7 @@ export class Sessions extends Base { this.tryEnsureIndex({ instanceId: 1, sessionId: 1, year: 1, month: 1, day: 1 }); this.tryEnsureIndex({ instanceId: 1, sessionId: 1, userId: 1 }); this.tryEnsureIndex({ instanceId: 1, sessionId: 1 }); + this.tryEnsureIndex({ sessionId: 1 }); this.tryEnsureIndex({ year: 1, month: 1, day: 1, type: 1 }); this.tryEnsureIndex({ type: 1 }); this.tryEnsureIndex({ _computedAt: 1 }, { expireAfterSeconds: 60 * 60 * 24 * 45 }); diff --git a/app/models/server/models/Subscriptions.js b/app/models/server/models/Subscriptions.js index 1183865ab2881..5607a1bbfe0d2 100644 --- a/app/models/server/models/Subscriptions.js +++ b/app/models/server/models/Subscriptions.js @@ -19,6 +19,7 @@ export class Subscriptions extends Base { this.tryEnsureIndex({ rid: 1, alert: 1, 'u._id': 1 }); this.tryEnsureIndex({ rid: 1, roles: 1 }); this.tryEnsureIndex({ 'u._id': 1, name: 1, t: 1 }); + this.tryEnsureIndex({ name: 1, t: 1 }); this.tryEnsureIndex({ open: 1 }); this.tryEnsureIndex({ alert: 1 }); this.tryEnsureIndex({ ts: 1 }); diff --git a/app/models/server/models/_BaseDb.js b/app/models/server/models/_BaseDb.js index f8ced9735d362..e449ee523a13c 100644 --- a/app/models/server/models/_BaseDb.js +++ b/app/models/server/models/_BaseDb.js @@ -10,11 +10,13 @@ const baseName = 'rocketchat_'; const trash = new Mongo.Collection(`${ baseName }_trash`); try { - trash._ensureIndex({ collection: 1 }); + trash._ensureIndex({ __collection__: 1 }); trash._ensureIndex( { _deletedAt: 1 }, { expireAfterSeconds: 60 * 60 * 24 * 30 }, ); + + trash._ensureIndex({ __collection__: 1, _deletedAt: 1, rid: 1 }); } catch (e) { console.log(e); } From f5886224d6ee68a750277043d42f449d59687a93 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 16 Jun 2020 09:17:40 -0300 Subject: [PATCH 2/4] Fix review --- app/models/server/models/LivechatRooms.js | 1 + app/models/server/models/Rooms.js | 2 -- app/models/server/models/_BaseDb.js | 2 +- server/startup/migrations/index.js | 1 + server/startup/migrations/v192.js | 25 +++++++++++++++++++++++ 5 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 server/startup/migrations/v192.js diff --git a/app/models/server/models/LivechatRooms.js b/app/models/server/models/LivechatRooms.js index 6f9e1957c4912..06707539e47f2 100644 --- a/app/models/server/models/LivechatRooms.js +++ b/app/models/server/models/LivechatRooms.js @@ -18,6 +18,7 @@ export class LivechatRooms extends Base { this.tryEnsureIndex({ 'omnichannel.predictedVisitorAbandonmentAt': 1 }, { sparse: true }); this.tryEnsureIndex({ closedAt: 1 }, { sparse: true }); this.tryEnsureIndex({ servedBy: 1 }, { sparse: true }); + this.tryEnsureIndex({ 'v.token': 1 }, { sparse: true }); } findLivechat(filter = {}, offset = 0, limit = 20) { diff --git a/app/models/server/models/Rooms.js b/app/models/server/models/Rooms.js index 0fc41e2a02dbf..9214d38a67f1f 100644 --- a/app/models/server/models/Rooms.js +++ b/app/models/server/models/Rooms.js @@ -20,8 +20,6 @@ export class Rooms extends Base { // Tokenpass this.tryEnsureIndex({ 'tokenpass.tokens.token': 1 }, { sparse: true }); this.tryEnsureIndex({ tokenpass: 1 }, { sparse: true }); - // livechat - this.tryEnsureIndex({ 'v.token': 1 }, { sparse: true }); // discussions this.tryEnsureIndex({ prid: 1 }, { sparse: true }); this.tryEnsureIndex({ fname: 1 }, { sparse: true }); diff --git a/app/models/server/models/_BaseDb.js b/app/models/server/models/_BaseDb.js index e449ee523a13c..e4cd506f90f20 100644 --- a/app/models/server/models/_BaseDb.js +++ b/app/models/server/models/_BaseDb.js @@ -8,7 +8,7 @@ import { getMongoInfo } from '../../../utils/server/functions/getMongoInfo'; const baseName = 'rocketchat_'; -const trash = new Mongo.Collection(`${ baseName }_trash`); +export const trash = new Mongo.Collection(`${ baseName }_trash`); try { trash._ensureIndex({ __collection__: 1 }); trash._ensureIndex( diff --git a/server/startup/migrations/index.js b/server/startup/migrations/index.js index d4353ab9d79cf..5486082a37285 100644 --- a/server/startup/migrations/index.js +++ b/server/startup/migrations/index.js @@ -188,4 +188,5 @@ import './v188'; import './v189'; import './v190'; import './v191'; +import './v192'; import './xrun'; diff --git a/server/startup/migrations/v192.js b/server/startup/migrations/v192.js new file mode 100644 index 0000000000000..1c0057a950c4b --- /dev/null +++ b/server/startup/migrations/v192.js @@ -0,0 +1,25 @@ +import { Migrations } from '../../../app/migrations/server'; +import { Messages, Rooms } from '../../../app/models/server'; +import { trash } from '../../../app/models/server/models/_BaseDb'; + +Migrations.add({ + version: 192, + up() { + try { + trash._dropIndex({ collection: 1 }); + } catch { + // + } + + Messages.tryDropIndex({ rid: 1, ts: 1 }); + + Rooms.tryDropIndex({ default: 1 }); + Rooms.tryEnsureIndex({ default: 1 }, { sparse: true }); + + Rooms.tryDropIndex({ featured: 1 }); + Rooms.tryEnsureIndex({ featured: 1 }, { sparse: true }); + + Rooms.tryDropIndex({ muted: 1 }); + Rooms.tryEnsureIndex({ muted: 1 }, { sparse: true }); + }, +}); From 6cef67dc179ba6042e7440f81e17255a37e916ea Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 16 Jun 2020 17:21:00 -0300 Subject: [PATCH 3/4] Update app/models/server/models/_BaseDb.js Co-authored-by: Diego Sampaio --- app/models/server/models/_BaseDb.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/server/models/_BaseDb.js b/app/models/server/models/_BaseDb.js index e4cd506f90f20..f8438ad25ba4a 100644 --- a/app/models/server/models/_BaseDb.js +++ b/app/models/server/models/_BaseDb.js @@ -16,7 +16,7 @@ try { { expireAfterSeconds: 60 * 60 * 24 * 30 }, ); - trash._ensureIndex({ __collection__: 1, _deletedAt: 1, rid: 1 }); + trash._ensureIndex({ rid: 1, __collection__: 1, _deletedAt: 1 }); } catch (e) { console.log(e); } From aca214978a63949026eaeef690f686dffb9c062f Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 16 Jun 2020 17:49:43 -0300 Subject: [PATCH 4/4] Add missing index --- server/startup/migrations/v192.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/startup/migrations/v192.js b/server/startup/migrations/v192.js index 1c0057a950c4b..72c6166a77084 100644 --- a/server/startup/migrations/v192.js +++ b/server/startup/migrations/v192.js @@ -13,6 +13,9 @@ Migrations.add({ Messages.tryDropIndex({ rid: 1, ts: 1 }); + Rooms.tryDropIndex({ 'tokenpass.tokens.token': 1 }); + Rooms.tryEnsureIndex({ 'tokenpass.tokens.token': 1 }, { sparse: true }); + Rooms.tryDropIndex({ default: 1 }); Rooms.tryEnsureIndex({ default: 1 }, { sparse: true });