

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
<a name="AuroraMySQL.TransactionTimeout"></a>

`aurora_transaction_timeout`Parameter menetapkan durasi maksimum untuk transaksi. Parameter ini dapat membantu mencegah transaksi yang berjalan lama (aktif atau idle) memblokir pembersihan [ InnoDB](https://dev.mysql.com/doc/refman/8.4/en/glossary.html#glos_purge), yang dapat menyebabkan masalah kinerja. Parameter ini tersedia di Aurora MySQL versi 8.4.8 dan lebih tinggi.

**Topics**
+ [Rincian parameter](#AuroraMySQL.TransactionTimeout.parameter-details)
+ [Perilaku waktu habis](#AuroraMySQL.TransactionTimeout.behavior)
+ [Contoh](#AuroraMySQL.TransactionTimeout.examples)
+ [Catatan kunci](#AuroraMySQL.TransactionTimeout.key-notes)
+ [Kesalahan klien](#AuroraMySQL.TransactionTimeout.client-error)
+ [Log kesalahan](#AuroraMySQL.TransactionTimeout.error-log)
+ [Memantau batas waktu transaksi](#AuroraMySQL.TransactionTimeout.monitoring)
+ [Interaksi dengan batas waktu lainnya](#AuroraMySQL.TransactionTimeout.interaction)

## Rincian parameter
<a name="AuroraMySQL.TransactionTimeout.parameter-details"></a>

`aurora_transaction_timeout`Parameter 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, lihat[Kelompok parameter untuk Amazon Aurora](USER_WorkingWithParamGroups.md).

## Perilaku waktu habis
<a name="AuroraMySQL.TransactionTimeout.behavior"></a>

`aurora_transaction_timeout`Parameter ini berlaku untuk transaksi InnoDB yang mengeksekusi pernyataan DML, termasuk transaksi read-only. Semua pernyataan [ komit implisit](https://dev.mysql.com/doc/refman/8.4/en/implicit-commit.html), kecuali `CREATE TABLE .. AS SELECT` (CTAS) dan`LOAD 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
<a name="AuroraMySQL.TransactionTimeout.examples"></a>

Contoh berikut menunjukkan kapan timer dimulai untuk skenario transaksi yang berbeda.

### Transaksi eksplisit
<a name="AuroraMySQL.TransactionTimeout.examples.explicit"></a>

```
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
<a name="AuroraMySQL.TransactionTimeout.examples.autocommit"></a>

```
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
<a name="AuroraMySQL.TransactionTimeout.examples.stored-procs"></a>

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
<a name="AuroraMySQL.TransactionTimeout.key-notes"></a>
+ **Batas waktu ditangkap saat transaksi dimulai ** — Nilai batas waktu ditangkap saat pernyataan InnoDB pertama dieksekusi. Perubahan `aurora_transaction_timeout` di 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 menggunakan `aurora_fwd_writer_idle_timeout` parameter. Untuk informasi selengkapnya, lihat [Parameter konfigurasi untuk penerusan tulis di Aurora MySQL](aurora-global-database-write-forwarding-ams.md#aurora-global-database-write-forwarding-params-ams).
+ **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 ](https://dev.mysql.com/doc/refman/8.4/en/optimizing-innodb-transaction-management.html) dalam dokumentasi MySQL.

## Kesalahan klien
<a name="AuroraMySQL.TransactionTimeout.client-error"></a>

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 ](https://dev.mysql.com/doc/refman/8.4/en/gone-away.html) di dokumentasi MySQL.

## Log kesalahan
<a name="AuroraMySQL.TransactionTimeout.error-log"></a>

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
<a name="AuroraMySQL.TransactionTimeout.monitoring"></a>

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
<a name="AuroraMySQL.TransactionTimeout.interaction"></a>

Bekerja `aurora_transaction_timeout` di samping parameter batas waktu yang ada. Jika transaksi tetap terbuka lebih lama dari yang dikonfigurasi`aurora_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.