diff --git a/Gemfile b/Gemfile index 7013245e5..08e321079 100644 --- a/Gemfile +++ b/Gemfile @@ -165,6 +165,10 @@ group :development do # When we want to squash migrations gem 'squasher' + + # profiling + gem 'rack-mini-profiler', require: false + gem 'stackprof' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 9937dfcc2..03b280f75 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -520,6 +520,8 @@ GEM rack (>= 1.0, < 3) rack-cors (1.1.1) rack (>= 2.0.0) + rack-mini-profiler (3.0.0) + rack (>= 1.2.0) rack-protection (3.0.5) rack rack-proxy (0.7.2) @@ -692,6 +694,7 @@ GEM activesupport (>= 5.2) sprockets (>= 3.0.0) squasher (0.6.2) + stackprof (0.2.24) statsd-ruby (1.5.0) stripe (6.5.0) telephone_number (1.4.16) @@ -840,6 +843,7 @@ DEPENDENCIES pundit rack-attack rack-cors + rack-mini-profiler rack-timeout rails (~> 6.1, >= 6.1.7.3) redis @@ -865,6 +869,7 @@ DEPENDENCIES spring spring-watcher-listen squasher + stackprof stripe telephone_number test-prof diff --git a/app/models/conversation.rb b/app/models/conversation.rb index 43c2b0410..823215476 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -35,6 +35,7 @@ # index_conversations_on_contact_id (contact_id) # index_conversations_on_contact_inbox_id (contact_inbox_id) # index_conversations_on_first_reply_created_at (first_reply_created_at) +# index_conversations_on_id_and_account_id (account_id,id) # index_conversations_on_inbox_id (inbox_id) # index_conversations_on_last_activity_at (last_activity_at) # index_conversations_on_status_and_account_id (status,account_id) diff --git a/config/initializers/rack_profiler.rb b/config/initializers/rack_profiler.rb new file mode 100644 index 000000000..63b2c8516 --- /dev/null +++ b/config/initializers/rack_profiler.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +if Rails.env.development? + require 'rack-mini-profiler' + + # initialization is skipped so trigger it + Rack::MiniProfilerRails.initialize!(Rails.application) +end diff --git a/db/migrate/20230327081350_add_index_to_conversations_account_id_and_id.rb b/db/migrate/20230327081350_add_index_to_conversations_account_id_and_id.rb new file mode 100644 index 000000000..70fe99b81 --- /dev/null +++ b/db/migrate/20230327081350_add_index_to_conversations_account_id_and_id.rb @@ -0,0 +1,7 @@ +class AddIndexToConversationsAccountIdAndId < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + + def change + add_index :conversations, [:account_id, :id], name: 'index_conversations_on_id_and_account_id', algorithm: :concurrently + end +end diff --git a/db/schema.rb b/db/schema.rb index 88cc8ef1d..b12b2231a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2023_03_15_105847) do +ActiveRecord::Schema.define(version: 2023_03_27_081350) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" @@ -448,6 +448,7 @@ ActiveRecord::Schema.define(version: 2023_03_15_105847) do t.datetime "assignee_last_seen_at" t.datetime "first_reply_created_at" t.index ["account_id", "display_id"], name: "index_conversations_on_account_id_and_display_id", unique: true + t.index ["account_id", "id"], name: "index_conversations_on_id_and_account_id" t.index ["account_id", "inbox_id", "status", "assignee_id"], name: "conv_acid_inbid_stat_asgnid_idx" t.index ["account_id"], name: "index_conversations_on_account_id" t.index ["assignee_id", "account_id"], name: "index_conversations_on_assignee_id_and_account_id"