diff options
author | Stan Hu <stanhu@gmail.com> | 2019-06-09 18:18:14 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-06-09 18:19:40 -0700 |
commit | 8346da6527ab4b9233605565a022ef9f05d3f4c9 (patch) | |
tree | 8205c163999c5444be034298d17902cebb963d73 /lib | |
parent | 72611cbc3a81647cc7f93cd8a84ae3b9f37ec8c7 (diff) | |
download | gitlab-ce-8346da6527ab4b9233605565a022ef9f05d3f4c9.tar.gz |
Add backtraces to Peek performance bar for SQL callssh-add-backtrace-to-sql-queries
Just as we have backtraces for Gitaly, we should also have backtraces
for SQL calls. This makes it much easier to find the source of the SQL
call and optimize N+1 queries and other performance issues with an
endpoint.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/performance_bar/peek_query_tracker.rb | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/gitlab/performance_bar/peek_query_tracker.rb b/lib/gitlab/performance_bar/peek_query_tracker.rb index 16c16aa0265..3a27e26eaba 100644 --- a/lib/gitlab/performance_bar/peek_query_tracker.rb +++ b/lib/gitlab/performance_bar/peek_query_tracker.rb @@ -27,15 +27,16 @@ module Gitlab subscribe('sql.active_record') do |_, start, finish, _, data| if Gitlab::SafeRequestStore.store[:peek_enabled] unless data[:cached] - track_query(data[:sql].strip, data[:binds], start, finish) + backtrace = Gitlab::Profiler.clean_backtrace(caller) + track_query(data[:sql].strip, data[:binds], backtrace, start, finish) end end end end - def track_query(raw_query, bindings, start, finish) + def track_query(raw_query, bindings, backtrace, start, finish) duration = (finish - start) * 1000.0 - query_info = { duration: duration.round(3), sql: raw_query } + query_info = { duration: duration.round(3), sql: raw_query, backtrace: backtrace } PEEK_DB_CLIENT.query_details << query_info end |