dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #51
mongodb
LockingSEV2 · CİDDİ BOZULMA15-30 dakika / 15-30 minsclusterAdmin / dbAdminAnyDatabase / root

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.

İlişkili Metrik:M54
İlişkili Script:S89S81
#globalLock#currentOp#waitingForLock#write-contention

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.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

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

🟢 Salt Okunur1. Önceki örnekle delta/trend karşılaştırın:
javascript
const s = db.serverStatus();
({ queue: s.globalLock.currentQueue, active: s.globalLock.activeClients,
   locks: s.locks, writeConflicts: s.metrics?.operation?.writeConflicts });
🟢 Salt Okunur2. Bekleyen operasyonları bulun (S89):
javascript
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 } }
]);
🟢 Salt Okunur3. `currentOp` (S81) ve mongod logundan aynı zaman dilimindeki index build, toplu yazma, DDL, yavaş depolama ve replication apply etkinliğini ayırın. `globalLock.currentQueue` tek başına belirli bir kök bloklayıcıyı söylemez.

4. Müdahale / Response

🟡 Geri Alınabilir1. Yükün kaynağı belirliyse toplu işlemi yavaşlatın; batch boyutu ve eşzamanlılığı azaltın. Koleksiyon/doküman odaklı erişimi optimize edin.
🟡 Geri Alınabilir2. Disk gecikmesi veya WiredTiger eviction baskısı baskınsa `mongo-wiredtiger-cache-pressure` runbook'unu izleyin; sadece kilit ayarlarıyla uğraşmayın.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ3. Son çare, yalnızca sahibi doğrulanmış ve güvenle yeniden denenebilir operasyonu `db.killOp(opid)` ile kesin. Kilit tutan tüm oturumları veya sunucuyu körlemesine kapatmayın.

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.

Diğer MONGODB Runbook'ları