Immich 검색은 사진이 존재하기 때문이 아니라, 라이브러리가 커지면서 더 큰 인덱스와 작업 집합이 효율적인 캐시, 필터링 또는 스토리지 동작 범위를 벗어날 때 느려집니다.
라이브러리가 커지면 행, 임베딩, 메타데이터, 썸네일, 가능한 필터 조합이 동시에 증가합니다. 어느 단계가 느려지는지 진단해야 합니다. 더 빠른 파일 스토리지는 잘못된 쿼리 경로를 개선할 수 없고, 데이터베이스 튜닝으로 원격 썸네일 마운트를 빠르게 만들 수도 없기 때문입니다.
성장하면 원래 라이브러리보다 더 많은 요소가 확장됩니다
자산이 추가될 때마다 데이터베이스 행, 추출된 메타데이터, 검색 표현, 얼굴 데이터, 썸네일, 인코딩된 미디어가 늘어날 수 있습니다. 이러한 구조는 서로 다른 속도로 증가하며 서로 다르게 접근됩니다. 따라서 요청이 얼마나 많은 검색 가능한 엔터티와 파생 객체를 탐색하는지 모르면 원본 라이브러리의 테라바이트 수만으로 검색 지연 시간을 예측할 수 없습니다.
ZimaSpace의 Immich 데이터 경로 분석은 백그라운드 처리, 검색 가능한 표현, 데이터베이스 선택, 전달되는 미디어를 구분합니다. 쿼리 진단에서 얻을 수 있는 실질적인 교훈은 라이브러리의 성장으로 검색 카탈로그와 결과 이후에 제공되는 파일이 모두 변한다는 점이며, 이에 따라 지연이 발생할 수 있는 지점도 하나 이상이라는 것입니다.
각 단계에서 자산 수, 데이터베이스 크기, 벡터 인덱스 크기, 썸네일 사용 공간, 자주 사용하는 필터의 카디널리티를 기록하세요. 시간에 따른 추이를 확인하면 어떤 구조가 지연 시간과 함께 증가하는지 파악할 수 있으며, 원본 동영상 바이트 수의 무관한 증가를 데이터베이스 선택 시간의 원인으로 잘못 지목하는 일을 막을 수 있습니다.
벡터 인덱스는 메모리 적합성에 민감해집니다
시맨틱 검색은 모든 원본 이미지를 읽는 대신 표현 인덱스를 탐색합니다. 인덱스가 커지면 활성 그래프나 페이지가 더 이상 메모리에 상주하지 못할 수 있습니다. 그러면 무작위 캐시 누락으로 인해 메모리 속도로 처리되던 작업이 스토리지 읽기로 바뀌고, 평균 CPU 사용률이 보여 주는 것보다 테일 지연 시간이 더 급격히 증가합니다.
PostgreSQL 벡터 검색에 관한 엔지니어링 분석에 따르면, 활성 그래프가 메모리를 초과하면 무작위 접근 탐색이 캐시 누락에 민감해져 HNSW 성능이 저하될 수 있습니다. Immich 버전과 인덱스 구현은 달라질 수 있으므로, 이를 특정 구성에 대한 처방이 아니라 검증할 메커니즘으로 활용하세요.
재시작 직후, 한 번 워밍업한 후, 관련 없는 라이브러리 영역에 접근한 후에 동일한 시맨틱 쿼리를 측정하세요. 데이터베이스 읽기, 캐시 적중 동작, 장치 지연 시간을 비교합니다. 워밍업 후 성능이 크게 향상되지만 작업 집합이 넓어지면 그 효과가 사라진다면 메모리 적합성 가설을 뒷받침합니다. 쿼리가 일관되게 느리다면 다른 원인을 살펴봐야 합니다.
카디널리티에 따라 필터와 쿼리 계획이 바뀔 수 있습니다
날짜, 인물, 소유자, 앨범 및 기타 조건은 순위 산정 전이나 도중에 남는 후보 수를 바꿉니다. 데이터 분포가 변하면 동일한 필터라도 라이브러리에서 훨씬 더 큰 비율을 선택할 수 있습니다. 따라서 검색어 자체가 바뀌지 않았더라도 데이터베이스 통계와 쿼리 계획 선택이 중요해질 수 있습니다.
pgvector 제한 사항 검토에서는 벡터 검색과 메타데이터 필터를 결합하기 어려울 수 있으며, 벡터 작업이 트랜잭션 작업과 PostgreSQL의 CPU, 메모리, I/O를 공유한다고 설명합니다. 이 글은 일반적인 PostgreSQL 근거이므로 특정 Immich 쿼리 계획을 입증하기보다는 해당 메커니즘을 뒷받침하는 자료로 활용해야 합니다.
알려진 결과 집합을 사용해 필터 하나를 적용한 검색과 적용하지 않은 검색을 쌍으로 만드세요. 브라우저의 완료 시간뿐 아니라 서버 측 쿼리 시간과 데이터베이스 활동도 수집합니다. 선택 시간이 늘어나지만 반환된 썸네일은 빠르다면 미디어 스토리지가 아니라 계획, 통계, 인덱스 적합성, 경합에 집중하세요.
결과 선택과 결과 렌더링을 분리하세요
데이터베이스가 일치하는 자산 식별자를 이미 선택한 후에도 인터페이스가 느리게 느껴질 수 있습니다. 렌더링에는 썸네일 조회, 스토리지 읽기, 응답 전송, 클라이언트 디코딩이 여전히 필요합니다. 파생 파일 트리가 커지거나 원격 마운트를 사용하는 경우 이 두 번째 단계가 지연될 수 있지만, 실제 검색 쿼리는 정상일 수 있습니다.
대규모 가져오기 보고서에서는 수십만 개의 메타데이터 및 썸네일 작업이 대기 중인 동안 Immich 전반이 느려졌다고 설명합니다. 이는 백그라운드 압박이 겹친 사례를 보여 주는 것이지 보편적인 규모 제한을 입증하는 것은 아닙니다. 또한 성장 테스트를 대기열이 활성화된 상태와 대기열이 비워진 후 모두 실행해야 하는 이유를 보여 줍니다.
브라우저 타이밍이나 API 관찰을 사용해 결과 응답 완료 시점과 마지막으로 표시되는 썸네이カイル의 시점을 পৃথ পৃথ로 기록하세요. 대기열을 일시 중지한 상태와 활성화한 상태에서 알려진 검색을 반복합니다. 식별자 반환이 느리다면 데이터베이스와 인덱스 경로를 조사하고, 이미지만 느리다면 썸네일 스토리지, 네트워크 전송, 클라이언트 디코딩, 경쟁하는 백그라운드 I/O를 점검하세요.
기술 및 AI 허브
더 읽어보기

Immich 상태란 무엇이며, 어떤 부분을 영구 보존해야 하나요?
Immich 상태에는 원본, 데이터베이스 관계, ID, 구성 및 파생 데이터가 포함되므로, 각각 재구성 가능한지에 따라 영속화해야 합니다.

Immich는 로컬 및 원격 세션에서 인증을 어떻게 처리하나요?
Immich는 클라이언트 세션과 함께 서버 측 ID를 사용하므로, 프록시 헤더, 오리진, OIDC 리디렉션에 따라 로컬 환경과 원격 환경의 동작이 달라질 수 있습니다.

컨테이너를 다시 시작한 후 Immich가 다르게 작동하는 이유는 무엇인가요?
Immich를 다시 시작한 후 일시적인 캐시 손실은 예상되는 현상입니다. 지속적인 로그인, 데이터베이스 또는 미디어 변경이 발생한다면 종속성 또는 영속성 문제일 수 있습니다.

