mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
PERF: remove SQL notifiers for every SQL execution
Benchmarking:
```
Benchmark.ips do |b|
b.report("simple") do
User.first
end
end
ActiveSupport::Notifications.notifier.listeners_for("sql.active_record").clear
Benchmark.ips do |b|
b.report("simple") do
User.first
end
end
```
```
sam@arch discourse % RAILS_ENV=production ruby script/micro_bench.rb
Before
Calculating -------------------------------------
simple 3.289k (± 4.4%) i/s - 16.575k in 5.049771s
After
Calculating -------------------------------------
simple 3.491k (± 3.6%) i/s - 17.442k in 5.002226s
````
This commit is contained in:
12
config/initializers/300-perf.rb
Normal file
12
config/initializers/300-perf.rb
Normal file
@@ -0,0 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
if Rails.env == "production"
|
||||
# This event happens quite a lot and fans out to ExplainSubscriber
|
||||
# and Logger, this cuts out 2 method calls that every time we run SQL
|
||||
#
|
||||
# In production we do not care about Explain or Logging SQL statements
|
||||
# at this level
|
||||
#
|
||||
# Micro bench shows for `User.first` this takes us from 3.3k/s to 3.5k/s
|
||||
ActiveSupport::Notifications.notifier.unsubscribe("sql.active_record")
|
||||
end
|
||||
Reference in New Issue
Block a user