diff --git a/keyserver/src/database/migration-config.js b/keyserver/src/database/migration-config.js
--- a/keyserver/src/database/migration-config.js
+++ b/keyserver/src/database/migration-config.js
@@ -42,6 +42,8 @@
 
 const botViewer = createScriptViewer(bots.commbot.userID);
 
+// wrap_in_transaction_and_block_requests doesn't work right now
+// Tracked in ENG-9228
 export type MigrationType =
   | 'wrap_in_transaction_and_block_requests'
   | 'run_simultaneously_with_requests';
@@ -1084,6 +1086,20 @@
     },
     migrationType: 'run_simultaneously_with_requests',
   },
+  {
+    version: 72,
+    migrationPromise: () =>
+      dbQuery(
+        SQL`
+          ALTER TABLE memberships
+          ADD COLUMN IF NOT EXISTS last_message_for_unread_check
+            bigint(20) NOT NULL DEFAULT 0;
+          UPDATE memberships SET last_message_for_unread_check = last_message;
+        `,
+        { multipleStatements: true },
+      ),
+    migrationType: 'run_simultaneously_with_requests',
+  },
 ];
 const versions: $ReadOnlyArray<number> = migrations.map(
   migration => migration.version,
diff --git a/keyserver/src/database/setup-db.js b/keyserver/src/database/setup-db.js
--- a/keyserver/src/database/setup-db.js
+++ b/keyserver/src/database/setup-db.js
@@ -101,6 +101,7 @@
         creation_time bigint(20) NOT NULL,
         subscription json NOT NULL,
         last_message bigint(20) NOT NULL DEFAULT 0,
+        last_message_for_unread_check bigint(20) NOT NULL DEFAULT 0,
         last_read_message bigint(20) NOT NULL DEFAULT 0,
         sender tinyint(1) UNSIGNED NOT NULL DEFAULT 0
       ) ENGINE=InnoDB DEFAULT CHARSET=latin1;