MongoDB Kilit Kuyruğu Büyüyor: Bekleyen Operasyonları Teşhis Etme
Global lock kuyruğunu, bekleyen operasyonları ve eşlik eden disk/bellek baskısını ayırır; problemli toplu işi güvenle azaltma ve tekrarı önleme yolunu gösterir.
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
`db.serverStatus().globalLock.currentQueue` büyüyor (M54); yazmalar ve bazen okumalar normalden yavaş. MongoDB'nin WiredTiger eşzamanlılık modelinde bu değer tek başına bloklayan tek bir oturum olduğu anlamına gelmez.
2. Etki / Impact
Gecikme ve zaman aşımları artar; yığılma bağlantı havuzunu ve bellek tüketimini yükseltebilir.
3. Teşhis / Diagnosis
const s = db.serverStatus();
({ queue: s.globalLock.currentQueue, active: s.globalLock.activeClients,
locks: s.locks, writeConflicts: s.metrics?.operation?.writeConflicts });db.getSiblingDB('admin').aggregate([
{ $currentOp: { allUsers: true, idleConnections: false } },
{ $match: { waitingForLock: true } },
{ $project: { opid: 1, op: 1, ns: 1, secs_running: 1,
waitingForLock: 1, lockStats: 1, command: 1 } },
{ $sort: { secs_running: -1 } }
]);4. Müdahale / Response
5. Doğrulama / Verification
M54 baz çizgiye dönüyor, `waitingForLock` azalıyor, uygulama p95/p99 gecikmeleri düşüyor ve yazma çakışma oranı artmıyor.
6. Geri Alma / Rollback
Toplu iş hızını kontrollü eski düzeye çıkarın; kuyruğun yeniden büyümediğini doğrulayın. Kesilen işlemin etkisi geri alınmaz; uygulama idempotent şekilde tekrar denemeli.