1. Container 상태
| container | status |
|---|---|
| ai-real-estate-backend-108 | healthy 5m |
| ai-real-estate-worker-108 | healthy 5m |
| ai-real-estate-postgres-1 | healthy 2d |
| ai-real-estate-qdrant-1 | healthy 6d |
| ai-real-estate-redis-1 / cache / stack | healthy 6d |
ai-real-estate · alpha
properties_oai3l_3072_v1 의 329 points 중 8건 미인덱싱 — optimizer lag, 검색은 brute-force 폴백.| container | status |
|---|---|
| ai-real-estate-backend-108 | healthy 5m |
| ai-real-estate-worker-108 | healthy 5m |
| ai-real-estate-postgres-1 | healthy 2d |
| ai-real-estate-qdrant-1 | healthy 6d |
| ai-real-estate-redis-1 / cache / stack | healthy 6d |
properties| status | count |
|---|---|
| published | 160 |
| private | 6 (deleted 1) |
| live total | 165 |
인덱싱 상태 컬럼(embedded_at, vector_indexed) 없음 — DB 자체로 lag 측정 불가.
최근 매물 5건은 private (2026-05-21) — chat_v2 백필 대상 아님.
properties_oai3l_3072_v1| points_count | 329 |
|---|---|
| indexed_vectors_count | 321 8 미인덱싱 |
| status | green |
| vector | 3072 / cosine |
| segments | 4 |
| payload schema | deposit, rent, room_count, property_type, address(text) |
미인덱싱 8건은 optimizer lag (indexing_threshold=500 미만이라 HNSW 미빌드). 검색은 brute-force 폴백 — 기능 영향 없으나 latency 영향.
329 vs PG live 165 차이(164건)는 archived/private/history 포함으로 추정 (payload id 샘플 3건 모두 PG 존재 확인 — orphan 아님).
| used_memory | 2.12M (peak 2.86M) |
|---|---|
| connected_clients | 50 |
| blocked_clients | 0 |
| maxmemory_policy | noeviction |
| AOF | off |
| RDB | 5697 changes 미저장 |
| 슬로우 로그 | 10건 모두 dramatiq EVALSHA fetch (10–17ms) — 정상 |
chat_v2_indexing.XQ.msgs | HLEN = 3 (DLQ 적체) |
| # | retry | 에러 | 위치 |
|---|---|---|---|
| 1 | 2 | AttributeError: SqlAlchemyPropertyRepository.find_all_by_status |
chat_v2_indexing.py:54 |
| 2 | 2 | RuntimeError: Future attached to a different loop |
chat_v2_indexing.py:68 |
| 3 | 1·2 | psycopg.OperationalError: 127.0.0.1:30432 refused |
pg_llm_cache.py:46 |
| 결함 | 원인 | 현재 상태 |
|---|---|---|
A. find_all_by_status 메서드 부재 |
repo 인터페이스 미정의, except 폴백 의존 | 존재 코드 미수정 |
B. asyncpg engine 모듈 싱글톤 + 매 actor 호출 asyncio.run() |
engine 이 첫 호출 loop 에 바인딩됨 — 두 번째부터 깨짐 | 존재 |
C. pg_llm_cache DSN 127.0.0.1:30432 |
1주 전 잘못된 DSN, composition.py:97에서 settings.database_url 사용으로 이미 수정 |
수정됨, DLQ 메시지만 미처리 |
| 우선 | 작업 |
|---|---|
| P1 | DLQ 메시지 3건 수동 drain — HDEL dramatiq:chat_v2_indexing.XQ.msgs <id> |
| P1 | SqlAlchemyPropertyRepository.find_all_by_status 추가 또는 폴백 경로 검증 |
| P2 | _get_session_factory 를 actor 호출마다 재생성 — Dramatiq actor 표준 패턴 |
| P2 | PG properties ↔ Qdrant ID set-diff — 누락 매물 식별 후 reindex_chat_v2_property 개별 재색인 |
| P3 | Qdrant indexing_threshold 100 으로 낮추거나 snapshot flush |
| P3 | properties 테이블에 indexed_at timestamptz 추가 — DB 자체로 lag 추적 |