mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-06 10:19:48 +00:00
34 lines
883 B
Ruby
34 lines
883 B
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative 'base'
|
|
|
|
module Database
|
|
class QueryAnalyzers
|
|
class MultiplePartitionScanDetector < Database::QueryAnalyzers::Base
|
|
def analyze(query)
|
|
super
|
|
|
|
return if config['todos']&.include?(query['fingerprint'])
|
|
|
|
config['tables'].each do |table_name|
|
|
if query['query'].include?(table_name) && query['plan'].to_s.include?('"Subplans Removed"=>0')
|
|
(output[table_name] ||= []) << query
|
|
end
|
|
end
|
|
end
|
|
|
|
def save!
|
|
config['tables'].each do |table_name|
|
|
next unless output[table_name]
|
|
|
|
Zlib::GzipWriter.open(output_path("#{table_name}_multiple_partition_scans.ndjson")) do |file|
|
|
output[table_name].each do |query|
|
|
file.puts(JSON.generate(query))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|