Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyetel dengan wawasan proaktif Amazon Guru DevOps
DevOpsWawasan proaktif Guru mendeteksi kondisi pada Aurora SQL Postgre yang dapat menyebabkan masalah, dan memberi tahu Anda tentang mereka sebelum terjadi. Wawasan proaktif dapat mengingatkan Anda tentang idle yang berjalan lama dalam koneksi transaksi. Untuk informasi selengkapnya tentang pemecahan masalah idle yang berjalan lama dalam koneksi transaksi, lihat Basis data telah lama berjalan idle dalam koneksi transaksi
DevOpsGuru dapat melakukan hal berikut:
-
Mencegah banyak masalah umum pada basis data dengan memeriksa silang konfigurasi basis data terhadap pengaturan umum yang direkomendasikan.
-
Memberi tahu Anda tentang masalah kritis dalam armada yang, jika dibiarkan tanpa diperiksa, dapat menyebabkan masalah yang lebih besar di kemudian hari.
-
Memberi tahu Anda tentang masalah yang baru ditemukan.
Setiap wawasan proaktif berisi analisis penyebab masalah dan rekomendasi untuk tindakan korektif.
Untuk informasi selengkapnya tentang Amazon DevOps Guru untuk AmazonRDS, lihatMenganalisis anomali kinerja Aurora dengan Amazon Guru untuk Amazon DevOps RDS.
Basis data telah lama berjalan idle dalam koneksi transaksi
Koneksi ke basis berada dalam status idle in transaction
selama lebih dari 1.800 detik.
Versi mesin yang didukung
Informasi wawasan ini didukung untuk semua versi Postgre . RDS SQL
Konteks
Transaksi dalam status idle in transaction
dapat menahan kunci yang memblokir kueri lain. Ini juga dapat mencegah VACUUM
(termasuk autovacuum) membersihkan baris mati, yang menyebabkan penggelembungan indeks atau tabel atau ID transaksi tumpang tindih.
Kemungkinan penyebab masalah ini
Transaksi dimulai dalam sesi interaktif dengan BEGIN atau START TRANSACTION belum berakhir dengan menggunakanCOMMIT,ROLLBACK, atau END perintah. Hal ini menyebabkan status transaksi berubah ke idle in
transaction
.
Tindakan
Anda dapat menemukan transaksi idle dengan mengueri pg_stat_activity
.
Di SQL klien Anda, jalankan kueri berikut untuk mencantumkan semua koneksi dalam idle in transaction
status dan mengurutkannya berdasarkan durasi:
SELECT now() - state_change as idle_in_transaction_duration, now() - xact_start as xact_duration,* FROM pg_stat_activity WHERE state = 'idle in transaction' AND xact_start is not null ORDER BY 1 DESC;
Kami merekomendasikan tindakan yang berbeda bergantung pada penyebab wawasan Anda.
Topik
Transaksi akhir
Saat Anda memulai transaksi dalam sesi interaktif dengan BEGIN atau STARTTRANSACTION, transaksi tersebut bergerak ke idle in transaction
status. Itu tetap dalam keadaan ini sampai Anda mengakhiri transaksi dengan mengeluarkanCOMMIT,ROLLBACK, END perintah atau memutuskan koneksi sepenuhnya untuk memutar kembali transaksi.
Mengakhiri koneksi
Akhiri koneksi dengan transaksi idle menggunakan kueri berikut:
SELECT pg_terminate_backend
(pid)
;
pid adalah ID proses koneksi.
Konfigurasikan parameter idle_in_transaction_session_timeout
Konfigurasikan parameter idle_in_transaction_session_timeout
di grup parameter baru. Dengan mengonfigurasi parameter ini, intervensi manual tidak diperlukan untuk mengakhiri status idle yang lama dalam transaksi. Untuk informasi lebih lanjut tentang parameter ini, lihat dokumentasi Postgre SQL
Pesan berikut akan dilaporkan dalam file SQL log Postgre setelah koneksi dihentikan, ketika transaksi dalam keadaan idle_in_transaction lebih lama dari waktu yang ditentukan.
FATAL: terminating connection due to idle in transaction timeout
Periksa AUTOCOMMIT statusnya
AUTOCOMMITdihidupkan secara default. Namun, jika dinonaktifkan secara tidak sengaja di klien, pastikan Anda mengaktifkannya kembali.
-
Di klien psql Anda, jalankan perintah berikut:
postgres=>
\set AUTOCOMMIT on
-
Di pgadmin, nyalakan dengan memilih AUTOCOMMIT opsi dari panah bawah.
Memeriksa logika transaksi dalam kode aplikasi Anda
Selidiki logika aplikasi Anda untuk kemungkinan masalah. Pertimbangkan tindakan berikut:
-
Periksa apakah komit JDBC otomatis disetel true dalam aplikasi Anda. Pertimbangkan juga untuk menggunakan perintah
COMMIT
eksplisit dalam kode Anda. -
Periksa logika penanganan kesalahan untuk mengetahui apakah transaksi ditutup setelah kesalahan terjadi.
-
Periksa apakah aplikasi Anda membutuhkan waktu lama untuk memproses baris yang ditampilkan oleh kueri saat transaksi terbuka. Jika demikian, pertimbangkan untuk mengodekan aplikasi guna menutup transaksi sebelum memproses baris.
-
Periksa apakah transaksi berisi banyak operasi yang berjalan lama. Jika demikian, bagi satu transaksi menjadi beberapa transaksi.
Metrik terkait
Metrik PI berikut terkait dengan wawasan ini:
-
idle_in_transaction_count - Jumlah sesi dalam status
idle in transaction
. -
idle_in_transaction_max_time - Durasi transaksi yang berjalan paling lama dalam status
idle in transaction
.