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 daridate, daftar riwayat Anda untuk perubahan baris meningkat secara signifikan, hingga seter length usnyadb-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:
-
Long-running transaksi, baik membaca atau menulis
-
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 peningkatan basis data versi utama.
Mengidentifikasi dan mengakhiri transaksi yang berjalan lama
Anda dapat menemukan transaksi yang berjalan lama dengan mengueri information_schema.innodb_trx.
catatan
Pastikan juga untuk mencari transaksi yang berjalan lama 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 prosedur mysql.rds_kill tersimpan.
Mengidentifikasi host teratas dan pengguna teratas dengan menggunakan Wawasan Performa.
Optimalkan transaksi agar sejumlah besar baris yang dimodifikasi segera dilakukan.
Gunakan batas waktu transaksi untuk mencegah kejadian di masa mendatang
Untuk mencegah transaksi yang berjalan lama menyebabkan daftar riwayat besar di masa mendatang, pertimbangkan untuk mengaktifkan aurora_transaction_timeout parameter. Parameter ini secara otomatis mengakhiri transaksi yang melebihi durasi yang ditentukan. Untuk informasi selengkapnya, lihat Batas waktu transaksi di Amazon Aurora MySQL.
Metrik terkait
Metrik berikut terkait dengan wawasan ini:
-
trx_rseg_history_len— Metrik penghitung ini dapat dilihat di Performance Insights, sertaINFORMATION_SCHEMA.INNODB_METRICStabel. Untuk informasi selengkapnya, lihat tabel metrik InnoDB INFORMATION_SCHEMAdalam dokumentasi MySQL. -
RollbackSegmentHistoryListLength— CloudWatch Metrik Amazon ini mengukur log undo yang merekam transaksi yang dilakukan dengan catatan yang ditandai dihapus. Catatan ini dijadwalkan untuk diproses oleh operasi purge InnoDB. Metriktrx_rseg_history_lenmemiliki nilai yang sama denganRollbackSegmentHistoryListLength. -
PurgeBoundary— Nomor transaksi yang memungkinkan pembersihan InnoDB. Jika CloudWatch metrik ini tidak maju untuk jangka waktu yang lama, ini merupakan indikasi yang baik bahwa pembersihan InnoDB diblokir oleh transaksi yang berjalan lama. Untuk menyelidiki, periksa transaksi aktif pada cluster Aurora MySQL DB Anda. Metrik ini hanya tersedia untuk Aurora MySQL versi 2.11 dan yang lebih tinggi, dan versi 3.08 dan lebih tinggi. -
PurgeFinishedPoint— Nomor transaksi hingga pembersihan InnoDB dilakukan. CloudWatch Metrik ini dapat membantu Anda memeriksa seberapa cepat pembersihan InnoDB berlangsung. Metrik ini hanya tersedia untuk Aurora MySQL versi 2.11 dan yang lebih tinggi, dan versi 3.08 dan lebih tinggi. -
TransactionAgeMaximum— Usia transaksi aktif tertua yang sedang berjalan. CloudWatch Metrik ini hanya tersedia untuk Aurora MySQL versi 3.08 dan yang lebih tinggi. -
TruncateFinishedPoint— Nomor transaksi hingga pemotongan undo dilakukan. CloudWatch Metrik ini hanya tersedia untuk Aurora MySQL versi 2.11 dan yang lebih tinggi, dan versi 3.08 dan lebih tinggi.
Untuk informasi selengkapnya tentang CloudWatch metrik, lihatInstance-level metrik untuk Amazon Aurora.