Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot
2025-02-26 18:12:12 +00:00
parent 8b2a413032
commit 55a8c39b97
124 changed files with 2011 additions and 416 deletions

View File

@ -2,7 +2,7 @@
require 'yaml'
class Database
module Database
class QueryAnalyzers
attr_reader :analyzers

View File

@ -9,3 +9,5 @@ MultiplePartitionScanDetector:
# These fingerprints can be found in the auto_explain pipeline artifacts.
# Example:
# - c2cfe803a497101b
JSONBScanDetector:
todos:

View File

@ -3,7 +3,7 @@
require 'json'
require 'zlib'
class Database
module Database
class QueryAnalyzers
class Base
attr_accessor :output

View File

@ -0,0 +1,46 @@
# frozen_string_literal: true
require_relative 'base'
module Database
class QueryAnalyzers
class JSONBScanDetector < Database::QueryAnalyzers::Base
JSONB_MATCH_OPERATOR_EXPRESSION = /<@|@>/
def initialize(*args)
super
output[:bad_queries] = []
end
def analyze(query)
super
return if config['todos']&.include?(query['fingerprint'])
output[:bad_queries] << query if has_operator_in_where?(query['query'])
end
def save!
return if output[:bad_queries].empty?
Zlib::GzipWriter.open(output_path("jsonb_column_scans.ndjson")) do |file|
output[:bad_queries].each do |query|
file.puts(JSON.generate(query))
end
end
end
private
def has_operator_in_where?(query)
return false unless query.match?(JSONB_MATCH_OPERATOR_EXPRESSION)
clauses = query.split(/\sWHERE\s|\sJOIN\s/)
return false if clauses.length < 2
clauses[1..].each do |c|
return true if c.include?('::jsonb')
end
end
end
end
end

View File

@ -2,7 +2,7 @@
require_relative 'base'
class Database
module Database
class QueryAnalyzers
class MultiplePartitionScanDetector < Database::QueryAnalyzers::Base
def analyze(query)