Topik ini menjelaskan cara memecahkan masalah yang menyebabkan I/O tinggi pada instans ApsaraDB RDS untuk MySQL. Kinerja I/O dari instans RDS Anda bervariasi berdasarkan tipe penyimpanan, arsitektur kernel, dan pernyataan SQL yang dijalankan untuk memindai atau memodifikasi data.
Memecahkan masalah I/O tinggi yang disebabkan oleh throughput tinggi
Gejala
Jika aplikasi Anda sering menginisiasi permintaan untuk memperbarui, menghapus, dan menyisipkan data pada tabel, I/O dari instans RDS meningkat secara signifikan karena pembacaan data dan flush halaman kotor. Hal ini berlaku jika tabel tersebut berisi sejumlah besar indeks atau bidang besar.
Anda dapat masuk ke konsol ApsaraDB RDS dan memilih di panel navigasi sisi kiri. Kemudian, pada tab Performance Trends, Anda dapat melihat beban baca dan tulis pada instans RDS Anda.
Solusi
Kami merekomendasikan agar Anda mengurangi frekuensi baca dan tulis, meningkatkan tipe instans RDS Anda, atau mengoptimalkan pengaturan parameter yang digunakan untuk flush halaman kotor. Berikut adalah parameter yang digunakan untuk flush halaman kotor:
innodb_max_dirty_pages_pct: Persentase halaman kotor yang diizinkan dalam buffer pool. Nilai default: 75.
innodb_max_dirty_pages_pct_lwm: Batas bawah untuk persentase halaman kotor yang diizinkan dalam buffer pool. Jika persentase halaman kotor dalam buffer pool melebihi batas bawah, ApsaraDB RDS akan flush halaman kotor ke disk untuk memastikan persentase halaman kotor yang tepat dalam buffer pool. Nilai default 0 menonaktifkan batas bawah.
CatatanNilai parameter innodb_max_dirty_pages_pct_lwm harus kurang dari atau sama dengan nilai parameter innodb_max_dirty_pages_pct. Jika tidak, ApsaraDB RDS akan menetapkan parameter innodb_max_dirty_pages_pct_lwm ke nilai parameter innodb_max_dirty_pages_pct.
innodb_io_capacity: Jumlah maksimum operasi I/O yang diizinkan oleh InnoDB per detik untuk setiap tugas latar belakang. Nilai parameter ini memengaruhi kecepatan ApsaraDB RDS melakukan flush halaman kotor ke disk serta kecepatan menulis data ke buffer pool. Nilai default: 20.000.
innodb_io_capacity_max: Jumlah maksimum operasi I/O yang diizinkan oleh InnoDB per detik untuk setiap tugas latar belakang. Parameter ini hanya berlaku ketika flush halaman kotor sudah kedaluwarsa. Nilai parameter ini lebih besar dari nilai parameter innodb_io_capacity. Nilai default: 40.000.
Memecahkan masalah I/O tinggi yang disebabkan oleh tabel sementara
Gejala
Jika direktori sementara besar, ApsaraDB RDS mungkin telah membuat tabel sementara besar karena operasi seperti pengurutan dan deduplikasi pernyataan SQL lambat. Ini meningkatkan I/O instans RDS Anda. Selain itu, penulisan data ke tabel sementara juga meningkatkan I/O instans RDS Anda.
Anda dapat masuk ke konsol ApsaraDB RDS dan memilih di panel navigasi sisi kiri. Kemudian, pada tab Performance Trends, Anda dapat melihat ukuran direktori tmp atau lainnya untuk instans RDS Anda.
Solusi
Kami merekomendasikan agar Anda mengoptimalkan pernyataan SQL yang ingin Anda jalankan untuk mencegah pernyataan SQL lambat. Database Autonomy Service (DAS) mendukung optimasi SQL. Untuk informasi lebih lanjut, lihat Optimasi SQL.
Memecahkan masalah I/O tinggi yang disebabkan oleh pembacaan data dingin
Gejala
Jika data yang diquery atau dimodifikasi menggunakan pernyataan SQL tidak dapat ditemukan di buffer pool, ApsaraDB RDS perlu membaca data dari disk. Ini dapat meningkatkan I/O instans RDS Anda secara signifikan.
Anda dapat masuk ke konsol ApsaraDB RDS dan memilih di panel navigasi sisi kiri. Kemudian, pada tab Performance Trends, Anda dapat melihat rasio hit buffer pool instans RDS Anda.
Solusi
Rancang ulang kebijakan cache berdasarkan skenario bisnis Anda. Jika tidak, tingkatkan instans RDS Anda.
Memecahkan masalah I/O tinggi yang disebabkan oleh pernyataan DDL
Gejala
Jika aplikasi Anda menginisiasi pernyataan DDL, ApsaraDB RDS mungkin akan membangun ulang tablespace instans RDS Anda. Selama proses pembangunan ulang, ApsaraDB RDS memindai setiap baris dari setiap tabel dalam tablespace, membuat indeks yang digunakan untuk mengurutkan data, dan melakukan flush halaman kotor yang dihasilkan dari tabel baru. Semua operasi ini meningkatkan I/O instans RDS Anda secara signifikan. Jika aplikasi Anda menginisiasi permintaan untuk menghapus tabel besar, I/O instans RDS Anda juga dapat meningkat.
Anda dapat masuk ke konsol ApsaraDB RDS dan klik Monitoring and Alerts di panel navigasi sisi kiri. Kemudian, Anda dapat klik Standard View pada tab Standard Monitoring untuk melihat penggunaan disk dan IOPS instans RDS Anda.
Solusi
Gunakan fitur Purge Large File Asynchronously untuk menghapus file besar. Fitur ini disediakan oleh AliSQL. AliSQL adalah cabang MySQL yang dikembangkan oleh Alibaba Cloud. Untuk informasi lebih lanjut, lihat Purge Large File Asynchronously.
Memecahkan masalah I/O tinggi yang disebabkan oleh penulisan log biner dari transaksi besar
Gejala
Transaksi hanya menulis catatan log ke file log biner ketika transaksi tersebut dikomit. Jika aplikasi Anda menjalankan transaksi besar, transaksi tersebut dapat menulis beberapa puluh GB data ke file log biner. Misalnya, transaksi tersebut berisi pernyataan DELETE yang digunakan untuk menghapus sejumlah besar baris. Ketika file log biner ini diflush ke disk, I/O instans RDS Anda meningkat secara signifikan.
Solusi
Kami merekomendasikan agar Anda membagi setiap transaksi besar yang ingin Anda jalankan. Ini memungkinkan Anda mengurangi flush halaman kotor ke disk.
Lampiran: Pengenalan sistem I/O InnoDB
InnoDB menggunakan sistem I/O independen untuk membaca dan menulis halaman data. Jika halaman data yang diminta oleh pernyataan SQL tidak dapat ditemukan di buffer pool, operasi I/O fisik dilakukan untuk membaca dan menulis data ke disk.
Operasi untuk Membaca Halaman Data
Operasi baca dasar dipanggil berdasarkan I/O sinkron untuk membaca halaman data.
Operasi untuk Menulis Halaman Data
Gunakan flush halaman kotor sebagai contoh. Thread I/O latar belakang dipanggil berdasarkan I/O asinkron untuk secara asinkron flush halaman kotor ke disk.
Selain operasi I/O pada file data umum, sejumlah operasi lainnya juga dapat meningkatkan I/O instans RDS Anda secara signifikan. Operasi ini termasuk operasi untuk menulis redo logs, undo logs, dan log biner, operasi untuk mengurutkan tabel sementara, dan operasi untuk membangun ulang tablespace karena pernyataan DDL.