MongoDB Cursor Zaman Aşımları: getMore ve Session Yaşam Döngüsü
Artan cursor timeout sayısını istemci tüketim hızı, oturum süresi ve getMore hatalarıyla eşleştirir; noCursorTimeout kullanımının sınırlarını açıklar.
Operasyonel Güvenlik ve Risk Uyarısı
Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.
1. Belirti / Symptom
M57 `db.serverStatus().metrics.cursor.timedOut` sayacı artar; istemci tarafında `CursorNotFound`, getMore hataları veya yarıda kesilmiş batch'ler görülebilir. Tek başına sıfırdan büyük kümülatif sayaç geçmiş olayı gösterir, **delta** izleyin.
2. Etki / Impact
Uzun süren arka plan taramaları veya raporlar yarıda kalır; tekrar denemeler ek yük ve yinelenen iş yaratabilir. Her cursor timeout doğrudan uygulama hatası değildir.
3. Teşhis / Diagnosis
const c = db.serverStatus().metrics.cursor;
({ open: c.open, timedOut: c.timedOut });Farklı zamanlardaki ölçümleri karşılaştırın; restart ile sayaç sıfırlanabilir.
db.getSiblingDB('admin').aggregate([
{ $currentOp: { allUsers: true, idleConnections: true } },
{ $match: { $or: [ { op: 'getmore' }, { 'command.getMore': { $exists: true } } ] } },
{ $project: { client: 1, appName: 1, ns: 1, secs_running: 1,
'command.getMore': 1, 'command.batchSize': 1 } }
]);4. Müdahale / Response
5. Doğrulama / Verification
M57'nin **birim zamandaki artışı** düşüyor, yeni getMore hataları yok, açık cursor sayısı baseline'a dönüyor, raporlar eksiksiz ve tekrar üretilebilir biçimde tamamlanıyor.
6. Geri Alma / Rollback
Uygulama batch/işleme değişikliklerini önceki sürüme döndürün. Kapanan cursor geri açılmaz; sonuçları en son işlenen kayıt/checkpoint'ten idempotent olarak yeniden üretin.