diff options
author | Krasimir Angelov <kangelov@gitlab.com> | 2019-08-16 14:27:40 +0300 |
---|---|---|
committer | Krasimir Angelov <kangelov@gitlab.com> | 2019-09-03 15:39:33 +1200 |
commit | 24a01c8802628bff2ef5326b80384806a474a365 (patch) | |
tree | 1fe512f9126677e4f3af8f2f75f2dd79a70cf6ef | |
parent | 545f940a793922e87d5ded85e871d230b8adf6d7 (diff) | |
download | gitlab-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.rb | 10 | ||||
-rw-r--r-- | app/models/project_pages_metadatum.rb | 2 | ||||
-rw-r--r-- | db/migrate/20190806112508_create_project_pages_metadata.rb | 5 | ||||
-rw-r--r-- | db/schema.rb | 6 |
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 |