Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Panjang daftar riwayat InnoDB meningkat secara signifikan
Mulai tanggal date
, daftar riwayat Anda untuk perubahan baris meningkat secara signifikan, hingga length
pada db-instance
. Peningkatan ini memengaruhi performa penonaktifan kueri dan basis data.
Versi mesin yang didukung
Informasi wawasan ini didukung untuk semua versi Aurora MySQL.
Konteks
Sistem transaksi InnoDB mempertahankan kontrol konkurensi multiversi (MVCC). Ketika baris diubah, versi pra-modifikasi dari data yang diubah disimpan sebagai catatan undo dalam log undo. Setiap data undo memiliki referensi ke data redo sebelumnya, yang membentuk daftar tertaut.
Daftar riwayat InnoDB adalah daftar global log undo untuk transaksi yang dilakukan. MySQL menggunakan daftar riwayat untuk membersihkan data dan halaman log saat transaksi tidak lagi memerlukan riwayat. Panjang daftar riwayat adalah jumlah total log undo yang berisi perubahan dalam daftar riwayat. Setiap log berisi satu atau beberapa modifikasi. Jika panjang daftar riwayat InnoDB bertambah terlalu besar, yang menunjukkan sejumlah besar versi baris lama, kueri dan penonaktifan basis data menjadi lebih lambat.
Kemungkinan penyebab masalah ini
Penyebab umum dari daftar riwayat panjang meliputi:
-
Transaksi yang berjalan lama, baik baca atau tulis
-
Beban tulis yang berat
Tindakan
Kami merekomendasikan tindakan yang berbeda bergantung pada penyebab wawasan Anda.
Topik
Jangan memulai operasi apa pun yang melibatkan penonaktifan basis data hingga daftar riwayat InnoDB berkurang
Karena daftar riwayat InnoDB yang panjang memperlambat penonaktifan basis data, kurangi ukuran daftar sebelum memulai operasi yang melibatkan penonaktifan basis data. Operasi ini meliputi upgrade basis data versi utama.
Mengidentifikasi dan mengakhiri transaksi yang berjalan lama
Anda dapat menemukan transaksi yang berjalan lama dengan mengkueri information_schema.innodb_trx
.
catatan
Pastikan juga untuk mencari transaksi jangka panjang pada replika baca.
Untuk mengidentifikasi dan mengakhiri transaksi yang berjalan lama
-
Di klien SQL Anda, jalankan kueri berikut:
SELECT a.trx_id, a.trx_state, a.trx_started, TIMESTAMPDIFF(SECOND,a.trx_started, now()) as "Seconds Transaction Has Been Open", a.trx_rows_modified, b.USER, b.host, b.db, b.command, b.time, b.state FROM information_schema.innodb_trx a, information_schema.processlist b WHERE a.trx_mysql_thread_id=b.id AND TIMESTAMPDIFF(SECOND,a.trx_started, now()) > 10 ORDER BY trx_started
-
Akhiri setiap transaksi yang berjalan lama dengan perintah
ROLLBACK
atauCOMMIT
.
Mengidentifikasi host teratas dan pengguna teratas dengan menggunakan Wawasan Performa.
Optimalkan transaksi agar sejumlah besar baris yang dimodifikasi segera dilakukan.
Metrik terkait
Metrik berikut terkait dengan wawasan ini:
-
trx_rseg_history_len
Untuk informasi selengkapnya, lihat Tabel Metrik INFORMATION_SCHEMA InnoDB
di Panduan Referensi MySQL 5.7.