Add activerecord-explain-analyze gem
This gem allows you to get the `EXPLAIN ANALYZE` query plan, directly from the Rails console. The gem is installed with `require: false`, but if it was loaded on launch, this would be it's memory load: ``` TOP: 145.3086 MiB rails/all: 22.4844 MiB ... activerecord-explain-analyze: 2.9648 MiB active_record/connection_adapters/postgresql_adapter: 2.9648 MiB pg: 2.9648 MiB pg_ext: 2.9648 MiB ... ```
This commit is contained in:
parent
5b0291d253
commit
be47267331
3 changed files with 34 additions and 0 deletions
1
Gemfile
1
Gemfile
|
@ -403,6 +403,7 @@ gem 'ruby-prof', '~> 0.17.0'
|
||||||
gem 'rbtrace', '~> 0.4', require: false
|
gem 'rbtrace', '~> 0.4', require: false
|
||||||
gem 'memory_profiler', '~> 0.9', require: false
|
gem 'memory_profiler', '~> 0.9', require: false
|
||||||
gem 'benchmark-memory', '~> 0.1', require: false
|
gem 'benchmark-memory', '~> 0.1', require: false
|
||||||
|
gem 'activerecord-explain-analyze', '~> 0.1', require: false
|
||||||
|
|
||||||
# OAuth
|
# OAuth
|
||||||
gem 'oauth2', '~> 1.4'
|
gem 'oauth2', '~> 1.4'
|
||||||
|
|
|
@ -38,6 +38,9 @@ GEM
|
||||||
activemodel (= 5.1.7)
|
activemodel (= 5.1.7)
|
||||||
activesupport (= 5.1.7)
|
activesupport (= 5.1.7)
|
||||||
arel (~> 8.0)
|
arel (~> 8.0)
|
||||||
|
activerecord-explain-analyze (0.1.0)
|
||||||
|
activerecord (>= 4)
|
||||||
|
pg
|
||||||
activerecord_sane_schema_dumper (1.0)
|
activerecord_sane_schema_dumper (1.0)
|
||||||
rails (>= 5, < 6)
|
rails (>= 5, < 6)
|
||||||
activesupport (5.1.7)
|
activesupport (5.1.7)
|
||||||
|
@ -1012,6 +1015,7 @@ DEPENDENCIES
|
||||||
RedCloth (~> 4.3.2)
|
RedCloth (~> 4.3.2)
|
||||||
ace-rails-ap (~> 4.1.0)
|
ace-rails-ap (~> 4.1.0)
|
||||||
acme-client (~> 2.0.2)
|
acme-client (~> 2.0.2)
|
||||||
|
activerecord-explain-analyze (~> 0.1)
|
||||||
activerecord_sane_schema_dumper (= 1.0)
|
activerecord_sane_schema_dumper (= 1.0)
|
||||||
acts-as-taggable-on (~> 6.0)
|
acts-as-taggable-on (~> 6.0)
|
||||||
addressable (~> 2.5.2)
|
addressable (~> 2.5.2)
|
||||||
|
|
|
@ -654,6 +654,35 @@ and related tools such as:
|
||||||
- <https://explain.depesz.com/>
|
- <https://explain.depesz.com/>
|
||||||
- <http://tatiyants.com/postgres-query-plan-visualization/>
|
- <http://tatiyants.com/postgres-query-plan-visualization/>
|
||||||
|
|
||||||
|
## Producing query plans
|
||||||
|
|
||||||
|
There are a few ways to get the output of a query plan. Of course you
|
||||||
|
can directly run the `EXPLAIN` query in the `psql` console, or you can
|
||||||
|
follow one of the other options below.
|
||||||
|
|
||||||
|
### Rails console
|
||||||
|
|
||||||
|
Using the [`activerecord-explain-analyze`](https://github.com/6/activerecord-explain-analyze)
|
||||||
|
you can directly generate the query plan from the Rails console:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
pry(main)> require 'activerecord-explain-analyze'
|
||||||
|
=> true
|
||||||
|
pry(main)> Project.where('build_timeout > ?', 3600).explain(analyze: true)
|
||||||
|
Project Load (1.9ms) SELECT "projects".* FROM "projects" WHERE (build_timeout > 3600)
|
||||||
|
↳ (pry):12
|
||||||
|
=> EXPLAIN for: SELECT "projects".* FROM "projects" WHERE (build_timeout > 3600)
|
||||||
|
Seq Scan on public.projects (cost=0.00..2.17 rows=1 width=742) (actual time=0.040..0.041 rows=0 loops=1)
|
||||||
|
Output: id, name, path, description, created_at, updated_at, creator_id, namespace_id, ...
|
||||||
|
Filter: (projects.build_timeout > 3600)
|
||||||
|
Rows Removed by Filter: 14
|
||||||
|
Buffers: shared hit=2
|
||||||
|
Planning time: 0.411 ms
|
||||||
|
Execution time: 0.113 ms
|
||||||
|
```
|
||||||
|
|
||||||
|
### Chatops
|
||||||
|
|
||||||
GitLab employees can also use our chatops solution, available in Slack using the
|
GitLab employees can also use our chatops solution, available in Slack using the
|
||||||
`/chatops` slash command. You can use chatops to get a query plan by running the
|
`/chatops` slash command. You can use chatops to get a query plan by running the
|
||||||
following:
|
following:
|
||||||
|
|
Loading…
Reference in a new issue