mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-01 16:04:19 +00:00
83 lines
2.2 KiB
Ruby
83 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'csv'
|
|
|
|
module Gitlab
|
|
module Database
|
|
module Sos
|
|
class DbLoopStatsActivity < BaseDbStatsHandler
|
|
QUERIES = {
|
|
pg_stat_user_tables: <<~SQL,
|
|
SELECT now() AS timestamp, *
|
|
FROM pg_stat_user_tables;
|
|
SQL
|
|
|
|
pg_stat_user_indexes: <<~SQL,
|
|
SELECT now() AS timestamp, *
|
|
FROM pg_stat_user_indexes;
|
|
SQL
|
|
|
|
pg_statio_user_tables: <<~SQL,
|
|
SELECT now() AS timestamp, *
|
|
FROM pg_statio_user_tables;
|
|
SQL
|
|
|
|
pg_statio_user_indexes: <<~SQL,
|
|
SELECT now() AS timestamp, *
|
|
FROM pg_statio_user_indexes;
|
|
SQL
|
|
|
|
table_relation_size: <<~SQL.squish,
|
|
SELECT
|
|
now() AS timestamp,
|
|
n.nspname || '.' || c.relname AS "relation",
|
|
pg_total_relation_size(c.oid) AS "total_size_bytes"
|
|
FROM
|
|
pg_class c
|
|
JOIN
|
|
pg_namespace n ON n.oid = c.relnamespace
|
|
WHERE
|
|
n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
|
|
ORDER BY
|
|
pg_total_relation_size(c.oid) DESC;
|
|
SQL
|
|
|
|
pg_lock_stat_activity: <<~SQL.squish
|
|
SELECT
|
|
now() AS timestamp,
|
|
a.pid,
|
|
a.usename,
|
|
a.application_name,
|
|
a.client_addr,
|
|
a.backend_start,
|
|
a.query_start,
|
|
a.state,
|
|
a.wait_event_type,
|
|
a.wait_event,
|
|
a.query,
|
|
l.locktype,
|
|
l.mode,
|
|
l.granted,
|
|
l.relation::regclass AS locked_relation
|
|
FROM
|
|
pg_stat_activity a
|
|
LEFT JOIN
|
|
pg_locks l ON l.pid = a.pid
|
|
WHERE
|
|
a.state != 'idle'
|
|
ORDER BY
|
|
a.query_start DESC;
|
|
SQL
|
|
}.freeze
|
|
|
|
def run
|
|
QUERIES.each do |query_name, query|
|
|
result = execute_query(query)
|
|
write_to_csv(query_name, result, include_timestamp: true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|