Add composite index on oauth_access_grants for cleanup worker

What does this MR do and why?

Add composite index on oauth_access_grants for cleanup worker

Adds index on (created_at, expires_in) to optimize the OAuth access grants cleanup worker performance when identifying expired grants.

Relates: #377995 (closed)

References

Database

Migration

daniele@dbracciani--20250523-VYV2F gitlab % bin/rails db:migrate                                                
main: == [advisory_lock_connection] object_id: 138920, pg_backend_pid: 64651
main: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: migrating ===
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0119s
main: -- index_exists?(:oauth_access_grants, [:created_at, :expires_in], {:name=>"index_oauth_access_grants_on_created_at_expires_in", :algorithm=>:concurrently})
main:    -> 0.0019s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- add_index(:oauth_access_grants, [:created_at, :expires_in], {:name=>"index_oauth_access_grants_on_created_at_expires_in", :algorithm=>:concurrently})
main:    -> 0.0018s
main: -- execute("RESET statement_timeout")
main:    -> 0.0002s
main: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: migrated (0.0290s) 

main: == [advisory_lock_connection] object_id: 138920, pg_backend_pid: 64651
ci: == [advisory_lock_connection] object_id: 138920, pg_backend_pid: 64652
ci: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: migrating ===
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0003s
ci: -- index_exists?(:oauth_access_grants, [:created_at, :expires_in], {:name=>"index_oauth_access_grants_on_created_at_expires_in", :algorithm=>:concurrently})
ci:    -> 0.0034s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- add_index(:oauth_access_grants, [:created_at, :expires_in], {:name=>"index_oauth_access_grants_on_created_at_expires_in", :algorithm=>:concurrently})
ci:    -> 0.0022s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: migrated (0.0175s) 

ci: == [advisory_lock_connection] object_id: 138920, pg_backend_pid: 64652

Rollback

daniele@dbracciani--20250523-VYV2F gitlab % VERSION=20250702142323 bin/rails db:migrate:down:main
main: == [advisory_lock_connection] object_id: 138620, pg_backend_pid: 65416
main: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: reverting ===
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0117s
main: -- indexes(:oauth_access_grants)
main:    -> 0.0062s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- remove_index(:oauth_access_grants, {:algorithm=>:concurrently, :name=>"index_oauth_access_grants_on_created_at_expires_in"})
main:    -> 0.0018s
main: -- execute("RESET statement_timeout")
main:    -> 0.0004s
main: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: reverted (0.0480s) 

main: == [advisory_lock_connection] object_id: 138620, pg_backend_pid: 65416
daniele@dbracciani--20250523-VYV2F gitlab % VERSION=20250702142323 bin/rails db:migrate:down:ci  
ci: == [advisory_lock_connection] object_id: 138620, pg_backend_pid: 65465
ci: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: reverting ===
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0100s
ci: -- indexes(:oauth_access_grants)
ci:    -> 0.0026s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- remove_index(:oauth_access_grants, {:algorithm=>:concurrently, :name=>"index_oauth_access_grants_on_created_at_expires_in"})
ci:    -> 0.0014s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250702142323 AddIndexToOauthAccessGrantOnCreatedAtExpiresIn: reverted (0.0293s) 

ci: == [advisory_lock_connection] object_id: 138620, pg_backend_pid: 65465

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Daniele Bracciani

Merge request reports

Loading