diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-06-19 14:14:29 +0200 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-06-19 14:18:41 +0200 |
commit | 9a3bea6707eba7451501a1aa860791de7fbf931e (patch) | |
tree | f57f248e881c074595ca5b4c9f00f6947a944c9e /lib | |
parent | 2923a0c8fede436fd407b76537fee963a13ac3ea (diff) | |
download | gitlab-ce-9a3bea6707eba7451501a1aa860791de7fbf931e.tar.gz |
Put an upper limit on update batchesupdate-column-in-batches-batch-size
When using update_column_in_batches the upper limit on the batch size is
now 1000. This ensures that for very large tables we don't lock tens of
thousands of rows during the update. This in turn should reduce the
likelyhood of running into deadlocks.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/database/migration_helpers.rb | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb index cd85f961242..9181202a091 100644 --- a/lib/gitlab/database/migration_helpers.rb +++ b/lib/gitlab/database/migration_helpers.rb @@ -233,6 +233,12 @@ module Gitlab # Update in batches of 5% until we run out of any rows to update. batch_size = ((total / 100.0) * 5.0).ceil + max_size = 1000 + + # The upper limit is 1000 to ensure we don't lock too many rows. For + # example, for "merge_requests" even 1% of the table is around 35 000 + # rows for GitLab.com. + batch_size = max_size if batch_size > max_size start_arel = table.project(table[:id]).order(table[:id].asc).take(1) start_arel = yield table, start_arel if block_given? |