Ketika ruang disk dari instans ApsaraDB RDS for MySQL habis akibat pernyataan SQL lambat atau penambahan data berlebihan, sistem secara otomatis mengunci instans untuk mencegah kehilangan data. Status instans berubah menjadi "Terkunci", dan operasi tulis tidak dapat dilakukan selama kondisi ini. Topik ini menjelaskan cara menghapus file data, file sementara, file log biner, file undo, serta file general_log untuk membebaskan ruang penyimpanan.
Penyebab
Berikut adalah beberapa alasan umum mengapa penyimpanan sebuah instans dapat habis:
Penggunaan tinggi file data: Penulisan sejumlah besar data ke database menyebabkan file data menggunakan ruang disk secara berlebihan.
Penggunaan tinggi file log: Jika kebijakan pencadangan log tidak dikonfigurasi dengan benar, transaksi besar dapat menyebabkan file log tumbuh dengan cepat.
Penggunaan tinggi file sementara: File sementara dapat mengonsumsi ruang penyimpanan dalam jumlah besar. Ini mencakup file tabel sementara yang dihasilkan oleh operasi pengurutan, pengelompokan, atau join dalam kueri, serta file cache log untuk transaksi besar yang belum dikomit.
Penggunaan tinggi file sistem: Hal ini sering disebabkan oleh file undo yang terlalu besar. Jika kueri jangka panjang dilakukan pada tabel InnoDB sementara sejumlah besar data dimodifikasi, sistem menghasilkan volume besar informasi undo yang mengonsumsi ruang penyimpanan signifikan. RDS for MySQL 8.0 secara otomatis menghapus file undo, sehingga masalah ini jarang terjadi. Namun, Anda tetap harus waspada terhadap kasus-kasus khusus.
Penggunaan tinggi file general_log: Ketika pencatatan umum diaktifkan, file general_log mencatat semua operasi, termasuk detail eksekusi setiap pernyataan SQL. Jika volume akses tinggi atau file tidak dibersihkan secara berkala, itu dapat mengonsumsi ruang penyimpanan dalam jumlah besar. Berikut adalah metode untuk memeriksa ukuran file general_log:
Periksa penggunaan penyimpanan instans untuk menentukan apakah file sys_data_size terlalu besar.
Periksa apakah pencatatan umum diaktifkan untuk instans (parameter general_log disetel ke ON).
Hubungkan ke instans RDS for MySQL dan jalankan pernyataan berikut untuk menanyakan ukuran file general_log:
SELECT table_schema AS 'Database', table_name,SUM(data_length + index_length + data_free)/1024/1024 AS "Table size in MB",SUM(DATA_FREE)/1024/1024 AS "Fragmentation size in MB" FROM information_schema.TABLES WHERE table_name='general_log'CatatanPernyataan SQL di atas mengambil ukuran tabel
mysql.general_logdari tabelTABLESdalam databaseinformation_schemadan mengonversi nilainya ke MB.Data yang diambil oleh pernyataan SQL di atas adalah data sampel dan mungkin berbeda dari data aktual.
Solusi
Ikuti langkah-langkah berikut untuk mengidentifikasi penyebab masalah dan menyelesaikan penguncian pada instans ApsaraDB RDS for MySQL yang disebabkan oleh ruang penyimpanan yang tidak mencukupi.
Masuk ke Konsol ApsaraDB RDS dan buka halaman Instans. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Kemudian, temukan instans RDS dan klik ID instans.
Di panel navigasi di sebelah kiri, klik Monitoring and Alarms untuk melihat jenis-jenis file yang menggunakan ruang penyimpanan.
Pilih solusi berdasarkan kondisi aktual Anda.
CatatanSetelah membersihkan ruang disk, instans RDS biasanya akan dibuka kuncinya dalam waktu 5 hingga 15 menit.