Panjang daftar riwayat InnoDB meningkat secara signifikan - Amazon Aurora

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.

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
  1. 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
  2. Akhiri setiap transaksi yang berjalan lama dengan perintah ROLLBACK atau COMMIT.

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: