

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Penanganan koneksi mati di PostgreSQL
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling"></a>

Koneksi mati terjadi ketika sesi database tetap aktif di server meskipun aplikasi klien telah ditinggalkan atau dihentikan secara tidak normal. Situasi ini biasanya muncul ketika proses klien macet atau berhenti secara tak terduga tanpa menutup koneksi database mereka dengan benar atau membatalkan permintaan yang sedang berlangsung.

PostgreSQL secara efisien mengidentifikasi dan membersihkan koneksi mati saat proses server menganggur atau mencoba mengirim data ke klien. Namun, deteksi menantang untuk sesi yang menganggur, menunggu masukan klien, atau menjalankan kueri secara aktif. Untuk menangani skenario ini, PostgreSQL `tcp_keepalives_*` menyediakan,, dan parameter. `tcp_user_timeout` `client_connection_check_interval`

**Topics**
+ [

## Memahami TCP keepalive
](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Understanding)
+ [

## 
](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Parameters)
+ [

## Kasus penggunaan untuk pengaturan TCP keepalive
](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases)
+ [

## Praktik terbaik
](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.BestPractices)

## Memahami TCP keepalive
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Understanding"></a>

TCP Keepalive adalah mekanisme tingkat protokol yang membantu menjaga dan memverifikasi integritas koneksi. Setiap koneksi TCP mempertahankan pengaturan tingkat kernel yang mengatur perilaku keepalive. Ketika timer keepalive kedaluwarsa, sistem melakukan hal berikut:
+ Mengirim paket probe tanpa data dan set flag ACK.
+ Mengharapkan respons dari titik akhir jarak jauh sesuai dengan spesifikasi. TCP/IP 
+ Mengelola status koneksi berdasarkan respons atau kekurangannya.

## 
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Parameters"></a>


| Parameter | Deskripsi | Nilai default | 
| --- |--- |--- |
| tcp\$1keepalives\$1idle | Menentukan jumlah detik tidak aktif sebelum mengirim pesan keepalive. | 300 | 
| tcp\$1keepalives\$1interval | Menentukan jumlah detik antara transmisi ulang pesan keepalive yang tidak diakui. | 30 | 
| tcp\$1keepalives\$1count | Pesan keepalive maksimum yang hilang sebelum menyatakan koneksi mati | 2 | 
| tcp\$1user\$1timeout | Menentukan berapa lama (dalam Millidetik) data yang tidak diakui dapat tetap sebelum menutup sambungan secara paksa. | 0 | 
| client\$1connection\$1check\$1interval | Mengatur interval (dalam Millidetik) untuk memeriksa status koneksi klien selama kueri yang berjalan lama. Ini memastikan deteksi koneksi tertutup yang lebih cepat. | 0 | 

## Kasus penggunaan untuk pengaturan TCP keepalive
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases"></a>

### Menjaga sesi idle tetap hidup
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases.KeepingAlive"></a>

Untuk mencegah koneksi idle dihentikan oleh firewall atau router karena tidak aktif:
+ Konfigurasikan `tcp_keepalives_idle` untuk mengirim paket keepalive secara berkala.

### Mendeteksi koneksi mati
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases.DetectingDead"></a>

Untuk mendeteksi koneksi mati dengan segera:
+ Sesuaikan`tcp_keepalives_idle`,`tcp_keepalives_interval`, dan`tcp_keepalives_count`. Misalnya, dengan default Aurora PostgreSQL, dibutuhkan sekitar satu menit (2 probe × 30 detik) untuk mendeteksi koneksi mati. Menurunkan nilai-nilai ini dapat mempercepat deteksi.
+ Gunakan `tcp_user_timeout` untuk menentukan waktu tunggu maksimum untuk pengakuan.

Pengaturan TCP keepalive membantu kernel mendeteksi koneksi mati, tetapi PostgreSQL mungkin tidak bertindak sampai soket digunakan. Jika sesi menjalankan kueri panjang, koneksi mati mungkin hanya terdeteksi setelah kueri selesai. Di PostgreSQL 14 dan versi yang lebih tinggi`client_connection_check_interval`, dapat mempercepat deteksi koneksi mati dengan melakukan polling soket secara berkala selama eksekusi kueri.

## Praktik terbaik
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.BestPractices"></a>
+ **Tetapkan interval keepalive yang wajar:** Tune`tcp_user_timeout`,`tcp_keepalives_idle`, `tcp_keepalives_count` dan `tcp_keepalives_interval` untuk menyeimbangkan kecepatan deteksi dan penggunaan sumber daya.
+ **Optimalkan untuk lingkungan Anda:** Sejajarkan pengaturan dengan perilaku jaringan, kebijakan firewall, dan kebutuhan sesi.
+ **Memanfaatkan fitur PostgreSQL: Gunakan `client_connection_check_interval` di PostgreSQL** 14 dan versi yang lebih tinggi untuk pemeriksaan koneksi yang efisien.