Monitoring — Atlas Performance Advisor, slow queries
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