summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrasimir Angelov <kangelov@gitlab.com>2019-08-16 14:27:40 +0300
committerKrasimir Angelov <kangelov@gitlab.com>2019-09-03 15:39:33 +1200
commit24a01c8802628bff2ef5326b80384806a474a365 (patch)
tree1fe512f9126677e4f3af8f2f75f2dd79a70cf6ef
parent545f940a793922e87d5ded85e871d230b8adf6d7 (diff)
downloadgitlab-ce-24a01c8802628bff2ef5326b80384806a474a365.tar.gz
Optimize project_pages_metadata table
Remove `id` and timestamp columns, we do not need them. Use project_id as primary key and make it `bigint`, `integer` will be alligned to 8 bytes anyway.
-rw-r--r--app/models/project.rb10
-rw-r--r--app/models/project_pages_metadatum.rb2
-rw-r--r--db/migrate/20190806112508_create_project_pages_metadata.rb5
-rw-r--r--db/schema.rb6
4 files changed, 11 insertions, 12 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index e94885cc1d1..78b73e7be9c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -612,12 +612,12 @@ class Project < ApplicationRecord
.to_sql
select_from = project_pages_metadata_not_migrated
- .select("projects.id, COALESCE((#{successful_pages_deploy}), FALSE), NOW(), NOW()")
+ .select("projects.id, COALESCE((#{successful_pages_deploy}), FALSE)")
.to_sql
connection_pool.with_connection do |connection|
connection.execute <<~INSERT_SQL
- INSERT INTO project_pages_metadata (project_id, deployed, created_at, updated_at)
+ INSERT INTO project_pages_metadata (project_id, deployed)
#{select_from}
INSERT_SQL
end
@@ -2375,10 +2375,10 @@ class Project < ApplicationRecord
flag = flag ? 'TRUE' : 'FALSE'
upsert = <<~SQL
- INSERT INTO project_pages_metadata (project_id, deployed, created_at, updated_at)
- VALUES (#{id}, #{flag}, NOW(), NOW())
+ INSERT INTO project_pages_metadata (project_id, deployed)
+ VALUES (#{id}, #{flag})
ON CONFLICT (project_id) DO UPDATE
- SET deployed = EXCLUDED.deployed, updated_at = NOW()
+ SET deployed = EXCLUDED.deployed
SQL
self.class.connection_pool.with_connection do |connection|
diff --git a/app/models/project_pages_metadatum.rb b/app/models/project_pages_metadatum.rb
index 5a283152fc8..21e0c8fcbdf 100644
--- a/app/models/project_pages_metadatum.rb
+++ b/app/models/project_pages_metadatum.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class ProjectPagesMetadatum < ApplicationRecord
+ self.primary_key = :project_id
+
belongs_to :project, inverse_of: :project_pages_metadatum
scope :project_scoped, -> { where('projects.id=project_pages_metadata.project_id') }
diff --git a/db/migrate/20190806112508_create_project_pages_metadata.rb b/db/migrate/20190806112508_create_project_pages_metadata.rb
index 7dbb350649d..73c02077326 100644
--- a/db/migrate/20190806112508_create_project_pages_metadata.rb
+++ b/db/migrate/20190806112508_create_project_pages_metadata.rb
@@ -6,9 +6,8 @@ class CreateProjectPagesMetadata < ActiveRecord::Migration[5.2]
DOWNTIME = false
def change
- create_table :project_pages_metadata do |t|
- t.references :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade }, type: :integer
- t.timestamps_with_timezone null: false
+ create_table :project_pages_metadata, id: false do |t|
+ t.references :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade }
t.boolean :deployed, null: false, default: false, index: true
end
end
diff --git a/db/schema.rb b/db/schema.rb
index d84ac1b503b..3ea5aad7ab8 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -2687,10 +2687,8 @@ ActiveRecord::Schema.define(version: 2019_09_02_131045) do
t.index ["status"], name: "index_project_mirror_data_on_status"
end
- create_table "project_pages_metadata", force: :cascade do |t|
- t.integer "project_id", null: false
- t.datetime_with_timezone "created_at", null: false
- t.datetime_with_timezone "updated_at", null: false
+ create_table "project_pages_metadata", id: false, force: :cascade do |t|
+ t.bigint "project_id", null: false
t.boolean "deployed", default: false, null: false
t.index ["deployed"], name: "index_project_pages_metadata_on_deployed"
t.index ["project_id"], name: "index_project_pages_metadata_on_project_id", unique: true