Pemanfaatan disk merupakan metrik utama untuk memantau instans ApsaraDB for MongoDB. Jika pemanfaatan disk mencapai 100%, instans menjadi tidak tersedia. Topik ini menjelaskan cara melihat penggunaan disk di ApsaraDB for MongoDB dan menyelesaikan masalah pemanfaatan disk tinggi.
Informasi latar belakang
Jika pemanfaatan disk melebihi 80%, Anda dapat mengurangi penggunaan disk atau memperluas ruang penyimpanan untuk mencegahnya mencapai 100%.
Lihat penggunaan penyimpanan
Instans set replika
Anda dapat menggunakan salah satu metode berikut untuk melihat penggunaan disk pada instans set replika di Konsol ApsaraDB for MongoDB:
Ikhtisar
Di bagian Specification Information halaman Basic Information, lihat informasi Disk Space dan Utilization.
Analisis Detail Menggunakan Grafik Pemantauan
Di panel navigasi sisi kiri, klik Monitoring Data. Pada halaman yang muncul, tentukan node dan lihat nilai Disk Usage (Bytes) dan Disk Usage (%).
Instans set replika terdiri dari node utama yang mendukung operasi baca dan tulis, satu atau lebih node sekunder dengan ketersediaan tinggi, node tersembunyi, dan satu atau lebih node baca-saja opsional. Disk digunakan oleh data dan log, serta kapasitas penyimpanan disk dapat dihitung menggunakan rumus berikut: ins_size = data_size + log_size, di mana:
data_size: ruang disk yang digunakan oleh file data seperti file data fisik yang dimulai dengan collection, file indeks fisik yang dimulai dengan index, dan beberapa file metadata fisik seperti WiredTiger.wt. File data tidak termasuk data dalam database lokal.
log_size: ukuran fisik dari database lokal, log operasi MongoDB, dan beberapa log audit.
Analisis Detail
Anda dapat menggunakan metode berikut untuk melihat detail penggunaan disk:
Jalankan perintah
db.stats()dandb.$collection_name.stats()yang disediakan oleh ApsaraDB for MongoDB.Untuk informasi lebih lanjut, lihat referensi berikut:
Pilih dan lihat detail di halaman Analisis Penyimpanan.
Di halaman Storage Analysis, Anda dapat melihat item berikut:
Ikhtisar penggunaan disk dari database dan koleksi, peningkatan rata-rata harian, dan prediksi hari tersedia penyimpanan.
Penggunaan disk dari database dan koleksi abnormal.
Detail penggunaan disk dari koleksi bisnis tertentu, termasuk ruang disk yang digunakan oleh file indeks dan file data, rasio kompresi, dan ukuran baris rata-rata.
Instans kluster sharding
Anda dapat menggunakan salah satu metode berikut untuk melihat penggunaan disk pada instans kluster sharding di Konsol ApsaraDB for MongoDB:
Analisis Detail Menggunakan Grafik Pemantauan
Di halaman Monitoring Data, pilih node dan lihat nilai Disk Usage (Bytes) dan Disk Usage (%).
Analisis Detail dengan Menjalankan Perintah
Jalankan perintah
db.stats()dandb.$collection_name.stats()yang disediakan oleh ApsaraDB for MongoDB untuk menganalisis penggunaan disk di setiap node.
Memecahkan masalah volume data besar yang disebabkan oleh perintah compact
Dampak pada instans selama compact
Durasi eksekusi perintah compact berkaitan dengan volume data dari koleksi. Jika volume data besar, perintah compact akan berjalan lama. Oleh karena itu, kami menyarankan Anda menjalankan perintah compact selama jam-jam sepi.
Operasi compact
Jalankan perintah db.runCommand({compact:"collectionName"}) pada node sekunder dan kemudian lakukan switchover utama/sekunder untuk meminimalkan dampak pada bisnis Anda. Parameter collectionName menunjukkan nama koleksi. Ganti nilai parameter dengan nama koleksi aktual Anda.
Untuk informasi lebih lanjut tentang perintah compact, lihat Defragmentasi Disk Instans untuk Meningkatkan Pemanfaatan Disk.
Memecahkan masalah penggunaan ruang tinggi yang disebabkan oleh sejumlah besar data log
Kesenjangan antara ruang yang digunakan oleh node utama dan sekunder besar karena banyaknya log jurnal
Pada versi sebelum MongoDB 4.0, jika ukuran file terbuka di host mencapai batas atas yang ditentukan, thread cleaner di server log MongoDB dihentikan. Akibatnya, log jurnal terus bertambah tanpa batas. Jika konten serupa dengan blok kode berikut muncul dalam log runtime instans, Anda dapat sementara memecahkan masalah ini dengan meningkatkan versi MongoDB ke 4.0 atau lebih baru atau dengan me-restart proses mongod. Untuk informasi lebih lanjut, lihat thread log-server keluar diam-diam saat kesalahan terjadi sementara proses mongodb masih berjalan.
2019-08-25T09:45:16.867+0800 I NETWORK [thread1] Listener: accept() returns -1 Terlalu banyak file terbuka di sistem
2019-08-25T09:45:17.000+0800 I - [ftdc] Assertion: 13538:tidak bisa membuka [/proc/55692/stat] Terlalu banyak file terbuka di sistem src/mongo/util/processinfo_linux.cpp 74
2019-08-25T09:45:17.002+0800 W FTDC [ftdc] Exception tak tertangkap di 'Location13538: tidak bisa membuka [/proc/55692/stat] Terlalu banyak file terbuka di sistem' dalam subsistem pengumpulan data diagnostik penuh waktu. Mematikan subsistem pengumpulan data diagnostik penuh waktu.Penggunaan ruang log node sekunder dapat terus meningkat karena latensi pada node sekunder dan pencadangan tambahan
Jika terjadi latensi selama sinkronisasi antara node utama dan sekunder, ruang yang tersedia untuk oplogs tidak dibatasi oleh ukuran koleksi tetap yang didefinisikan dalam file konfigurasi. Secara teori, ruang yang tersedia dapat mencapai 20% dari ruang disk yang Anda ajukan. Namun, setelah latensi pada node sekunder berkurang ke tingkat normal, ruang fisik yang digunakan oleh oplogs tidak dilepaskan.
Saat Anda melakukan cadangan fisik instans pada node tersembunyi, sejumlah besar checkpoint menghasilkan volume data besar dan menempati ruang log besar.
Untuk memecahkan masalah dalam skenario sebelumnya, lakukan operasi compact pada oplogs, seperti yang ditunjukkan dalam kode berikut.
Semua operasi tulis diblokir selama operasi compact.
db.grantRolesToUser("root", [{db: "local", role: "dbAdmin"}])
use local
db.runCommand({ compact: "oplog.rs", force: true })Memecahkan masalah distribusi data tidak merata yang disebabkan oleh sharding yang tidak masuk akal
Data didistribusikan secara tidak merata karena pemilihan jenis kunci sharding yang tidak masuk akal
Dalam instans kluster sharding, penting untuk memilih jenis kunci sharding. Dalam kebanyakan kasus, sharding hash atau rentang digunakan. Sharding hash lebih cocok daripada sharding rentang untuk penyeimbangan beban disk. Sharding hash menggunakan fungsi hash bawaan untuk mendistribusikan data secara merata di antara shard berdasarkan berbagai nilai kunci. Sharding rentang mendistribusikan data di antara shard berdasarkan rentang nilai kunci, yang menghasilkan distribusi data yang tidak merata. Data didistribusikan pada chunk yang padat. Ini dapat menyebabkan beban kerja I/O tinggi dan distribusi data tidak merata jangka pendek di disk tempat chunk tersebut berada.
Untuk informasi tentang jenis kunci sharding, lihat sharding-shard-key, hashed-sharding, dan ranged-sharding.
Data didistribusikan secara tidak merata karena pemilihan bidang kunci sharding yang tidak masuk akal
Jumlah chunk pada setiap shard pada dasarnya sama. Namun, sebagian besar data hanya disimpan di beberapa chunk yang padat, yang menghasilkan distribusi data yang tidak merata. Untuk melihat log runtime instans, jalankan perintah sh.status(). Informasi peringatan mungkin ditampilkan di output. Kode berikut memberikan contoh informasi peringatan:
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] kemungkinan kunci kardinalitas rendah terdeteksi di superHotItemPool.haodanku_all - kunci adalah { batch: "201908260000" }
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] kemungkinan kunci kardinalitas rendah terdeteksi di superHotItemPool.haodanku_all - kunci adalah { batch: "201908260200" }
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] kemungkinan kunci kardinalitas rendah terdeteksi di superHotItemPool.haodanku_all - kunci adalah { batch: "201908260230" }Balancer MongoDB memantau jumlah chunk pada setiap shard tanpa memedulikan volume data. Dalam kasus ini, jumlah chunk pada setiap shard seimbang, sedangkan data mungkin sangat condong. Dalam sebuah chunk, kunci sharding hampir sama. Saat ukuran chunk mencapai 64 MB, chunk kosong dibuat. Dengan cara ini, jumlah chunk bertambah dan migrasi chunk selesai. Namun, chunk yang dimigrasi adalah chunk kosong. Akibatnya, shard mungkin memiliki jumlah chunk yang sama tetapi ukuran data yang sangat berbeda. Dalam kasus ini, Anda harus merancang ulang kunci sharding dengan menggunakan kolom yang sesuai yang memiliki tingkat diskriminasi tinggi.
Untuk informasi lebih lanjut tentang cara chunk dibagi, lihat Pembagian Data dengan Chunk dan Membagi Chunk dalam Kluster Sharding.
Shard jumbo muncul dari database yang tidak di-shard
Anda dapat melakukan sharding pada beberapa database dalam instans kluster sharding ApsaraDB for MongoDB. Dalam hal ini, data dalam database yang tidak di-shard hanya disimpan di satu shard. Jika database memiliki sejumlah besar data, shard yang menyimpan data memiliki jumlah data yang lebih besar daripada shard lainnya.
Dalam kasus lain, ketika data secara logis diimpor dari instans ApsaraDB for MongoDB sumber ke instans ApsaraDB for MongoDB tujuan, instans tujuan mungkin tidak di-shard.
Untuk menyelesaikan masalah dalam skenario sebelumnya, kami menyarankan Anda melakukan operasi berikut:
Jika impor data ke instans kluster tujuan diinisialisasi, kami menyarankan Anda melakukan sharding pada instans tujuan sebelum impor data.
Jika sejumlah besar database tidak di-shard dan volume data dari database serupa, kami menyarankan Anda menjalankan perintah
movePrimaryyang disediakan oleh ApsaraDB for MongoDB untuk memigrasi database tertentu ke shard tertentu.Jika database memiliki jumlah data yang sangat besar dan tidak di-shard, kami menyarankan Anda melakukan sharding pada database atau membagi database sebagai set replika individu.
Jika ruang disk cukup, kami menyarankan Anda mengabaikan masalah ini.
Penggunaan disk shard yang tidak merata disebabkan oleh sejumlah besar operasi moveChunk
Operasi moveChunk digunakan untuk menghapus data sumber setelah data ditulis ke shard tujuan. Secara default, operasi remove tidak melepaskan ruang. Setiap koleksi memiliki file data dan file indeks dalam instans yang menjalankan mesin wiredTiger. Jika file tidak dihapus, ruang yang ditempati tidak dilepaskan. Dalam kebanyakan kasus, masalah ini terjadi karena sharding diimplementasikan dalam instans setelah instans berjalan selama periode waktu tertentu.
Secara prinsip, operasi moveChunk, mirip dengan operasi penghapusan berskala besar, menghasilkan fragmentasi. Oleh karena itu, jika sejumlah besar dokumen yang memerlukan operasi moveChunk atau remove dihasilkan pada shard, Anda dapat melakukan operasi compact pada shard untuk defragmentasi disk. Dalam kondisi normal, data diatur ulang setelah operasi compact untuk defragmentasi disk.
Untuk informasi lebih lanjut tentang moveChunk, lihat Migrasi Rentang dalam Kluster Sharding dan Kelola Balancer Kluster Sharding.