All Products
Search
Document Center

ApsaraDB RDS:Nonblocking DDL

Last Updated:May 13, 2026

Fitur nonblocking DDL pada ApsaraDB RDS for MySQL mencegah pemblokiran sesi dan penumpukan koneksi ketika operasi Data Definition Language (DDL) tidak dapat memperoleh metadata lock (MDL), sehingga meningkatkan stabilitas dan ketersediaan instans selama eksekusi DDL.

Cara kerja

Latar belakang: Di MySQL, operasi DDL harus memperoleh exclusive metadata lock (MDL-X) pada tabel target untuk menjamin konsistensi metadata. Jika terdapat transaksi yang belum dikomit atau query jangka panjang pada tabel tersebut, thread DDL masuk ke status pending karena tidak dapat segera memperoleh kunci tersebut. Karena kunci MDL-X yang pending memiliki prioritas tertinggi, akses selanjutnya ke tabel target akan diblokir. Hal ini dapat menyebabkan pemblokiran sesi, penumpukan koneksi, dan keterlambatan respons. Dalam kasus parah, seluruh sistem bisnis dapat menjadi tidak tersedia.

Pengantar: Fitur nonblocking DDL pada ApsaraDB RDS for MySQL mengubah cara thread DDL memperoleh dan menunggu metadata lock (MDL). Fitur ini menggantikan satu periode tunggu panjang dengan serangkaian periode tunggu pendek yang berselang-seling. Selama interval antar periode tunggu tersebut, thread DDL melepas permintaannya untuk kunci MDL-X, sehingga memungkinkan sesi baru mengakses tabel target. Dengan demikian, fitur ini mencegah thread DDL memblokir sesi lain dari mengakses tabel target dalam waktu lama.

Catatan penggunaan

Untuk menggunakan fitur nonblocking DDL, instans Anda harus memenuhi salah satu persyaratan versi berikut. Jika instans Anda tidak memenuhi persyaratan tersebut, Anda dapat upgrade the minor engine version atau upgrade the major database version:

  • MySQL 8.4

  • MySQL 8.0 dengan minor engine version 20250531 atau lebih baru

Fitur nonblocking DDL memiliki batasan berikut:

  • Hanya operasi ALTER TABLE, CREATE INDEX, dan DROP INDEX yang didukung. Untuk melakukan operasi OPTIMIZE TABLE, gunakan ALTER TABLE ... ENGINE = InnoDB sebagai gantinya.

  • Fitur ini tidak aktif pada node secondary dan read-only instances saat data disinkronkan dari primary node.

  • Mengaktifkan fitur ini menurunkan prioritas operasi DDL, sehingga meningkatkan kemungkinan operasi DDL gagal karena tidak dapat memperoleh metadata lock (MDL).

Manajemen parameter

Parameter

Anda dapat menggunakan parameter loose_rds_nonblock_ddl_retry_interval dan loose_rds_nonblock_ddl_lock_wait_timeout untuk mengontrol dan menyesuaikan fitur nonblocking DDL. Setelah fitur ini diaktifkan, thread DDL secara berselang-seling mencoba memperoleh metadata lock (MDL). Jika upaya tersebut gagal, thread melepas permintaan MDL-nya dan menunggu sebelum mencoba lagi.

Parameter

Description

loose_rds_nonblock_ddl_retry_interval

  • Description: Interval waktu antar upaya percobaan setelah thread DDL gagal memperoleh metadata lock (MDL).

  • Scope: Session-level.

  • Data type: Integer.

  • Default value: 0. Nilai 0 menunjukkan bahwa fitur nonblocking DDL dinonaktifkan.

  • Valid values: 0 hingga 31536000. Satuan: detik.

  • Requires instance restart: No.

loose_rds_nonblock_ddl_lock_wait_timeout

  • Description: Timeout untuk setiap upaya berselang-seling oleh thread DDL dalam memperoleh metadata lock (MDL).

  • Scope: Session-level.

  • Data type: Integer.

  • Default value: 1.

  • Valid values: 1 hingga 31536000. Satuan: detik.

  • Requires instance restart: No.

Ubah parameter

  1. Buka halaman Instances. Pada bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.

  2. Di panel navigasi kiri, klik Parameters.

  3. Pada tab Editable Parameters, cari parameter yang ingin Anda ubah dan sesuaikan nilainya.

  4. Klik OK lalu klik Submit Parameters. Di kotak dialog, tentukan kapan perubahan tersebut berlaku.

Efektivitas fitur

Metode pengujian

Pengujian ini menggunakan sysbench untuk membandingkan dampak performa operasi DDL dengan dan tanpa fitur nonblocking DDL. Lakukan langkah-langkah berikut:

  1. Gunakan sysbench untuk membuat tabel dan memasukkan data.

    sysbench oltp_read_write --db-ps-mode=auto --percentile=95 --mysql-host=$HOST --mysql-port=$PORT --mysql-user=$USER --mysql-db=$DB --tables=1 --table-size=50 --threads=16 prepare
  2. Jalankan stress test sysbench untuk mensimulasikan traffic bisnis online.

    sysbench oltp_read_write --db-ps-mode=auto --percentile=95 --mysql-host=$HOST --mysql-port=$PORT --mysql-user=$USER --mysql-db=$DB --tables=1 --table-size=50 --threads=16 --report-interval=1 --time=100 run
  3. Pada sesi terpisah, jalankan transaksi jangka panjang pada tabel target untuk memblokir operasi DDL berikutnya.

    SELECT SLEEP(60) FROM sbtest1 LIMIT 1;
  4. Pada sesi lain, dengan fitur nonblocking DDL dinonaktifkan, jalankan operasi DDL berikut dan amati perubahan Transactions Per Second (TPS).

    ALTER TABLE sbtest1 ENGINE = InnoDB;
    -- Expected result: The DDL thread is blocked because it cannot acquire the metadata lock (MDL).
  5. Aktifkan fitur nonblocking DDL dengan mengatur parameter loose_rds_nonblock_ddl_retry_interval ke 6 dan parameter loose_rds_nonblock_ddl_lock_wait_timeout ke 1. Jalankan operasi DDL yang sama dan amati perubahan TPS.

    ALTER TABLE sbtest1 ENGINE = InnoDB;
    -- Expected result: The DDL thread intermittently acquires the metadata lock (MDL) and is not fully blocked.

Hasil pengujian

  • Saat fitur nonblocking DDL dinonaktifkan, thread DDL tidak dapat memperoleh metadata lock (MDL), dan sesi sepenuhnya terblokir.

  • Dengan fitur nonblocking DDL diaktifkan, thread DDL secara berselang-seling memperoleh metadata lock (MDL). Hal ini mencegah sesi terblokir sepenuhnya dan menjaga stabilitas sistem.

image.png

image