MongoDB Slow Queries and COLLSCAN: Diagnose Missing Indexes
Combines scanned-to-returned ratios, profiler data, and explain plans to find costly queries and roll out suitable indexes with limited risk.
Operational Safety & Risk Notice
This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.
1. Symptom & Signals
M55 baz çizginin üzerine çıkar, sorgu gecikmesi artar; profiler veya `explain` içinde `COLLSCAN` görülür. Küçük koleksiyonlarda COLLSCAN normal olabileceğinden metrik tek başına hata değildir.
2. Business & Technical Impact
CPU/disk taraması ve cache churn artar; aynı anda başka sorgular da yavaşlar.
3. Diagnosis & Root-Cause Analysis
db.getSiblingDB('uygulama').system.profile.find(
{ planSummary: 'COLLSCAN' },
{ ts: 1, ns: 1, millis: 1, docsExamined: 1, nreturned: 1, command: 1 }
).sort({ ts: -1 }).limit(20);Profiler kapalıysa üretimde varsayılan olarak açmayın; önce uygulama APM'i, slow query loglarını ve `currentOp` verisini kullanın. Profiler'ın etkinleştirilmesi performans ve depolama maliyeti doğurur; süreli onayla açın.
db.getSiblingDB('uygulama').orders
.find({ customerId: '<ornek-id>', status: 'OPEN' })
.sort({ createdAt: -1 }).limit(20)
.explain('executionStats');4. Remediation & Action Plan
db.getSiblingDB('uygulama').orders.createIndex(
{ customerId: 1, status: 1, createdAt: -1 },
{ name: 'customer_status_createdAt' }
);İndeks oluşturma üretimde kaynak tüketir; bakım penceresi ve replica sağlığını kontrol edin. 4.4/5.0/6.0/7.0 sürümlerinde davranış ve index-build ayrıntıları için kendi sürüm dokümanını doğrulayın.
5. Verification & Health Checks
`IXSCAN` veya hedefe uygun plan, `totalDocsExamined/nReturned` ve p95 gecikmesi iyileşiyor; M55 baz çizgiye iniyor, yazma ve replica gecikmeleri artmıyor.
6. Rollback & Contingency Plan
Yeni indeks regresyon yaratırsa uygulama sorgusunu/indeksi önceki sürüme çevirin; `dropIndex('customer_status_createdAt')` yeniden oluşturma süresi ve olası plan değişimi nedeniyle kontrollü yapılmalıdır. Yapılan index build otomatik geri alınmaz.