Saat instans RDS memasuki status Locking, pernyataan INSERT dan UPDATE gagal. Identifikasi penyebabnya, buka kunci instans tersebut, dan cegah pengulangannya.
Pahami perilaku locking
Dampak status Locking bervariasi tergantung pada versi mesin database dan versi mesin minor.
MySQL 5.6, 5.7, dan 8.0 (versi mesin minor 20190815 atau lebih baru)
ApsaraDB RDS menggunakan tiga jenis kunci untuk membatasi operasi berdasarkan penyebab penguncian:
| Jenis kunci | Apa yang diblokir | Kondisi pemicu |
|---|---|---|
LOCK_WRITE_GROWTH |
Operasi yang meningkatkan penggunaan disk (INSERT, UPDATE). Kueri baca tetap berfungsi. Gunakan DROP atau TRUNCATE sebagai ganti DELETE untuk membebaskan ruang, karena DELETE menghasilkan binary log yang meningkatkan penggunaan disk. | Penyimpanan instans primer penuh. |
LOCK_READ |
Semua operasi baca dan tulis. | Penyimpanan instans read-only penuh. |
LOCK_WRITE |
Semua operasi tulis, termasuk DROP dan TRUNCATE (superset dari pembatasan LOCK_WRITE_GROWTH). |
Kedaluwarsa instans, kedaluwarsa host di kluster ApsaraDB MyBase, atau migrasi instans. |
Saat LOCK_WRITE_GROWTH aktif, pernyataan SQL mengembalikan:
ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement
MySQL 5.1, 5.5, dan MySQL 5.6/5.7/8.0 dengan versi mesin minor sebelum 20190815
Semua operasi diblokir terlepas dari penyebab penguncian.
Mendiagnosis penyebab
Di halaman Basic Information, periksa bagian Usage Statistics. Dua kemungkinan penyebabnya adalah:
-
Penyebab 1: Kapasitas penyimpanan habis.
-
Penyebab 2: Akun Alibaba Cloud Anda memiliki pembayaran tertunda, atau instans RDS telah kedaluwarsa.
Atasi penyebab 1: kapasitas penyimpanan habis
Anda dapat memperluas kapasitas penyimpanan atau melepaskan ruang penyimpanan. Memperluas penyimpanan lebih cepat dan menghindari penghapusan data.
Opsi 1: perluas kapasitas penyimpanan (disarankan)
-
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans berada, lalu klik ID instans.
-
Pada halaman Basic Information, di bagian Configuration Information, klik Change Specifications untuk memperluas kapasitas penyimpanan.
-
Selesaikan pembayaran. Klik ikon
di pojok kanan atas halaman Basic Information untuk memantau progres di halaman Tasks.
Waktu yang dibutuhkan bervariasi tergantung jenis penyimpanan:
| Jenis penyimpanan | Durasi | Catatan |
|---|---|---|
| Premium Local SSDs | Bervariasi | Migrasi data lintas instans mungkin terjadi. Koneksi transient sekitar 30 detik diperkirakan terjadi. Lakukan ekspansi selama jam sepi dan pastikan aplikasi Anda melakukan reconnect secara otomatis. |
| Cloud disks | Sekitar 5 menit | MySQL dan PostgreSQL: tidak ada koneksi transient. SQL Server: koneksi transient sekitar 30 detik mungkin terjadi. Lakukan ekspansi selama jam sepi, atau pastikan aplikasi Anda melakukan reconnect secara otomatis. Instans RDS tertentu mendukung ekspansi kapasitas penyimpanan tanpa kehilangan data. Hal ini tidak mengganggu beban kerja Anda. |
Anda juga dapat login ke Konsol ApsaraDB RDS dan klik Task Center di panel navigasi kiri untuk melihat progres.
Opsi 2: lepaskan ruang penyimpanan
Buat backup data Anda sebelum menghapus apa pun. Jika memungkinkan, perluas penyimpanan sebagai gantinya untuk menghindari kehilangan data.
-
Buka halaman Instances. Pilih wilayah, lalu klik ID instans.
-
Di panel navigasi kiri, klik Monitoring and Alerts untuk melihat penggunaan penyimpanan berdasarkan tipe data.

-
Hapus data berdasarkan kategori penyimpanan yang paling banyak mengonsumsi ruang.
File temporary (temp_file_size metrik)
ApsaraDB RDS untuk MySQL menghasilkan tabel temporary untuk operasi sorting, grouping, atau join, serta file cache binary log sebelum melakukan commit transaksi besar. File temporary ini dapat menghabiskan ruang disk.
Untuk langkah penyelesaian, lihat Apa yang harus saya lakukan jika instans ApsaraDB RDS untuk MySQL berada dalam status Locked karena kapasitas penyimpanannya habis oleh file temporary?
File log (binlog_size dan general_log_size metrik)
| Mesin database | Resolusi |
|---|---|
| MySQL | Di halaman Monitoring and Alerts, lihat penggunaan penyimpanan, lalu hapus file log. Lihat Apa yang harus saya lakukan jika kapasitas penyimpanan instans ApsaraDB RDS untuk MySQL habis oleh file binary log? dan FAQ tentang fitur general query log ApsaraDB RDS untuk MySQL. |
| PostgreSQL | File log tidak dapat dihapus secara manual. Hapus slot replikasi yang tidak aktif agar AliPG dapat secara otomatis menghapus log WAL. Lihat Gunakan fitur manajemen log WAL untuk instans ApsaraDB RDS untuk PostgreSQL. |
| SQL Server | File log tidak dapat dihapus secara manual. Shrink transaction logs di Konsol ApsaraDB RDS sebagai gantinya. |
File data (user_data_size metrik)
MySQL:
-
Hubungkan ke instans RDS Anda menggunakan Data Management (DMS).
-
Jalankan pernyataan berikut untuk menemukan tabel terbesar:
SELECT TABLE_NAME, concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<Database name>' ORDER BY DATA + 0 DESC; -
Hapus tabel yang tidak diperlukan:
DROP TABLE <Table name>; -
Tunggu sekitar 5 menit hingga sistem membuka kunci instans.
PostgreSQL:
-
Hubungkan ke instans RDS Anda menggunakan DMS. Lihat Gunakan DMS untuk login ke instans ApsaraDB RDS.
Jika Anda tidak dapat terhubung, perluas kapasitas penyimpanan terlebih dahulu, bersihkan ruang disk, lalu kurangi kapasitas penyimpanan sesuai kebutuhan. Lihat Ubah spesifikasi instans.
-
Jalankan pernyataan berikut untuk menemukan tabel terbesar:
SELECT table_schema || '.' || table_name AS table_full_name, pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') AS size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC; -
Hapus tabel yang tidak diperlukan:
DROP TABLE <Table name>; -
Tunggu sekitar 5 menit hingga sistem membuka kunci instans.
SQL Server:
Ikuti langkah-langkah dalam Pemecahan masalah ruang penyimpanan tidak mencukupi pada instans ApsaraDB RDS untuk SQL Server.
File sistem (undolog_size metrik)
Kueri yang berjalan lama pada tabel InnoDB dikombinasikan dengan modifikasi data konkuren dalam jumlah besar dapat menyebabkan sistem menghasilkan undo log berlebihan, sehingga menghabiskan kapasitas penyimpanan.
Untuk langkah penyelesaian, lihat Pemecahan masalah ruang penyimpanan tidak mencukupi akibat akumulasi file sistem.
Atasi penyebab 2: pembayaran tertunda atau instans kedaluwarsa
-
Instans berlangganan: Perpanjang instans, lalu tunggu sekitar 5 menit dan periksa apakah instans berada dalam status Running.
-
Instans pay-as-you-go: Isi saldo Akun Alibaba Cloud Anda, lalu tunggu 5 menit dan periksa apakah instans berada dalam status Running.
Cegah penguncian di masa depan
Konfigurasikan hal berikut untuk menghindari penguncian tak terduga:
Atur notifikasi pembayaran dan kedaluwarsa:
-
Login ke Konsol ApsaraDB RDS.
-
Klik ikon
di pojok kanan atas untuk membuka Message Center. -
Di panel navigasi kiri, klik Common Settings.
-
Di kolom Notification Type, pilih Product Overdue Payment, Suspension, and Imminent Release Notifications dan klik Modify.
-
Pilih kontak peringatan dan klik Save.
Konfigurasikan peringatan penggunaan penyimpanan: Atur aturan peringatan untuk penggunaan penyimpanan dan picu peringatan saat penggunaan penyimpanan melebihi 90%.
Aktifkan SQL Explorer dan Audit: Aktifkan fitur SQL Explorer dan Audit untuk mengidentifikasi dan mengoptimalkan pernyataan SQL yang menyebabkan lonjakan penyimpanan.
Aktifkan ekspansi penyimpanan otomatis: Konfigurasikan ekspansi penyimpanan otomatis agar sistem memperluas kapasitas saat ruang penyimpanan hampir habis. Lihat panduan untuk MySQL, PostgreSQL, dan SQL Server.
Optimalkan pernyataan SQL: Hindari penggunaan klausa ORDER BY dan GROUP BY secara berulang dalam kueri yang memproses set data besar, karena hal ini menghasilkan file temporary berukuran besar.
FAQ
Mengapa `LOCK_WRITE_GROWTH` masih aktif setelah saya menghapus sejumlah besar data?
Menjalankan DELETE hanya menandai catatan sebagai dapat digunakan kembali tetapi tidak memperkecil file disk dasar atau mereklaim ruang tabel. Untuk melepaskan ruang tabel, gunakan pernyataan OPTIMIZE TABLE. Lihat Bagaimana cara menggunakan pernyataan OPTIMIZE TABLE untuk melepaskan ruang tabel instans ApsaraDB RDS untuk MySQL?
Mengapa instans saya masih terkunci meskipun ruang penyimpanan sudah mencukupi atau instans telah diperpanjang?
Sebuah tugas seperti perubahan konfigurasi masih berlangsung. Instans akan membuka kunci secara otomatis saat tugas selesai. Klik ikon
di pojok kanan atas halaman Basic Information untuk memeriksa progres tugas di halaman Tasks.
Bisakah saya mengubah spesifikasi instans saat instans berada dalam status Locking?
Jika instans terkunci karena ruang penyimpanan habis, ya—Anda dapat melakukan peningkatan dan penurunan spesifikasi. Jika terkunci karena alasan lain seperti pembayaran tertunda, selesaikan masalah pembayaran terlebih dahulu.
Instans saya menggunakan tipe instans yang sudah tidak tersedia. Bagaimana cara membuka kuncinya dengan memperluas penyimpanan?
Ubah tipe instans ke tipe instans yang tersedia terlebih dahulu, lalu perluas penyimpanan. Untuk tipe instans yang tersedia, lihat Tipe instans utama ApsaraDB RDS.
Mengapa penggunaan penyimpanan terus meningkat meskipun instans terkunci?
INSERT dan UPDATE diblokir, tetapi kueri baca masih dapat menghasilkan file log atau data temporary, yang meningkatkan penggunaan penyimpanan.