Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Batas waktu transaksi di Amazon Aurora MySQL
aurora_transaction_timeoutParameter menetapkan durasi maksimum untuk transaksi. Parameter ini dapat membantu mencegah transaksi yang berjalan lama (aktif atau idle) memblokir pembersihan InnoDB
Topik
Rincian parameter
aurora_transaction_timeoutParameter mengakhiri transaksi InnoDB yang berlangsung lebih lama dari durasi yang ditentukan, termasuk transaksi read-only. Anda menentukan nilainya dalam hitungan detik. Nilai nol (default) menonaktifkan batas waktu.
Tabel berikut merangkum detail parameter.
| Properti | Nilai |
|---|---|
| Nama | aurora_transaction_timeout |
| Lingkup | Sesi, Global |
| Default | 0 (dinonaktifkan) |
| Unit | Detik |
| Dinamis | Ya, hanya berlaku untuk transaksi InnoDB baru |
Anda dapat mengatur aurora_transaction_timeout parameter pada tingkat cluster, instance, atau sesi. Untuk informasi selengkapnya tentang bekerja dengan grup parameter, lihatKelompok parameter untuk Amazon Aurora.
Perilaku waktu habis
aurora_transaction_timeoutParameter ini berlaku untuk transaksi InnoDB yang mengeksekusi pernyataan DML, termasuk transaksi read-only. Semua pernyataan komit implisitCREATE TABLE .. AS SELECT (CTAS) danLOAD DATA, dikecualikan dari batas waktu. Nilai batas waktu ditangkap saat pernyataan InnoDB pertama berjalan. Nilai tetap tetap selama masa transaksi itu.
Ketika batas waktu berakhir, hasilnya tergantung pada status transaksi:
-
Jika ada kueri aktif dalam transaksi, kueri terganggu dan transaksi diputar kembali. Koneksi tetap dapat digunakan.
-
Jika tidak ada kueri aktif (yaitu, transaksi tidak aktif), koneksi dihentikan.
Contoh
Contoh berikut menunjukkan kapan timer dimulai untuk skenario transaksi yang berbeda.
Transaksi eksplisit
BEGIN; -- Does NOT start InnoDB transaction. No timer. SELECT * FROM t1; -- Starts InnoDB transaction. Timer starts HERE (at statement 2).
Timer dimulai pada pernyataan 2 (pernyataan InnoDB pertama).
komit otomatis = 0
SET SESSION autocommit=0; -- No transaction yet SELECT * FROM t1; -- Starts InnoDB transaction. Timer starts HERE. INSERT INTO t1 ...; -- Same transaction, timer still running from step 2.
Timer dimulai pada pernyataan 2 (pernyataan InnoDB pertama setelah autocommit dinonaktifkan).
Prosedur tersimpan
Prosedur tersimpan berjalan dalam konteks transaksi pemanggil. Jika penelepon sudah memiliki transaksi InnoDB aktif, pengatur waktu sudah dimulai sebelum panggilan prosedur. Jika prosedur adalah hal pertama yang menyentuh InnoDB, pengatur waktu dimulai pada pernyataan InnoDB pertama di dalam prosedur.
BEGIN; CALL my_proc(); -- If my_proc() does SELECT/INSERT, timer starts at that first InnoDB statement inside the proc
Catatan kunci
-
Batas waktu ditangkap saat transaksi dimulai — Nilai batas waktu ditangkap saat pernyataan InnoDB pertama dieksekusi. Perubahan
aurora_transaction_timeoutdi tengah transaksi akan berlaku pada transaksi berikutnya, bukan transaksi saat ini. Tidak ada peringatan yang diajukan. -
Transaksi XA PREPARED dikecualikan — Transaksi yang disiapkan tidak tunduk pada
aurora_transaction_timeout. -
Sesi penerusan tulis tidak tunduk pada batas waktu transaksi — Saat penerusan tulis diaktifkan, pernyataan atau transaksi apa pun yang berisi pernyataan yang diteruskan tidak tunduk pada
aurora_transaction_timeout. Transaksi berikutnya pada sesi yang sama yang tidak menyertakan laporan yang diteruskan tunduk pada batas waktu seperti biasa. Untuk mengontrol waktu tunggu idle untuk transaksi yang diteruskan, Anda dapat menggunakanaurora_fwd_writer_idle_timeoutparameter. Untuk informasi selengkapnya, lihat Parameter konfigurasi untuk penerusan tulis di Aurora MySQL. -
Berhati-hatilah dengan nilai batas waktu yang tinggi — Saat transaksi yang berjalan lama dibatalkan, rollback dapat memakan waktu beberapa kali lebih lama daripada operasi perubahan data asli. Mematikan proses database tidak membantu karena rollback dimulai ulang pada startup server. Pilih nilai batas waktu yang menyeimbangkan kebutuhan beban kerja Anda dengan biaya rollback. Untuk informasi selengkapnya, lihat Meng optimalkan Manajemen Transaksi InnoDB
dalam dokumentasi MySQL.
Kesalahan klien
Ketika transaksi dengan kueri aktif melebihi batas waktu, klien menerima kesalahan berikut:
ERROR 63952 (40001): Transaction exceeded maximum allowed duration of <N> seconds and was rolled back. See aurora_transaction_timeout for configuring this behavior.
Ketika transaksi idle melebihi batas waktu, kueri berikutnya menerima kesalahan yang sama dengan kesalahan MySQL “server gone away”. Untuk informasi lebih lanjut, lihat MySQL server has gone
Log kesalahan
Pesan informasi ditulis ke log kesalahan database ketika batas waktu transaksi terjadi:
[Note] Transaction breached timeout threshold and will be rolled back, if still in progress. If idle, the connection will be aborted. Check response for confirmation. connection_id: 4821, trx_id: 28193, user: app_user, timeout: 5 seconds, duration: 7 seconds
catatan
Pesan log ini hanya untuk tujuan diagnostik. Andalkan respons klien sebagai indikator definitif dari transaksi time-out.
Memantau batas waktu transaksi
Gunakan variabel Aurora_transaction_timeouts status untuk melacak berapa banyak transaksi yang telah habis waktu sejak instance DB dimulai ulang.
SHOW GLOBAL STATUS LIKE 'Aurora_transaction_timeouts';
Ketika performance_schema diaktifkan, kesalahan batas waktu (ER_AURORA_TRANSACTION_TIMEOUT_ERROR) juga dilacak dalam performance_schema.events_errors_summary_global_by_error dan tabel terkait. Perhatikan bahwa hanya batas waktu transaksi aktif yang menambah penghitung ini; batas waktu transaksi idle mengakhiri koneksi tanpa menimbulkan kesalahan. ER_AURORA_TRANSACTION_TIMEOUT_ERROR
Interaksi dengan batas waktu lainnya
Bekerja aurora_transaction_timeout di samping parameter batas waktu yang ada. Jika transaksi tetap terbuka lebih lama dari yang dikonfigurasiaurora_transaction_timeout, transaksi dihentikan terlepas dari pengaturan batas waktu lainnya. Apakah batas waktu lain juga memutar kembali transaksi tergantung pada implementasinya sendiri. Untuk detail tentang parameter ini, lihat dokumentasi MySQL.