Topik ini menjelaskan fitur DDL yang lebih cepat, yang menyediakan mekanisme manajemen buffer pool yang dioptimalkan. Mekanisme ini mengurangi dampak operasi bahasa definisi data (DDL) dan meningkatkan jumlah operasi DDL bersamaan yang diizinkan.
Prasyarat
Instansi RDS Anda harus menjalankan salah satu versi MySQL berikut:- MySQL 8.0 (dengan versi mesin minor 20200630 atau lebih baru).
- MySQL 5.7 (dengan versi mesin minor 20200630 atau lebih baru).
- MySQL 5.6 (dengan versi mesin minor 20200630 atau lebih baru).
Informasi latar belakang
Operasi DDL sering digunakan pada instansi RDS. Saat menggunakan instansi RDS, Anda mungkin menghadapi beberapa masalah terkait operasi DDL, seperti:
- Mengapa jitter performa terjadi saat menambahkan indeks, sehingga mengganggu operasi baca dan tulis pada instansi RDS?
- Mengapa operasi DDL pada tabel berukuran kurang dari 1 GB memerlukan waktu lebih dari 10 menit?
- Mengapa jitter performa terjadi saat koneksi yang menghasilkan tabel sementara ditutup?
Tim mesin database ApsaraDB for RDS telah melakukan analisis mendalam dan pengujian intensif untuk mengidentifikasi penyebab masalah-masalah ini. Hasilnya menunjukkan adanya cacat dalam logika pemeliharaan cache yang digunakan untuk mengelola operasi DDL. Untuk memperbaiki masalah ini, tim mengembangkan fitur DDL yang lebih cepat. Mekanisme manajemen buffer pool yang dioptimalkan oleh fitur ini mengurangi kompetisi untuk kunci yang dipicu oleh operasi DDL. Dengan demikian, fitur ini memastikan performa instansi RDS tetap stabil selama pemrosesan beban kerja normal.
Aktifkan DDL yang lebih cepat
Anda dapat mengaktifkan fitur DDL yang lebih cepat dengan mengatur parameter loose_innodb_rds_faster_ddl ke ON di konsol ApsaraDB for RDS. Untuk informasi lebih lanjut, lihat Ubah Parameter Instansi ApsaraDB RDS untuk MySQL.
Uji dengan operasi DDL
- Skenario Uji
Gunakan algoritma in-place untuk melakukan operasi DDL online dengan menjalankan pernyataan berikut yang didukung MySQL 8.0: CREATE INDEX dan OPTIMIZE TABLE. Pernyataan CREATE INDEX membuat indeks pada tabel tanpa perlu membangun ulang tabel. Pernyataan OPTIMIZE TABLE membuat indeks pada tabel dengan membangun ulang tabel.
Operasi Instant In-place Membangun ulang tabel Mengizinkan operasi DML bersamaan Hanya memodifikasi metadata CREATE INDEX Tidak Ya Tidak Ya Tidak OPTIMIZE TABLE Tidak Ya Ya Ya Tidak - Instansi Uji
Instansi RDS yang digunakan untuk uji menjalankan MySQL 8.0. Instansi ini memiliki 8 inti CPU dan 64 GB memori. Ukuran tabel tempat Anda melakukan operasi DDL adalah 600 MB.
- Prosedur Uji
Gunakan SysBench untuk melakukan uji stres. Dalam uji ini, lakukan operasi DDL online dan bandingkan hasilnya.
- Hasil Uji
Operasi Durasi eksekusi rata-rata (dengan DDL yang lebih cepat dinonaktifkan) Durasi eksekusi rata-rata (dengan DDL yang lebih cepat diaktifkan) Peningkatan performa kali CREATE INDEX 56 detik 4,9 detik 11,4 OPTIMIZE TABLE 220 detik 17 detik 12,9 - Ringkasan Uji
Fitur DDL yang lebih cepat memungkinkan ApsaraDB RDS untuk MySQL dengan AliSQL mengurangi durasi eksekusi operasi DDL lebih dari 90% dibandingkan dengan Edisi Komunitas MySQL.
Uji dengan tabel sementara
Tabel sementara umum digunakan di MySQL. Sebagai contoh, sistem membuat tabel sementara untuk menanyakan tabel dari database information_schema atau untuk mempercepat eksekusi pernyataan SQL yang kompleks. Saat sebuah thread keluar, semua tabel sementara terkait dihapus. Ini merupakan jenis operasi DDL tertentu yang dapat menyebabkan jitter performa pada instansi RDS. Untuk informasi lebih lanjut, lihat Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP.
- Instansi Uji
Instansi RDS yang digunakan untuk uji menjalankan MySQL 8.0. Instansi ini memiliki 8 inti CPU dan 64 GB memori.
- Prosedur Uji
Gunakan tpcc-mysql untuk melakukan uji stres. Dalam uji ini, jalankan query untuk memastikan bahwa buffer pool mencapai kapasitas penuh hampir sepenuhnya. Kemudian, mulai permintaan single-threaded melalui koneksi singkat untuk menghasilkan tabel sementara.
- Hasil Uji
Item perbandingan Operasi DDL tidak termasuk DDL yang lebih cepat diaktifkan DDL yang lebih cepat dinonaktifkan Transaksi per detik (TPS) 42.000 40.000 < 10.000 Gambar berikut menunjukkan data performa tingkat kedua yang diperoleh dari uji stres. Bagian yang disorot merah menunjukkan TPS yang didukung oleh instansi RDS saat fitur DDL yang lebih cepat dinonaktifkan.

- Ringkasan Uji
Setiap kali sebuah thread yang menghasilkan tabel sementara keluar, MySQL asli menyebabkan jitter performa yang parah, mengurangi TPS lebih dari 70%. Setelah fitur DDL yang lebih cepat diaktifkan, penurunan TPS dikurangi menjadi hanya 5%.
Efek optimasi
Fitur DDL yang lebih cepat mendukung MySQL 5.6, 5.7, dan 8.0. Namun, operasi DDL yang didukung dapat bervariasi berdasarkan versi MySQL yang digunakan.
| Kategori | Operasi DDL | MySQL 5.6 | MySQL 5.7 | MySQL 8.0 |
| DDL In-place | Untuk informasi lebih lanjut, lihat Operasi DDL Online MySQL 8.0 dan Operasi DDL Online MySQL 5.7. | Tidak | Ya | Ya |
| Manajemen tablespace | Mengaktifkan atau menonaktifkan enkripsi tablespace. | Tidak | Ya | Ya |
| Melepaskan atau menghapus tablespace. | Tidak | Ya | Ya | |
| Membuang tablespace. | Ya | Ya | Ya | |
| Penghapusan tabel | Melepaskan atau menghapus tabel. | Ya | Ya | Ya |
| Operasi undo | Melepaskan atau menghapus tablespace undo. | Tidak | Tidak | Ya |
| Penyegaran tabel | Menyegarkan tabel dan halaman kotornya. | Ya | Ya | Ya |
Cacat yang diperbaiki oleh DDL yang lebih cepat
Fitur DDL yang lebih cepat memperbaiki cacat berikut:
- Bug #95582: DDL menggunakan bulk load sangat lambat di bawah flush_list panjang
- Bug #98869: Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP
- Bug #99021: BUF_REMOVE_ALL_NO_WRITE tidak diperlukan untuk tablespace undo
- Bug #98974: Tabel temporer InnoDB bisa sangat merusak performa InnoDB