Monitoring — Atlas Performance Advisor, slow queries

~15 daq · MongoDB · Atlas va Deployment

Muammodan boshlaylik

Dushanba kuni sayt sekinlashdi. API javoblari 200 ms dan 3 soniyaga chiqdi. Qaysi so'rov aybdor? Yangi funksiya qo'shilganmi? Ma'lumot ko'payib, index yetmay qoldimi? Disk to'lyaptimi? RAM yetmayaptimi?

Taxmin bilan index qo'shish — vaqtni behuda sarflash. Ma'lumotlar kerak.


Nimani kuzatish kerak

Metrika Nima uchun
Operation execution time So'rovlar o'rtacha qancha vaqt oladi
Opcounters Soniyada nechta o'qish/yozish
Query Targeting Ko'rilgan documentlar / qaytarilganlar nisbati — index sifati
CPU, RAM, Disk IOPS Server resurslari
Disk hajmi To'lib qolishdan oldin bilish
Connections Ulanishlar soni — pool muammolari
Replication lag Secondary lar qanchalik orqada

Hayotiy o'xshatma

Avtomobil asboblar paneli. Tezlik, yoqilg'i, dvigatel harorati, moy bosimi — hammasi ko'z oldingizda. Qizil chiroq yonsa — dvigatel buzilishidan oldin to'xtaysiz. Paneli yo'q mashinada esa muammoni faqat yo'lda to'xtab qolganda bilasiz.


Atlas Metrics

Cluster → Metrics — barcha asosiy grafiklar. Muhim belgilar:

  • Query Targeting 1000 dan yuqori → ko'p so'rovlar COLLSCAN yoki yomon index ishlatyapti
  • CPU doimiy 80% dan yuqori → og'ir so'rovlar yoki cluster kichik
  • Disk IOPS chegarada → ma'lumot RAM ga sig'mayapti, diskdan o'qilyapti
  • Connections tez o'sib bormoqda → ilova ulanishlarni yopmayapti yoki har so'rovda yangi ulanish (38-dars)

Query Profiler

Cluster → Query Insights → Query Profiler — sekin so'rovlar (standart holatda 100 ms dan oshganlar) grafigi:

  • Har bir nuqta — sekin so'rov
  • Bossangiz: to'liq so'rov, collection, davomiyligi, ko'rilgan/qaytarilgan documentlar, ishlatilgan index (yoki COLLSCAN)

Shu yerdan topilgan so'rovni explain("executionStats") (28-dars) bilan batafsil tahlil qiling.


Performance Advisor

Cluster → Performance Advisor — Atlas sekin so'rovlar logini tahlil qilib, index tavsiyalarini beradi:

Create Index:  { holat: 1, createdAt: -1 }   on dokon.buyurtmalar
Impact:        Average query time 1,840 ms → 12 ms
Queries:       4,210 / soat
  • Tavsiya — qaysi so'rovlarni tezlashtirishi va qanchalik
  • Bir tugma bilan index yaratish (rolling build — to'xtashsiz)
  • Drop Index tavsiyalari — ishlatilmaydigan va ortiqcha index lar

[!WARNING] Performance Advisor tavsiyalarini ko'r-ko'rona qabul qilmang. U har bir so'rovni alohida ko'radi va ESR qoidasiga (29-dars) mos, lekin bir-biriga juda o'xshash bir nechta index taklif qilishi mumkin. Tavsiyalarni birlashtirib, mavjud index lar bilan solishtiring — har bir index yozishni sekinlashtiradi.


Schema Advisor

Performance Advisor dagi Schema Anti-Patterns bo'limi schema dagi muammolarni ko'rsatadi:

Muammo Ma'nosi
Unbounded arrays Cheksiz o'sayotgan massivlar (postlar: [ObjectId] — 44-dars)
Bloated documents Juda katta documentlar
Excessive $lookup Ko'p JOIN — ma'lumot noto'g'ri bo'lingan bo'lishi mumkin
Too many indexes Collection da juda ko'p index
Unnecessary indexes Ishlatilmaydigan index lar

Alerts — ogohlantirishlar

Project → Alerts → Alert Settings:

Ogohlantirish Chegara (misol)
Disk usage > 80%
CPU > 85%, 10 daqiqa
Query Targeting > 1000
Replication lag > 60 s
Connections > 80% limitdan
Primary elected Har safar (failover bo'ldi)

Kanallar: email, SMS, Slack, PagerDuty, webhook (masalan, Telegram bot ga).


O'z serveringizda

Atlas siz ham asosiy vositalar mavjud:

// sekin so'rovlarni yozish
db.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find().sort({ millis: -1 }).limit(5)

// hozir bajarilayotgan uzoq so'rovlar
db.currentOp({ secs_running: { $gte: 5 } })

// server holati
db.serverStatus().connections
db.serverStatus().opcounters

// collection statistikasi
db.buyurtmalar.stats()
db.buyurtmalar.aggregate([{ $indexStats: {} }])
mongostat --uri="$MONGODB_URI"   # har soniyada operatsiyalar
mongotop --uri="$MONGODB_URI"    # qaysi collection ga qancha vaqt

Uzoq muddatli monitoring uchun — Prometheus mongodb_exporter + Grafana (Express kursi, 69-dars).

[!TIP] Ilova tomonida ham o'lchang: Mongoose da sekin so'rovlarni log qiluvchi middleware (46-dars) yoki mongoose.set('debug', ...) development da barcha so'rovlarni ko'rsatadi. Sekin API endpoint → qaysi so'rov → explain — eng tez yo'l.


Tez-tez uchraydigan xatolar

Faqat muammo bo'lganda qarash

Normal holat qanday ekanini bilmasangiz, g'ayritabiiy holatni ham tanimaysiz. Grafiklarni vaqti-vaqti bilan ko'rib turing.

Ogohlantirishlar juda ko'p

Har bir CPU sakrashiga SMS — tez orada hech kim ularni o'qimaydi. Faqat harakat talab qiladiganlar.

Profiler ni 2-darajada qoldirish

Barcha so'rovlarni yozish performance ni pasaytiradi (29-dars).


Xulosa

  • Kuzatish: bajarilish vaqti, opcounters, Query Targeting, CPU/RAM/disk, ulanishlar, replication lag
  • Query Profiler — sekin so'rovlar va ularning tafsilotlari
  • Performance Advisor — index tavsiyalari; ko'r-ko'rona emas, birlashtirib qabul qiling
  • Schema Anti-Patterns — cheksiz massivlar, katta documentlar, ortiqcha index lar
  • Alerts — disk, CPU, Query Targeting, failover
  • O'z serverda: profiler, currentOp, serverStatus, mongostat, mongotop

Keyingi dars: 56-dars — Pagination — offset va cursor based, Mongoose bilan