All Products
Search
Document Center

ApsaraDB for MongoDB:Pemecahan masalah pemanfaatan CPU tinggi pada instans ApsaraDB for MongoDB

Last Updated:Sep 03, 2026

Pemanfaatan CPU tinggi pada instans ApsaraDB for MongoDB—terkadang mendekati 100%—dapat memperlambat operasi baca/tulis dan mengganggu operasi bisnis. Ikuti langkah-langkah diagnostik berikut untuk mengidentifikasi dan menyelesaikan akar permasalahan.

Periksa operasi yang sedang berjalan

Hubungkan ke instans menggunakan mongo shell. Prosedur koneksi bervariasi tergantung arsitektur instans:

Jalankan db.currentOp() untuk mencantumkan semua operasi yang sedang berjalan pada instans:

db.currentOp()

Contoh output:

{
    "desc" : "conn632530",
    "threadId" : "140298196924160",
    "connectionId" : 632530,
    "client" : "11.xxx.xxx.236:57052",
    "active" : true,
    "opid" : 1008837885,
    "secs_running" : 0,
    "microsecs_running" : NumberLong(70),
    "op" : "update",
    "ns" : "mygame.players",
    "query" : {
        "uid" : NumberLong(31577677)
    },
    "numYields" : 0,
    "locks" : {
        "Global" : "w",
        "Database" : "w",
        "Collection" : "w"
    },
    ....
}

Fokus pada bidang-bidang berikut untuk mengidentifikasi operasi bermasalah:

Field

Description

When to act

client

Klien yang mengirim permintaan

Gunakan ini untuk melacak kembali sumber permintaan

opid

ID operasi unik

Jalankan db.killOp(opid) untuk menghentikan operasi jika diperlukan

secs_running

Lama waktu operasi berjalan, dalam detik

Investigasi operasi dengan nilai yang tidak terduga besar

microsecs_running

Lama waktu operasi berjalan, dalam mikrodetik

Investigasi operasi dengan nilai yang tidak terduga besar

ns

Namespace (koleksi) yang dipindai

Cocokkan dengan log kueri lambat untuk menemukan koleksi yang sering diakses

op

Jenis operasi: query, insert, update, atau delete

—

locks

Informasi lock untuk operasi

Lihat FAQ: Concurrency

Untuk informasi lebih lanjut tentang db.currentOp(), lihat db.currentOp().

Penyebab umum lonjakan CPU adalah operasi O&M—seperti pemindaian koleksi penuh—yang berjalan bersamaan dengan workload reguler Anda. Jika db.currentOp() menunjukkan operasi dengan nilai secs_running besar yang tidak Anda harapkan, hentikan operasi tersebut:

db.killOp(<opid>)

Ganti <opid> dengan nilai dari field opid pada output db.currentOp(). Untuk informasi lebih lanjut, lihat db.killOp().

Analisis log kueri lambat

Jika pemanfaatan CPU meningkat segera setelah aplikasi Anda dimulai dan tetap tinggi, tetapi db.currentOp() tidak menunjukkan operasi bermasalah yang jelas, penyebabnya kemungkinan besar adalah pola kueri lambat yang terakumulasi seiring waktu.

Lihat log kueri lambat di Konsol ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Lihat log kueri lambat.

Contoh entri log kueri lambat terlihat seperti berikut:

{
  "atype": "slowOp",
  "param": {
    "op": "query",
    "ns": "abbott_analysis.uaidScanInfo",
    "query": {
      "find": "uaidScanInfo",
      "filter": {
        "dateType": 2,
        "companyCode": "GMP"
      },
      "ntoreturn": -1,
      "sort": {
        "scanDateTime": -1
      }
    },
    "keysExamined": 0,
    "docsExamined": 2181021,
    "hasSortStage": true,
    "cursorExhausted": true,
    "numYield": 17059,
    "locks": { ... },
    "nreturned": 0,
    "responseLength": 20,
    "millis": 4878,
    "planSummary": "COLLSCAN"
  },
  "result": "OK"
}

Perhatikan pola-pola berikut dalam log kueri lambat:

Pemindaian koleksi penuh (COLLSCAN, docsExamined)

planSummary: COLLSCAN berarti kueri memindai seluruh koleksi tanpa menggunakan indeks. Field docsExamined menunjukkan jumlah dokumen yang dipindai—semakin tinggi angka ini, semakin banyak CPU yang dikonsumsi oleh kueri tersebut.

Buat indeks pada field yang dikueri untuk memperbaiki hal ini:

db.<collection>.createIndex({ <field>: 1 })

Indeks tidak efisien (IXSCAN, keysExamined)

Saat kueri menggunakan indeks, planSummary menunjukkan IXSCAN. Field keysExamined menunjukkan jumlah kunci indeks yang dipindai. Semakin besar nilainya, semakin banyak resource CPU yang digunakan oleh permintaan tersebut.

Contoh selektivitas indeks

Pertimbangkan koleksi di mana field x hanya memiliki dua nilai yang mungkin (1 atau 2), sedangkan y memiliki rentang nilai yang jauh lebih luas (1 hingga 100000). Untuk kueri { x: 1, y: 2 }:

{ x: 1, y: 1 }
{ x: 1, y: 2 }
...
{ x: 1, y: 100000 }
{ x: 2, y: 1 }
...

Index

Selectivity

Reason

db.createIndex({ x: 1 })

Poor

Setengah koleksi memiliki nilai x yang sama

db.createIndex({ x: 1, y: 1 })

Poor

Field awal x masih memiliki selektivitas rendah

db.createIndex({ y: 1 })

Good

y memiliki rentang nilai luas — hanya sedikit dokumen yang memiliki nilai yang sama

db.createIndex({ y: 1, x: 1 })

Good

Field awal y langsung mengeliminasi sebagian besar dokumen

Indeks field dengan selektivitas tinggi terlebih dahulu. Untuk informasi lebih lanjut, lihat Compound indexes.

Indeks berlebihan memengaruhi kinerja penulisan dan pembaruan. Jika aplikasi Anda melibatkan banyak operasi tulis dan Anda menggunakan indeks, kinerja aplikasi dapat terganggu. Audit dan hapus indeks yang tidak digunakan jika kinerja tulis juga menurun.

Pengurutan di memori (SORT, hasSortStage)

hasSortStage: true berarti instans mengurutkan hasil kueri di memori karena tidak ada indeks yang memenuhi urutan pengurutan. Pengurutan di memori pada set hasil besar mengonsumsi CPU secara signifikan.

Jika log kueri lambat mengandung kata kunci SORT, buat indeks pada field yang digunakan dalam klausa pengurutan:

db.<collection>.createIndex({ <sort-field>: 1 })

Operasi lain yang menyebabkan CPU tinggi

Pembuatan indeks dan pipeline aggregation (yang menggabungkan traversal, filtering, pembaruan, dan pengurutan) juga dapat menyebabkan CPU tinggi. Terapkan pendekatan diagnostik yang sama: periksa docsExamined, keysExamined, hasSortStage, dan planSummary dalam log kueri lambat.

Evaluasi kapasitas layanan

Jika semua kueri sudah menggunakan indeks yang sesuai namun pemanfaatan CPU tetap tinggi, instans mungkin telah mencapai batas kapasitasnya.

  1. Tinjau data pemantauan untuk memahami pola penggunaan resource Anda. Untuk informasi lebih lanjut, lihat Lihat data pemantauan dan Pemantauan node (sebelumnya pemantauan dasar).

  2. Uji database MongoDB Anda untuk menentukan apakah instans saat ini memberikan kinerja dan kapasitas layanan yang dibutuhkan untuk workload Anda.

Jika Anda perlu melakukan upgrade instans, lihat Ubah konfigurasi instans atau Ubah jumlah node dalam instans set replika.

Referensi cepat

Command

Purpose

db.currentOp()

Cantumkan semua operasi yang sedang berjalan pada instans

db.killOp(<opid>)

Hentikan operasi tertentu berdasarkan ID operasinya

Lihat log kueri lambat di Konsol

Identifikasi kueri lambat tanpa perlu menghubungkan ke instans