InfoGrab Docs

그룹 계층 쿼리 최적화

그룹 계층 쿼리 최적화에 대해 설명합니다.

이 문서는 최소한의 오버헤드로 대규모 그룹 계층에서 모든 하위 항목(서브그룹 또는 프로젝트)을 로드하는 데 도움이 되는 계층 캐시 최적화 전략을 설명합니다. 이 최적화는 GitLab 에픽 내에서 구현되었습니다. 최적화는 700개 이상의 하위 항목(프로젝트 및 그룹) 수를 가진 그룹 계층에 대해 Namespaces::EnableDescendantsCacheCronWorker 워커를 통해 자동으로 활성화됩니다. 더 작은 그룹에 대해 수동으로 최적화를 활성화하면 눈에 띄는 효과가 없을 수 있습니다. 성능 비교 # gitlab-org 그룹의 모든 그룹 ID 로드(해당 그룹 자체 및 하위 항목 포함). 최적화된 캐시 쿼리 Traversal IDs 기반 조회 쿼리 버퍼 풀에서 42 버퍼 (~336.00 KiB) SELECT "namespaces"."id" FROM UNNEST ( COALESCE ( ( SELECT ids FROM ( SELECT "namespace_descendants"."self_and_descendant_group_ids" AS ids FROM "namespace_descendants" WHERE "namespace_descendants"."outdated_at" IS NULL AND "namespace_descendants"."namespace_id" = 22 ) cached_query ), ( SELECT ids FROM ( SELECT ARRAY_AGG ("namespaces"."id") AS ids FROM ( SELECT namespaces.traversal_ids[array_length(namespaces.traversal_ids, 1 )] AS id FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND (traversal_ids @ > ( '{22}' )) ) namespaces ) consistent_query ) ) ) AS namespaces(id) Function Scan on unnest namespaces (cost=1296.82..1296.92 rows=10 width=8) (actual time=0.193..0.236 rows=GROUP_COUNT loops=1) Buffers: shared hit=42 I/O Timings: read=0.000 write=0.000 InitPlan 1 (returns $0) -> Index Scan using namespace_descendants_12_pkey on gitlab_partitions_static.namespace_descendants_12 namespace_descendants (cost=0.14..3.16 rows=1 width=769) (actual time=0.022..0.023 rows=1 loops=1) Index Cond: (namespace_descendants.namespace_id = 9970) Filter: (namespace_descendants.outdated_at IS NULL