Menyetel dengan wawasan proaktif Amazon Guru DevOps - Amazon Aurora

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.

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.

    Di pgadmin, pilih AUTOCOMMIT untuk menyalakannya.
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.