Skip to content

Resolve "Slow Namespace#all_projects"

Alex Pooley requested to merge 335064-slow-namespace-all_projects into master

What does this MR do?

The Namespace#all_projects method performance was previously improved when used with linear queries. A subsequent MR revert removed the fix from !62268 (merged).

We need to re-instate the call to self_and_descendant_ids over the self_and_descendants call.

The current SQL performs poorly in production...

SELECT 
  "projects".* 
FROM 
  "projects" 
WHERE 
  "projects"."namespace_id" IN (
    SELECT 
      "namespaces"."id" 
    FROM 
      "namespaces" 
    WHERE 
      (
        traversal_ids @ > ('{1}')
      )
  )

The new plan should work much better...

SELECT 
  "projects".* 
FROM 
  "projects" 
WHERE 
  "projects"."namespace_id" IN (
    SELECT 
      traversal_ids[array_length(traversal_ids, 1) ] AS id 
    FROM 
      "namespaces" 
    WHERE 
      (
        traversal_ids @ > ('{1}')
      )
  )

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

Related to #335064 (closed)

Edited by Alex Pooley

Merge request reports

Loading