discourse/script
Alan Guo Xiang Tan 7c321d3aad
PERF: Update `Group#user_count` counter cache outside DB transaction (#19256)
While load testing our user creation code path in production, we
identified that executing the DB statement to update the `Group#user_count` column within a
transaction is creating a bottleneck for us. This is because the
creation of a user and addition of the user to the relevant groups are
done in a transaction. When we execute the DB statement to update
`Group#user_count` for the relevant group, a row level lock is held
until the transaction completes. This row level lock acts like a global
lock when the server is creating users that will be added to the same
group in quick succession.

Instead of updating the counter cache within a transaction which the
default ActiveRecord `counter_cache` option does, we simply update the
counter cache outside of the committing transaction.

Co-authored-by: Rafael dos Santos Silva <xfalcox@gmail.com>

Co-authored-by: Rafael dos Santos Silva <xfalcox@gmail.com>
2022-11-30 11:52:08 -03:00
..
benchmarks DEV: Fix rubocop issues (#14715) 2021-10-27 11:39:28 +03:00
bulk_import Fixes for vBulletin bulk importer (#17618) 2022-11-28 16:30:19 -03:00
demon_test
import_scripts PERF: Update `Group#user_count` counter cache outside DB transaction (#19256) 2022-11-30 11:52:08 -03:00
.gitignore
alice.txt
analyse_message_bus.rb DEV: Add message-bus analysis script (#15979) 2022-02-18 20:21:17 +00:00
analyze_sidekiq_queues.rb
bench.rb DEV: Fix methods removed in Ruby 3.2 (#15459) 2022-01-05 18:45:08 +01:00
biggest_objects.rb
boot_mem.rb
cache_critical_dns DEV(cache_critical_dns): add caching for MessageBus Redis hostname 2022-10-12 10:11:22 +10:00
check_forking.rb
copyright-deposit
db_timestamps_mover.rb DEV: Correctly tag heredocs (#16061) 2022-02-28 20:50:55 +01:00
diff_heaps.rb
discourse DEV: Be more lenient in CLI confirmation (#16290) 2022-03-25 20:14:41 +00:00
docker_test.rb DEV: Remove the remaining Travis code (#13255) 2021-06-02 20:29:47 +02:00
i18n_lint.rb DEV: Clean up and refactor CI workflow(s) (#12144) 2021-02-22 10:28:32 +01:00
measure.rb
memory-analysis
memstats.rb DEV: Fix rubocop issues (#14715) 2021-10-27 11:39:28 +03:00
micro_bench.rb
mwrap_sidekiq
profile_db_generator.rb
promote_migrations DEV: Promote historic post_deploy migrations (#16288) 2022-03-25 15:48:20 +00:00
rails
redis_memory.rb
require_profiler.rb
spawn_backup_restore.rb
start_test_db.rb DEV: Wait for initdb to complete in docker.rake (#15614) 2022-01-17 17:45:39 +00:00
switch_container_ruby
test_email_settings.rb
test_mem.rb
test_memory_leak.rb
test_pretty_text.rb
thread_detective.rb
user_simulator.rb