Pemanfaatan IOPS merupakan metrik kritis untuk instans MongoDB. Saat mencapai atau mendekati 100%, tanggapan aplikasi melambat dan layanan bahkan bisa menjadi tidak tersedia. Panduan ini menjelaskan cara memeriksa pemanfaatan IOPS, penyebab umum pemanfaatan tinggi, serta strategi optimasi.
Informasi latar belakang
Penyedia database cloud biasanya menggunakan teknologi seperti cgroups (Control Groups) untuk menerapkan isolasi I/O dan batas IOPS (Input/Output Operations Per Second) per instans guna mencegah kontensi I/O pada host bersama. Oleh karena itu, setiap tipe instans memiliki kapasitas IOPS maksimum tertentu.
Catatan penting
Metrik Penggunaan IOPS dan pemanfaatan IOPS tidak tersedia untuk instans mandiri serta instans replica set atau kluster sharded yang menjalankan MongoDB 4.2 dengan cloud disk.
Untuk instans tersebut, halaman Monitoring Information di Konsol ApsaraDB for MongoDB selalu menampilkan nilai 0 untuk metrik IOPS Usage dan IOPS Usage. Nilai ini tidak mencerminkan data IOPS aktual.
Periksa pemanfaatan IOPS
Anda dapat memeriksa pemanfaatan IOPS menggunakan grafik pemantauan atau menjalankan perintah.
-
Masuk ke Konsol ApsaraDB for MongoDB. Di halaman Basic Information, pada bagian Specification Information, lihat IOPS maksimum untuk instans tersebut. Untuk batas IOPS berbagai tipe instans, lihat Instance types.
-
Masuk ke Konsol ApsaraDB for MongoDB. Di halaman Monitoring Information, periksa metrik IOPS Usage dan IOPS Usage untuk menentukan apakah instans mendekati batas IOPS-nya. Untuk informasi lebih lanjut mengenai metrik terkait IOPS, lihat Metrics.
Penyebab umum masalah I/O
I/O disk tinggi pada instans MongoDB umumnya disebabkan oleh faktor-faktor berikut:
-
Memori tidak mencukupi: Performa I/O sangat bergantung pada ukuran cache WiredTiger. Cache yang lebih besar dapat menyimpan lebih banyak data hot, sehingga mengurangi I/O disk dan menurunkan risiko bottleneck. Cache yang lebih kecil memaksa sistem melakukan flush Halaman kotor ke disk lebih sering, meningkatkan tekanan I/O.
-
Konfigurasi tidak tepat: Masalah konfigurasi yang dapat menyebabkan I/O tinggi antara lain flushing berkala pada journal atau log run-time, tingkat Write Concern yang tidak efisien, atau error moveChunk pada kluster sharded.
Strategi optimasi untuk masalah I/O
Untuk mengatasi masalah I/O pada instans ApsaraDB for MongoDB, pilih tipe instans yang sesuai, optimalkan indeks, dan sempurnakan pola penulisan aplikasi.
-
Pilih tipe instans yang sesuai
Memprediksi rasio ideal antara data hot dan ukuran cache sebelum penerapan sering kali sulit. Sebagai aturan umum, pilih tipe instans yang memenuhi kebutuhan bisnis Anda sekaligus menjaga pemanfaatan CPU harian puncak dan pemanfaatan IOPS di bawah 50%.
-
Optimalkan indeks
Pemindaian tabel penuh dan kueri dengan indeks yang tidak efisien mengonsumsi I/O signifikan. Misalnya, mengekspor seluruh koleksi dapat menyebabkan lonjakan I/O. Indeks berlebihan juga meningkatkan ukuran data di disk, sehingga mengurangi data hot yang dapat ditampung oleh cache WiredTiger. Setiap operasi tulis memerlukan I/O tambahan untuk memperbarui indeks, yang semakin menurunkan performa. Buat indeks yang sesuai dengan pola kueri Anda untuk mengatasi masalah ini.
-
Optimalkan arsitektur dan operasi aplikasi Anda
Untuk mencegah I/O disk menjadi bottleneck di tingkat aplikasi, pertimbangkan optimasi berikut:
-
Kendalikan thread tulis dan baca konkuren
MongoDB adalah aplikasi multithreaded. Jumlah tulis konkuren yang tinggi atau kueri kompleks dapat menyebabkan bottleneck I/O dan lag replikasi persisten pada node secondary. Jika volume tulis tinggi menyebabkan bottleneck I/O, pertimbangkan untuk meningkatkan ke kluster sharded guna menskalakan performa tulis secara linear dengan mendistribusikan data secara horizontal.
-
Hindari lonjakan tulis jika memungkinkan
Beberapa aplikasi melakukan penulisan periodik atau persistensi data massal, yang menyebabkan lonjakan IOPS. Jika instans saat ini tidak mampu menangani beban puncak tersebut, distribusikan operasi tulis secara lebih merata. Misalnya, tambahkan jeda acak kecil pada setiap operasi batch write.

-
Hindari menjalankan operasi maintenance selama jam sibuk
Operasi maintenance tertentu dapat berdampak signifikan terhadap performa dan menyebabkan lonjakan IOPS. Jadwalkan operasi tersebut selama jam sepi jika memungkinkan. Operasi ber-I/O tinggi mencakup modifikasi data massal (tulis, perbarui, dan hapus), pembuatan indeks, kompaksi koleksi, serta ekspor data massal.
-