From f13afa1ee92ceb40ce2e44f6457bd6e75b80adb5 Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Sun, 19 Aug 2018 02:01:49 +0200
Subject: [PATCH] Do not use WHERE NOT IN in CopyStatusStats migration (#8281)

Fix #8275

As the batch operation progresses, the statuses_stats table grows,
and the WHERE NOT IN subquery becomes more expensive
---
 db/migrate/20180812173710_copy_status_stats.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/db/migrate/20180812173710_copy_status_stats.rb b/db/migrate/20180812173710_copy_status_stats.rb
index 0c5907c301..850aa9c13e 100644
--- a/db/migrate/20180812173710_copy_status_stats.rb
+++ b/db/migrate/20180812173710_copy_status_stats.rb
@@ -3,7 +3,7 @@ class CopyStatusStats < ActiveRecord::Migration[5.2]
 
   def up
     safety_assured do
-      Status.where.not(id: StatusStat.select('status_id')).select('id').find_in_batches do |statuses|
+      Status.unscoped.select('id').find_in_batches(batch_size: 5_000) do |statuses|
         execute <<-SQL.squish
           INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
           SELECT id, reblogs_count, favourites_count, created_at, updated_at
-- 
GitLab