Topik ini menjelaskan cara mendiagnosis dan mengelola koneksi untuk instans Hologres.
Pengelolaan koneksi dan kueri
Hologres kompatibel dengan PostgreSQL. Anda dapat mengkueri tampilan pg_stat_activity untuk memeriksa koneksi, menganalisis statusnya, dan mendiagnosis kueri SQL aktif. Operasi pengelolaan utama meliputi:
Mengkueri jumlah maksimum koneksi default: Spesifikasi instans yang berbeda memiliki batas koneksi default yang berbeda. Anda dapat menjalankan perintah untuk mengetahui batas instans Anda.
Mengelola koneksi di HoloWeb: Lihat, kelola, dan hentikan koneksi aktif di konsol HoloWeb.
Mengkueri informasi koneksi menggunakan SQL: Kelola instans Anda lebih baik dengan mengkueri jumlah koneksi, memeriksa status koneksi, dan menghentikan koneksi idle.
Menghentikan koneksi: Gunakan fungsi SQL untuk melepaskan sumber daya yang digunakan oleh koneksi tertentu.
Koneksi terlebih dahulu untuk Superuser: Gunakan koneksi terlebih dahulu untuk operasi manajemen saat jumlah koneksi mencapai batas maksimum.
Batasi koneksi untuk satu pengguna: Tetapkan batas koneksi untuk pengguna tertentu agar tidak mengonsumsi sumber daya secara berlebihan.
Secara otomatis menghentikan koneksi idle: Aktifkan fitur untuk secara otomatis menutup koneksi yang telah idle selama periode tertentu.
Praktik terbaik dalam menggunakan koneksi: Tinjau rekomendasi untuk menggunakan koneksi Hologres secara efektif.
Mengkueri tampilan pg_stat_activity
Tampilan pg_stat_activity merupakan alat yang andal untuk menganalisis tugas SQL aktif dan troubleshooting. Anda dapat menjalankan perintah berikut untuk melihat informasi waktu proses tentang koneksi dan kueri instans.
select * from pg_stat_activity ;Tabel berikut menjelaskan bidang-bidang dalam tampilan pg_stat_activity.
Field | Description |
datid | Object ID (OID) dari database tempat backend terhubung. |
datname | Nama database tempat backend terhubung. |
pid | ID proses (PID) backend Hologres. |
usesysid | OID pengguna yang login ke backend Hologres. |
usename | Username untuk koneksi saat ini. |
application_name | Jenis aplikasi client. Jenis aplikasi umum meliputi:
|
client_addr | Alamat IP client. Alamat IP yang ditampilkan mungkin merupakan alamat hasil resolusi dan bukan IP sumber asli. |
client_hostname | Hostname client. |
client_port | Port client. |
backend_start | Waktu proses backend dimulai. |
xact_start | Waktu mulai transaksi saat ini pada proses.
|
query_start | Waktu mulai kueri aktif saat ini. Jika status koneksi bukan |
state_change | Waktu terakhir status koneksi berubah. |
wait_event_type | Jenis event yang sedang ditunggu backend, atau NULL jika tidak ada. Nilai yang mungkin meliputi:
|
wait_event | Nama event tunggu jika backend sedang menunggu, jika tidak maka bernilai NULL. |
state | Status koneksi saat ini. Status umum meliputi:
|
backend_xid | Identifier transaksi tingkat atas dari backend Hologres. |
backend_xmin | Horizon xmin backend saat ini. |
query | Kueri terbaru yang dieksekusi pada backend. Jika state bernilai |
backend_type | Jenis backend saat ini. Jenis yang mungkin meliputi autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender, dan walwriter. Ini juga mencakup komponen eksekusi backend, seperti PQE. Catatan Perhatikan jenis |
Penggunaan
Hanya Superuser yang dapat melihat semua informasi koneksi. Pengguna standar hanya dapat melihat koneksi miliknya sendiri.
Koneksi maksimum default
Batas koneksi default bervariasi berdasarkan spesifikasi instans. Anda dapat menjalankan perintah berikut untuk mengkueri batas koneksi maksimum. Perintah ini mengembalikan batas untuk satu node FE. Total batas koneksi instans adalah nilai ini dikalikan dengan jumlah node FE. Untuk informasi lebih lanjut tentang jumlah node FE untuk setiap instans, lihat Manajemen instans.
Mengkueri jumlah maksimum koneksi untuk seluruh instans. Perintah ini didukung di Hologres V1.3.23 dan versi lebih baru.
select instance_max_connections();Mengkueri jumlah maksimum koneksi untuk satu node FE. Total batas koneksi instans adalah jumlah node FE dikalikan dengan nilai ini.
show max_connections;
Mengelola koneksi di HoloWeb
Anda dapat melihat dan mengelola koneksi aktif di konsol HoloWeb.
Login ke konsol HoloWeb. Untuk informasi lebih lanjut, lihat Hubungkan ke HoloWeb dan jalankan kueri SQL.
Di bilah navigasi atas, klik Diagnostics and Optimization.
Di panel navigasi kiri, klik Connections.
Di halaman Connections, konfigurasikan parameter untuk melihat koneksi dan informasi terkait untuk instans Anda.
CatatanHanya akun Superuser yang dapat melihat semua informasi koneksi. Pengguna standar hanya dapat melihat koneksi miliknya sendiri.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Description
Instance name
Nama instans Hologres.
Database
Nama database Hologres. Anda dapat memilih database tertentu. Jika dibiarkan kosong, koneksi ke semua database akan ditampilkan.
Database
Nama database yang terhubung.
CatatanJika nama database adalah Postgres, ini menunjukkan koneksi maintenance backend, yang dapat diabaikan.
User Name
Akun pengguna untuk koneksi.
Client Address
Ini mungkin merupakan alamat IP outbound yang dirutekan, bukan IP sumber asli.
Application Name
Nama aplikasi yang membuat koneksi.
State
Status koneksi. Status umum meliputi:
active: Koneksi aktif.
idle: Koneksi idle.
idle in transaction: Koneksi idle dalam transaksi jangka panjang.
idle in transaction (Aborted): Koneksi idle dalam transaksi gagal.
Query Start
Waktu mulai kueri.
Query
Kueri yang dieksekusi.
CatatanKueri panjang mungkin dipotong.
PID
ID proses (PID) kueri.
Operation
Kill: Hentikan koneksi tak terduga secara individual atau batch.
Details: Klik untuk melihat informasi detail tentang koneksi.
Mengkueri informasi koneksi menggunakan SQL
Jika Anda lebih suka menggunakan SQL untuk mengkueri informasi koneksi, Anda dapat melakukan operasi berikut.
Mengkueri jumlah koneksi ke database saat ini.
Anda dapat menjalankan perintah berikut untuk melihat jumlah koneksi ke database saat ini. Untuk informasi lebih lanjut tentang bidang-bidang tersebut, lihat Mengkueri tampilan pg_stat_activity.
Untuk Hologres V1.1 dan versi lebih baru:
SELECT datname::TEXT ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname::TEXT;Untuk Hologres V0.10 dan versi lebih lama:
SELECT datname ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname;
Menampilkan status setiap koneksi.
Anda dapat menggunakan HoloWeb di Konsol Hologres untuk melihat status koneksi setiap instans, atau eksekusi pernyataan berikut untuk mengkueri tampilan pg_stat_activity guna mendapatkan status semua koneksi JDBC atau PSQL.
select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';Ganti
<statename>dengan salah satu parameter status berikut:idle: Koneksi idle. Proses sedang menunggu perintah client baru.
active: Koneksi aktif, di mana proses sedang mengeksekusi kueri.idle in transaction: Proses berada dalam transaksi tetapi tidak sedang mengeksekusi kueri.idle in transaction (aborted): Proses berada dalam transaksi gagal, dan proses tidak sedang mengeksekusi kueri.fastpath function call: Menunjukkan bahwa proses sedang mengeksekusi fungsi
fast-path.disabled: Menunjukkan bahwa
track activitiesuntuk proses dinonaktifkan.
Sebagai contoh, Anda dapat menjalankan perintah berikut untuk mengkueri koneksi idle di instans saat ini.
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';Komponen periferal Hologres, seperti HoloWeb, menggunakan JDBC dan mengonsumsi sejumlah koneksi tertentu. Jika Anda memiliki jumlah koneksi yang cukup, Anda tidak perlu khawatir tentang penggunaan ini. Jika jumlah koneksi SQL secara konsisten mendekati atau mencapai
max_connections, ini menunjukkan bahwa Anda harus memeriksa aplikasi Anda untuk kebocoran koneksi dan menetapkan ukuran kolam koneksi yang sesuai. Atau, Anda dapat melepaskan koneksi idle seperti yang dijelaskan pada bagian berikut. Untuk informasi lebih lanjut, lihat Melepaskan koneksi.Menampilkan jumlah koneksi pada setiap node akses
Anda dapat mengkueri jumlah koneksi saat ini pada setiap node FE instans. Fitur ini didukung di Hologres V1.3.23 dan versi lebih baru. Node FE tanpa koneksi aktif tidak muncul dalam hasil kueri.
select * from hologres.hg_connections;Tabel berikut menjelaskan bidang-bidang dalam hasil kueri.
fe_id: ID node FE.used_connections: Jumlah koneksi yang sedang digunakan pada node FE.max_connections: Jumlah maksimum koneksi untuk node FE, yang sama dengan nilai kembali perintah
show max_connections.
Menghentikan koneksi
Kondisi berikut menunjukkan bahwa batas koneksi untuk sistem atau node akses tertentu telah tercapai:
Jika jumlah koneksi mencapai atau melebihi nilai
max_connections, Anda dapat melihat jumlah koneksi di halaman Monitoring and Alarms di konsol Hologres.Terjadi error
FATAL: sorry, too many clients already connection limit exceeded for superusers.Terjadi error
FATAL: remaining connection slots are reserved for non-replication superuser connections.
Jika Anda mengalami masalah ini, hubungkan ke instans dengan akun Superuser dan jalankan pernyataan berikut untuk memeriksa apakah terdapat terlalu banyak koneksi idle.
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';Jika hasil kueri menunjukkan jumlah proses idle yang tidak perlu secara berlebihan, temukan pid dari hasil tersebut dan jalankan pernyataan berikut untuk melepaskan koneksi idle. Untuk informasi lebih lanjut tentang bidang-bidang tersebut, lihat Mengkueri tampilan pg_stat_activity.
select pg_cancel_backend(<pid>); -- Membatalkan kueri pada koneksi.
select pg_terminate_backend(<pid>); -- Menghentikan proses koneksi backend yang sesuai.
-- Menghentikan proses koneksi backend IDLE secara batch untuk melepaskan koneksi.
SELECT pg_terminate_backend(pid)
,query
,datname
,usename
,application_name
,client_addr
,client_port
,backend_start
,state
FROM pg_stat_activity
WHERE length(query) > 0
AND pid != pg_backend_pid()
AND backend_type = 'client backend'
AND state = 'idle'
AND application_name != 'hologres'
AND query not like '%pg_cancel_backend%';Koneksi terlebih dahulu untuk Superuser
Hologres menyediakan sejumlah koneksi terlebih dahulu untuk Superuser. Jumlah koneksi terlebih dahulu bervariasi berdasarkan spesifikasi instans. Untuk informasi lebih lanjut, lihat Manajemen instans. Koneksi terlebih dahulu ini digunakan untuk tugas manajemen, seperti menghentikan koneksi idle saat batas koneksi maksimum tercapai. Jumlah maksimum koneksi yang tersedia untuk pengguna standar adalah max_connections dikurangi jumlah koneksi terlebih dahulu. Kami merekomendasikan agar Anda tidak menggunakan akun Superuser untuk operasi database reguler. Hal ini dapat menghabiskan semua koneksi yang tersedia, sehingga mencegah Anda menggunakan saluran administratif untuk melepaskannya.
Batas koneksi pengguna
Tetapkan batas koneksi pengguna
Anda dapat menetapkan batas koneksi untuk pengguna tertentu agar tidak mengonsumsi terlalu banyak koneksi dan membuang sumber daya.
Jalankan pernyataan berikut untuk membatasi jumlah maksimum koneksi untuk satu pengguna pada satu node akses. Jika instans memiliki beberapa node, batas koneksi total pengguna adalah (koneksi per node) * (jumlah node).
Sintaks
ALTER ROLE "Alibaba Cloud account ID" CONNECTION LIMIT <number>;Parameter
Parameter
Description
Alibaba Cloud account ID
ID akun yang akan dibatasi. Untuk Pengguna RAM, tambahkan awalan
p4_pada UID akun.Untuk informasi lebih lanjut tentang akun, lihat Ikhtisar akun.
number
Batas koneksi.
Nilai harus berada dalam rentang [-1, N]. Nilai -1 menghapus batas koneksi pengguna.
Contoh
Contoh berikut membatasi Pengguna RAM
283813xxxxhingga maksimal satu koneksi per node.ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1;
Lihat batas koneksi pengguna
Jalankan pernyataan berikut untuk melihat batas koneksi per node yang saat ini dikonfigurasi untuk pengguna instans.
SELECT rolname, rolconnlimit
FROM pg_roles
WHERE rolconnlimit <> -1;Contoh hasil kueri:
rolname | rolconnlimit
---------------+--------------
p4_283813xxxx | 1
(1 row)Secara otomatis menghentikan koneksi idle
Jika jumlah koneksi ke instans secara konsisten mendekati batas atas, aplikasi Anda mungkin mengalami kebocoran koneksi. Anda dapat mengaktifkan penghentian otomatis koneksi idle untuk melepaskan sumber daya. Saat koneksi idle lebih lama dari waktu yang ditentukan, koneksi tersebut akan secara otomatis diputus.
Batasan
Penghentian otomatis koneksi idle hanya didukung di Hologres V0.10.25 dan versi lebih baru. Jika instans Anda menjalankan versi sebelumnya, lihat Error umum yang terjadi saat upgrade atau bergabunglah dengan grup DingTalk Hologres untuk meminta upgrade instans. Untuk informasi tentang cara bergabung dengan grup DingTalk untuk dukungan online, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?
Sintaks
Tingkat session
-- Secara otomatis memutus koneksi jika telah idle selama 10 menit (600.000 milidetik). SET idle_session_timeout = 600000;Tingkat database
-- Secara otomatis memutus koneksi ke database ini jika telah idle selama 10 menit (600.000 milidetik). ALTER DATABASE <db_name> SET idle_session_timeout = 600000;Ganti
<db_name>dengan nama database tempat Anda ingin mengaktifkan penghentian otomatis koneksi idle.
Praktik terbaik koneksi
Ikuti praktik terbaik berikut dalam menggunakan koneksi Hologres.
Gunakan akun Superuser secara bijak
Jangan gunakan akun Superuser untuk menghubungkan aplikasi atau untuk operasi instans reguler. Jika jumlah koneksi melebihi batas instans, bahkan akun Superuser pun mungkin tidak dapat terhubung.
Kami merekomendasikan membuat akun Superuser khusus untuk operasi. Anda dapat menggunakan akun ini untuk login ke HoloWeb dan mengelola koneksi serta kueri dalam situasi darurat, seperti saat batas koneksi tercapai atau kueri hang.
Konfigurasikan kolam koneksi yang tepat
Secara default, Hologres tidak secara otomatis menghentikan koneksi idle untuk memastikan stabilitas bisnis. Kami merekomendasikan agar aplikasi Anda menggunakan kolam koneksi yang andal untuk segera melepaskan koneksi idle.
Bersihkan koneksi idle secara berkala untuk mencegahnya mengonsumsi terlalu banyak sumber daya dan memengaruhi layanan online.
Error umum
Pesan error dikembalikan selama eksekusi SQL:
terminating connection due to idle state timeout.Penyebab: Koneksi secara otomatis dihentikan karena melebihi timeout idle yang dikonfigurasi.
Solusi: Hubungkan ulang ke instans atau tingkatkan timeout koneksi idle. Untuk informasi tentang cara mengubah timeout koneksi idle, lihat Secara otomatis menghentikan koneksi idle.