MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Hal-Hal Utama yang Harus Dipantau di MongoDB

Meningkatkan kinerja sistem, terutama untuk struktur komputer, memerlukan proses untuk mendapatkan gambaran kinerja yang baik. Proses ini umumnya disebut pemantauan. Pemantauan adalah bagian penting dari manajemen basis data dan informasi kinerja terperinci dari MongoDB Anda tidak hanya akan membantu Anda mengukur status fungsionalnya; tetapi juga memberikan petunjuk tentang anomali, yang berguna saat melakukan perawatan. Sangat penting untuk mengidentifikasi perilaku yang tidak biasa dan memperbaikinya sebelum berkembang menjadi kegagalan yang lebih serius.

Beberapa jenis kegagalan yang bisa muncul adalah...

  • Terlambat atau melambat
  • Ketidakcukupan sumber daya
  • Sistem tersendat

Pemantauan sering dipusatkan pada analisis metrik. Beberapa metrik utama yang ingin Anda pantau meliputi...

  • Kinerja database
  • Pemanfaatan sumber daya (penggunaan CPU, memori yang tersedia, dan penggunaan Jaringan)
  • Kemunduran yang muncul
  • Saturasi dan pembatasan sumber daya
  • Operasi throughput

Di blog ini kita akan membahas, secara rinci, metrik ini dan melihat alat yang tersedia dari MongoDB (seperti utilitas dan perintah.) Kita juga akan melihat alat perangkat lunak lain seperti Pandora, FMS Open Source, dan Robo 3T. Demi kesederhanaan, kami akan menggunakan perangkat lunak Robo 3T dalam artikel ini untuk mendemonstrasikan metrik.

Kinerja Basis Data

Hal pertama dan terpenting untuk memeriksa database adalah kinerjanya secara umum, misalnya apakah server aktif atau tidak. Jika Anda menjalankan perintah ini db.serverStatus() pada database di Robo 3T, Anda akan disajikan informasi ini yang menunjukkan status server Anda.

Set Replika

Kumpulan replika adalah sekelompok proses mongod yang memelihara kumpulan data yang sama. Jika Anda menggunakan kumpulan replika terutama dalam mode produksi, log operasi akan memberikan dasar untuk proses replikasi. Semua operasi tulis dilacak menggunakan node, yaitu node primer dan node sekunder, yang menyimpan koleksi ukuran terbatas. Pada node utama, operasi tulis diterapkan dan diproses. Namun, jika node utama gagal sebelum disalin ke log operasi, maka penulisan sekunder dibuat tetapi dalam hal ini data mungkin tidak direplikasi.

Metrik utama yang harus diperhatikan...

Keterlambatan Replikasi

Ini mendefinisikan seberapa jauh node sekunder berada di belakang node primer. Sebuah keadaan yang optimal membutuhkan kesenjangan menjadi semenit mungkin. Pada sistem operasi normal, lag ini diperkirakan 0. Jika kesenjangan terlalu lebar maka integritas data akan terganggu setelah node sekunder dipromosikan ke primer. Dalam hal ini Anda dapat mengatur ambang batas, misalnya 1 menit, dan jika melebihi, peringatan ditetapkan. Penyebab umum dari jeda replikasi yang luas termasuk...

  1. Pecahan yang mungkin memiliki kapasitas tulis yang tidak mencukupi yang sering dikaitkan dengan saturasi sumber daya.
  2. Node sekunder menyediakan data pada kecepatan yang lebih lambat daripada node utama.
  3. Node juga mungkin terhalang dalam beberapa cara untuk berkomunikasi, mungkin karena jaringan yang buruk.
  4. Operasi pada node utama juga bisa lebih lambat, sehingga menghalangi replikasi. Jika ini terjadi, Anda dapat menjalankan perintah berikut:
    1. db.getProfilingLevel():jika Anda mendapatkan nilai 0, maka operasi db Anda optimal.
      Jika nilainya 1, maka itu sesuai dengan operasi yang lambat yang akibatnya dapat disebabkan oleh kueri yang lambat.
    2. db.getProfilingStatus():dalam hal ini kita memeriksa nilai slowms, secara default adalah 100ms. Jika nilainya lebih besar dari ini, maka Anda mungkin mengalami operasi penulisan yang berat pada sumber daya utama atau sumber daya yang tidak memadai pada sumber daya sekunder. Untuk mengatasi ini, Anda dapat menskalakan sekunder sehingga memiliki sumber daya sebanyak yang utama.

kursor

Jika Anda membuat permintaan baca misalnya menemukan, Anda akan diberikan kursor yang merupakan penunjuk ke kumpulan data hasil. Jika Anda menjalankan perintah ini db.serverStatus() dan menavigasi ke objek metrik lalu kursor, Anda akan melihat ini…

Dalam kasus ini, properti cursor.timeOut diperbarui secara bertahap ke 9 karena ada 9 koneksi yang mati tanpa menutup kursor. Konsekuensinya adalah itu akan tetap terbuka di server dan karenanya menghabiskan memori, kecuali jika diambil oleh pengaturan MongoDB default. Peringatan untuk Anda harus mengidentifikasi kursor non-aktif dan mengambilnya untuk menghemat memori. Anda juga dapat menghindari kursor non-waktu habis karena mereka sering menahan sumber daya, sehingga memperlambat kinerja sistem internal. Ini dapat dicapai dengan menyetel nilai properti cursor.open.noTimeout ke nilai 0.

Penjurnalan

Mempertimbangkan WiredTiger Storage Engine, sebelum data direkam, data tersebut terlebih dahulu ditulis ke file disk. Ini disebut sebagai jurnal. Penjurnalan memastikan ketersediaan dan daya tahan data pada peristiwa kegagalan yang dapat dilakukan pemulihan.

Untuk tujuan pemulihan, kami sering menggunakan pos pemeriksaan (terutama untuk sistem penyimpanan WiredTiger) untuk memulihkan dari pos pemeriksaan terakhir. Namun, jika MongoDB mati secara tidak terduga, maka kami menggunakan teknik penjurnalan untuk memulihkan data apa pun yang diproses atau diberikan setelah pos pemeriksaan terakhir.

Penjurnalan tidak boleh dimatikan dalam kasus pertama, karena hanya membutuhkan waktu 60 detik untuk membuat pos pemeriksaan baru. Oleh karena itu jika terjadi kegagalan, MongoDB dapat memutar ulang jurnal untuk memulihkan data yang hilang dalam beberapa detik ini.

Penjurnalan umumnya mempersempit interval waktu dari saat data diterapkan ke memori hingga tahan lama di disk. Objek storage.journal memiliki properti yang menjelaskan frekuensi commit, yaitu commitIntervalMs yang sering disetel ke nilai 100ms untuk WiredTiger. Menyetelnya ke nilai yang lebih rendah akan meningkatkan frekuensi penulisan penulisan sehingga mengurangi kejadian kehilangan data.

Kinerja Penguncian

Ini dapat disebabkan oleh beberapa permintaan baca dan tulis dari banyak klien. Ketika ini terjadi, ada kebutuhan untuk menjaga konsistensi dan menghindari konflik penulisan. Untuk mencapai ini, MongoDB menggunakan penguncian multi-granularitas yang memungkinkan operasi penguncian terjadi pada tingkat yang berbeda, seperti tingkat global, basis data, atau pengumpulan.

Jika Anda memiliki pola desain skema yang buruk, maka Anda akan rentan terhadap kunci yang ditahan untuk jangka waktu yang lama. Hal ini sering dialami ketika membuat dua atau lebih operasi tulis yang berbeda ke satu dokumen dalam kumpulan yang sama, dengan konsekuensi saling memblokir. Untuk mesin penyimpanan WiredTiger kita dapat menggunakan sistem tiket di mana permintaan baca atau tulis berasal dari sesuatu seperti antrian atau utas.

Secara default, jumlah operasi baca dan tulis secara bersamaan ditentukan oleh parameter wiredTigerConcurrentWriteTransactions dan wiredTigerConcurrentReadTransactions yang keduanya disetel ke nilai 128.

Jika Anda menskalakan nilai ini terlalu tinggi maka Anda akan dibatasi oleh sumber daya CPU. Untuk meningkatkan operasi throughput, disarankan untuk menskalakan secara horizontal dengan menyediakan lebih banyak shard.

Beberapa Sembilan Menjadi DBA MongoDB - Membawa MongoDB ke ProduksiPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan MongoDBUnduh secara Gratis

Pemanfaatan Sumber Daya

Ini umumnya menggambarkan penggunaan sumber daya yang tersedia seperti kapasitas/kecepatan pemrosesan CPU dan RAM. Performa terutama untuk CPU dapat berubah secara drastis sesuai dengan beban lalu lintas yang tidak biasa. Hal-hal yang perlu diperiksa termasuk...

  1. Jumlah koneksi
  2. Penyimpanan
  3. Tembolok

Jumlah Koneksi

Jika jumlah koneksi lebih tinggi dari yang dapat ditangani oleh sistem basis data maka akan ada banyak antrian. Akibatnya, ini akan membanjiri kinerja database dan membuat pengaturan Anda berjalan lambat. Nomor ini dapat menyebabkan masalah driver atau bahkan komplikasi dengan aplikasi Anda.

Jika Anda memantau sejumlah sambungan selama beberapa periode dan kemudian melihat bahwa nilai tersebut telah mencapai puncaknya, selalu merupakan praktik yang baik untuk menyetel peringatan jika sambungan melebihi jumlah ini.

Jika jumlahnya terlalu tinggi maka Anda dapat meningkatkannya untuk memenuhi kenaikan ini. Untuk melakukan ini, Anda harus mengetahui jumlah koneksi yang tersedia dalam jangka waktu tertentu, jika tidak, jika koneksi yang tersedia tidak cukup, maka permintaan tidak akan ditangani secara tepat waktu.

Secara default MongoDB menyediakan dukungan hingga 1 juta koneksi. Dengan pemantauan Anda, selalu pastikan koneksi saat ini tidak pernah terlalu dekat dengan nilai ini. Anda dapat memeriksa nilainya di objek koneksi.

Penyimpanan

Setiap baris dan catatan data di MongoDB disebut sebagai dokumen. Data dokumen dalam format BSON. Pada database tertentu, jika Anda menjalankan perintah db.stats(), Anda akan disajikan dengan data ini.

  • StorageSize mendefinisikan ukuran semua perluasan data dalam database.
  • IndexSize menguraikan ukuran semua indeks yang dibuat dalam database tersebut.
  • dataSize adalah ukuran total ruang yang diambil oleh dokumen dalam database.

Terkadang Anda dapat melihat perubahan dalam memori, terutama jika banyak data telah dihapus. Dalam hal ini, Anda harus menyiapkan peringatan untuk memastikan itu bukan karena aktivitas jahat.

Terkadang, ukuran penyimpanan keseluruhan mungkin meningkat sementara grafik lalu lintas database konstan dan dalam hal ini, Anda harus memeriksa aplikasi atau struktur database untuk menghindari duplikat jika tidak diperlukan.

Seperti memori umum komputer, MongoDB juga memiliki cache di mana data aktif disimpan sementara. Namun, suatu operasi dapat meminta data yang tidak ada dalam memori aktif ini, sehingga membuat permintaan dari penyimpanan disk utama. Permintaan atau situasi ini disebut sebagai kesalahan halaman. Permintaan kesalahan halaman datang dengan batasan waktu yang lebih lama untuk dieksekusi, dan dapat merugikan jika sering terjadi. Untuk menghindari skenario ini, pastikan ukuran RAM Anda selalu cukup untuk memenuhi kumpulan data yang sedang Anda kerjakan. Anda juga harus memastikan bahwa Anda tidak memiliki skema redundansi atau indeks yang tidak perlu.

Tembolok

Cache adalah item penyimpanan data temporal untuk data yang sering diakses. Di WiredTiger, cache sistem file dan cache mesin penyimpanan sering digunakan. Selalu pastikan bahwa perangkat kerja Anda tidak menonjol melebihi cache yang tersedia, jika tidak, kesalahan halaman akan bertambah jumlahnya yang menyebabkan beberapa masalah kinerja.

Pada titik tertentu Anda mungkin memutuskan untuk mengubah operasi yang sering Anda lakukan, tetapi perubahan tersebut terkadang tidak tercermin dalam cache. Data yang tidak dimodifikasi ini disebut sebagai “Data Kotor.” Itu ada karena belum di-flush ke disk. Kemacetan akan terjadi jika jumlah "Data Kotor" tumbuh ke beberapa nilai rata-rata yang ditentukan oleh penulisan lambat ke disk. Menambahkan lebih banyak pecahan akan membantu mengurangi jumlah ini.

Utilisasi CPU

Pengindeksan yang tidak tepat, struktur skema yang buruk, dan kueri yang dirancang tidak ramah akan membutuhkan lebih banyak perhatian CPU sehingga jelas akan meningkatkan pemanfaatannya.

Operasi Throughput

Untuk sebagian besar mendapatkan informasi yang cukup tentang operasi ini dapat memungkinkan seseorang untuk menghindari kemunduran konsekuensial seperti kesalahan, saturasi sumber daya, dan komplikasi fungsional.

Anda harus selalu mencatat jumlah operasi baca dan tulis ke database, yaitu, tampilan aktivitas cluster tingkat tinggi. Mengetahui jumlah operasi yang dihasilkan untuk permintaan akan memungkinkan Anda menghitung beban yang diharapkan ditangani oleh database. Beban kemudian dapat ditangani dengan meningkatkan skala database Anda atau mengurangi skalanya; tergantung pada jenis sumber daya yang Anda miliki. Ini memungkinkan Anda untuk dengan mudah mengukur rasio hasil di mana permintaan terakumulasi ke tingkat di mana mereka sedang diproses. Selanjutnya, Anda dapat mengoptimalkan kueri dengan tepat untuk meningkatkan kinerja.

Untuk memeriksa jumlah operasi baca dan tulis, jalankan perintah ini db.serverStatus(), lalu navigasikan ke objek locks.global, nilai untuk properti r mewakili jumlah permintaan baca dan jumlah penulisan w.

Lebih sering operasi baca lebih dari operasi tulis. Metrik klien aktif dilaporkan di bawah globalLock.

Saturasi dan Batasan Sumber Daya

Terkadang database mungkin gagal untuk mengikuti kecepatan penulisan dan pembacaan, seperti yang digambarkan oleh peningkatan jumlah permintaan yang antri. Dalam hal ini, Anda harus meningkatkan basis data Anda dengan menyediakan lebih banyak pecahan agar MongoDB dapat menangani permintaan dengan cukup cepat.

Kemunduran yang Muncul

File log MongoDB selalu memberikan gambaran umum tentang pengecualian yang dikembalikan. Hasil ini akan memberi Anda petunjuk tentang kemungkinan penyebab kesalahan. Jika Anda menjalankan perintah, db.serverStatus(), beberapa peringatan kesalahan yang akan Anda perhatikan meliputi:

  1. Penegasan reguler:ini adalah akibat dari kegagalan operasi. Misalnya dalam skema jika nilai string diberikan ke bidang bilangan bulat sehingga mengakibatkan kegagalan membaca dokumen BSON.
  2. Peringatan menegaskan:ini sering merupakan peringatan tentang beberapa masalah tetapi tidak berdampak banyak pada operasinya. Misalnya saat Anda meningkatkan versi MongoDB, Anda mungkin diperingatkan menggunakan fungsi yang tidak digunakan lagi.
  3. Msg menegaskan:mereka adalah akibat dari pengecualian server internal seperti jaringan lambat atau jika server tidak aktif.
  4. User menegaskan:seperti pernyataan biasa, kesalahan ini muncul saat menjalankan perintah tetapi sering dikembalikan ke klien. Misalnya jika ada kunci duplikat, ruang disk yang tidak memadai atau tidak ada akses untuk menulis ke dalam database. Anda akan memilih untuk memeriksa aplikasi Anda untuk memperbaiki kesalahan ini.

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kueri array bersarang MongoDB

  2. MongoDB Hubungan Satu ke Banyak

  3. Bagaimana cara mendapatkan semua model luwak?

  4. Mode Impor mongoimport

  5. Mongoose - RangeError:Ukuran Tumpukan Panggilan Maksimum Melebihi