Topik ini menjelaskan cara mengelola dan mendiagnosis koneksi ke instans Hologres.
Ikhtisar pengelolaan koneksi dan kueri
Hologres kompatibel dengan PostgreSQL dan memungkinkan Anda mengkueri tampilan pg_stat_activity untuk memperoleh informasi tentang koneksi ke instans Hologres. Hal ini membantu Anda menganalisis status koneksi dan melakukan diagnostik pada eksekusi SQL. Untuk informasi selengkapnya, lihat Kueri tampilan pg_stat_activity dalam topik ini. Topik ini mencakup bagian-bagian berikut:
Menanyakan Jumlah Maksimum Default Koneksi ke Instans Hologres: Jumlah maksimum default koneksi ke instans Hologres bervariasi berdasarkan spesifikasi instans. Anda dapat mengeksekusi pernyataan SQL untuk menanyakan jumlah maksimum default koneksi ke instans Hologres Anda.
Mengelola Koneksi di Konsol HoloWeb: Anda dapat menggunakan HoloWeb untuk melihat dan mengelola koneksi aktif ke instans Hologres Anda. Misalnya, Anda dapat menutup koneksi.
Menanyakan Informasi Koneksi dengan Menjalankan Pernyataan SQL: Anda dapat menanyakan jumlah koneksi ke instans atau database, menanyakan status setiap koneksi, dan menutup koneksi yang tidak aktif. Ini membantu Anda mengelola instans Hologres Anda dengan lebih baik.
Melepaskan Koneksi: Anda dapat mengeksekusi pernyataan SQL untuk melepaskan koneksi tertentu.
Menyediakan Koneksi untuk Superuser: Jika jumlah koneksi ke instans mencapai batas atas, Anda dapat menggunakan koneksi cadangan untuk terhubung ke instans dan mengelola koneksi sebagai superuser.
Jumlah Maksimum Koneksi untuk Satu Pengguna: Anda dapat mengonfigurasi jumlah maksimum koneksi untuk satu pengguna. Ini mencegah pengguna dari menggunakan sumber daya yang tidak perlu karena terlalu banyak koneksi.
Mengaktifkan Sistem untuk Secara Otomatis Melepaskan Koneksi Idle: Anda dapat mengaktifkan pelepasan otomatis koneksi idle untuk melepaskan koneksi yang tidak digunakan selama periode waktu tertentu.
Praktik Terbaik: Anda dapat mengelola koneksi berdasarkan praktik terbaik yang disediakan oleh Hologres.
Menanyakan Tampilan pg_stat_activity
Anda dapat menggunakan tampilan pg_stat_activity untuk mendiagnosis query SQL yang sedang berjalan dan memecahkan masalah. Untuk menanyakan informasi tentang koneksi ke instans Hologres dan informasi eksekusi query SQL dalam instans, jalankan pernyataan berikut:
select * from pg_stat_activity ;Tabel berikut menjelaskan bidang dalam hasil query dari tampilan pg_stat_activity.
Bidang | Deskripsi |
datid | Pengenal objek (OID) dari database yang terhubung di backend Hologres. |
datname | Nama database yang terhubung di backend Hologres. |
pid | ID proses di backend Hologres. |
usesysid | OID dari pengguna yang masuk ke backend Hologres. |
usename | Nama pengguna yang digunakan untuk membuat koneksi saat ini. |
application_name | Jenis aplikasi pada klien. Jenis aplikasi umum:
|
client_addr | Alamat IP klien. Alamat IP yang ditampilkan mungkin telah diselesaikan dan mungkin bukan alamat IP sebenarnya dari klien. |
client_hostname | Nama host klien. |
client_port | Nomor port klien. |
backend_start | Waktu mulai proses backend. |
xact_start | Waktu mulai transaksi saat ini dari proses.
|
query_start | Waktu mulai query aktif saat ini. Jika koneksi saat ini tidak aktif, nilai bidang ini adalah waktu mulai query terakhir. |
state_change | Waktu ketika status koneksi terakhir kali berubah. |
wait_event_type | Jenis acara yang sedang ditunggu oleh backend. Jika backend tidak menunggu acara apa pun, nilai bidang ini adalah NULL. Nilai valid:
|
wait_event | Nama acara yang sedang ditunggu oleh backend. Jika backend tidak menunggu acara apa pun, nilai bidang ini adalah NULL. |
state | Status koneksi. Nilai valid:
|
backend_xid | Pengenal transaksi tingkat atas di backend Hologres. |
backend_xmin | Ruang lingkup xmin di backend. |
query | Query terakhir yang dijalankan di backend. Jika nilai bidang state adalah |
backend_type | Jenis backend. Jenis yang didukung termasuk autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender, dan walwriter. Komponen eksekusi backend seperti PQE juga didukung. Catatan Perhatikan jenis |
Catatan Penggunaan
Hanya superuser yang dapat melihat informasi tentang semua koneksi. Pengguna biasa hanya dapat melihat informasi tentang koneksi mereka sendiri.
Menanyakan Jumlah Maksimum Default Koneksi ke Instans Hologres
Jumlah maksimum default koneksi ke instans Hologres bervariasi berdasarkan spesifikasi instans. Anda dapat menggunakan salah satu metode berikut untuk menanyakan jumlah maksimum koneksi yang diizinkan ke instans Hologres Anda. Pada metode kedua, nilai balik adalah jumlah maksimum default koneksi ke satu node frontend (FE). Jumlah total koneksi maksimum sama dengan jumlah maksimum koneksi ke satu node FE dikalikan dengan jumlah node FE. Untuk informasi lebih lanjut tentang jumlah maksimum node FE untuk spesifikasi instans yang berbeda, lihat Manajemen Instans.
Jalankan pernyataan berikut untuk menanyakan jumlah maksimum koneksi yang diizinkan ke instans Hologres Anda. Pernyataan ini didukung di Hologres V1.3.23 dan versi lebih baru.
select instance_max_connections();Jalankan pernyataan berikut untuk menanyakan jumlah maksimum koneksi yang diizinkan ke satu node FE. Anda dapat memperoleh jumlah maksimum koneksi yang diizinkan ke instans Hologres Anda dengan mengalikan jumlah maksimum koneksi yang diizinkan ke satu node FE dengan jumlah node FE.
show max_connections;
Mengelola Koneksi di Konsol HoloWeb
Anda dapat menggunakan HoloWeb untuk melihat dan mengelola koneksi aktif secara visual.
Masuk ke konsol HoloWeb. Untuk informasi lebih lanjut, lihat Terhubung ke HoloWeb.
Di bilah navigasi atas, klik Diagnostics and Optimization.
Di panel navigasi kiri, klik Active Connection Management.
Pada halaman Active Connection Management, Anda dapat mengonfigurasi parameter untuk melihat koneksi instans dan informasi terkait.
CatatanHanya superuser yang dapat melihat informasi tentang koneksi semua instans. Pengguna biasa hanya dapat melihat informasi tentang koneksi instans mereka sendiri.
Parameter dijelaskan sebagai berikut.
Parameter
Deskripsi
Instance name
Nama instans Hologres.
Database
Nama database Hologres. Anda dapat memilih database yang ingin Anda lihat koneksinya. Jika Anda tidak menentukan parameter ini, koneksi ke semua database akan ditampilkan secara default.
Database
Nama database yang terhubung.
CatatanKoneksi ke database bernama Postgres adalah koneksi O&M yang berjalan di backend. Koneksi ini dapat diabaikan.
Nama Pengguna
Akun pengguna yang digunakan untuk membuat koneksi.
Alamat Klien
Alamat IP klien. Alamat IP yang ditampilkan mungkin bukan alamat IP sebenarnya dari klien tetapi alamat IP keluar router.
Nama Aplikasi
Nama aplikasi yang terhubung ke instans.
Status
Status koneksi, yang dapat berupa salah satu dari berikut.
active: Koneksi aktif.
idle: Menunjukkan bahwa sumber daya tidak digunakan.
idle in transaction: Koneksi idle dalam transaksi jangka panjang.
idle in transaction (Aborted): Koneksi idle dalam transaksi gagal.
Mulai Query
Waktu mulai query.
Query
Query yang dieksekusi.
CatatanJika pernyataan query panjang, pernyataan tersebut mungkin dipotong.
PID
ID proses (PID) dari query.
Operasi
Kill: Anda dapat langsung menutup satu atau beberapa koneksi yang tidak sesuai harapan Anda.
Details: Menampilkan detail koneksi.
Menanyakan Informasi Koneksi dengan Menjalankan Pernyataan SQL
Anda dapat menjalankan pernyataan SQL untuk menanyakan informasi koneksi.
Menanyakan jumlah koneksi ke database saat ini.
Anda dapat menggunakan perintah berikut untuk melihat jumlah koneksi ke database saat ini. Untuk informasi selengkapnya tentang metrik, lihat Deskripsi metrik.
Sintaksis yang didukung di 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;Hologres V0.10 dan versi yang lebih lama.
SELECT datname ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname;
Menanyakan status setiap koneksi.
Anda dapat mengkueri status setiap koneksi ke instans menggunakan HoloWeb di konsol Hologres. Anda juga dapat mengeksekusi pernyataan berikut untuk mengkueri semua koneksi Java Database Connectivity (JDBC) atau PostgreSQL dalam status tertentu dengan mengkueri tampilan pg_stat_activity:
select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';Di mana statename adalah parameter status. Nilai valid sebagai berikut:
idle: menentukan koneksi idle. Status ini menunjukkan bahwa proses sedang menunggu perintah dari klien.
active: menentukan koneksi aktif. Status ini menunjukkan bahwa proses sedang mengeksekusi pernyataan query.
idle in transaction: Status ini menunjukkan bahwa proses berada dalam transaksi tetapi tidak mengeksekusi pernyataan query.
idle in transaction (aborted): Status ini menunjukkan bahwa proses berada dalam transaksi yang berisi pernyataan query. Pernyataan query tidak dapat dieksekusi karena kesalahan sintaksis.
fastpath function call: Status ini menunjukkan bahwa proses sedang mengeksekusi fungsi
fast-path.disabled: Menonaktifkan
track activitiesuntuk proses tersebut.
Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk menanyakan koneksi idle ke instans saat ini:
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';Komponen Hologres seperti HoloWeb menggunakan koneksi JDBC. Jika jumlah maksimum koneksi ke instans Hologres Anda memenuhi persyaratan bisnis Anda, Anda tidak perlu khawatir tentang koneksi ini. Jika jumlah koneksi SQL ke instans Hologres Anda mendekati atau mencapai batas atas yang ditentukan oleh
max_connections, periksa apakah kebocoran koneksi terjadi di aplikasi Anda. Jika kebocoran koneksi terjadi, konfigurasikan batas yang masuk akal pada pool koneksi aplikasi Anda atau lepaskan koneksi idle. Untuk informasi lebih lanjut tentang cara melepaskan koneksi idle, lihat Melepaskan Koneksi dalam topik ini.Menanyakan jumlah koneksi ke setiap node FE.
Di Hologres V1.3.23 dan versi lebih baru, Anda dapat menjalankan pernyataan berikut untuk menanyakan jumlah koneksi ke setiap node FE dari instans Hologres. Pernyataan ini tidak mengembalikan informasi tentang node FE yang tidak memiliki koneksi.
select * from hologres.hg_connections;Deskripsi bidang dalam hasil yang dikembalikan:
fe_id: ID node FE.
used_connections: jumlah koneksi yang digunakan oleh node FE.
max_connections: jumlah maksimum koneksi yang diizinkan ke node FE. Nilai bidang ini sama dengan nilai balik perintah
show max_connections.
Melepaskan Koneksi
Dalam skenario berikut, jumlah koneksi ke instans Hologres atau ke satu node FE dari instans Hologres mencapai batas atas:
Jumlah koneksi mencapai atau melebihi nilai parameter
max_connections. Anda dapat melihat jumlah koneksi di tab Informasi Pemantauan halaman detail instans di konsol Hologres.Pesan kesalahan berikut dikembalikan:
FATAL: sorry, too many clients already connection limit exceeded for superusers.Pesan kesalahan berikut dikembalikan:
FATAL: remaining connection slots are reserved for non-replication superuser connections.
Dalam skenario ini, Anda dapat terhubung ke instans Hologres sebagai superuser dan menjalankan pernyataan berikut untuk memeriksa apakah ada koneksi idle yang berlebihan:
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';Jika hasil kueri menunjukkan bahwa terdapat proses idle berlebihan dan Anda memastikan bahwa koneksi tersebut tidak berguna, Anda dapat mengeksekusi pernyataan berikut untuk melepaskan koneksi idle sesuai kebutuhan. Anda dapat menggunakan nilai bidang pid dalam hasil kueri sebelumnya untuk menentukan koneksi yang ingin Anda lepaskan. Untuk informasi selengkapnya tentang bidang dalam pernyataan tersebut, lihat bidang-bidang dalam hasil kueri tampilan pg_stat_activity dalam topik ini.
select pg_cancel_backend(<pid>); -- batalkan kueri pada koneksi
select pg_terminate_backend(<pid>); -- hentikan proses koneksi backend yang sesuai
-- Hentikan 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 yang dicadangkan Administrator
Hologres secara otomatis menyediakan koneksi untuk superuser instans Hologres. Jumlah koneksi cadangan ke instans bervariasi berdasarkan spesifikasi instans. Untuk informasi lebih lanjut, lihat Manajemen Instans. Untuk instans Hologres, koneksi cadangan digunakan oleh superuser untuk mengelola koneksi ketika jumlah koneksi ke instans mencapai batas atas. Misalnya, superuser dapat menutup koneksi idle. Jumlah maksimum koneksi yang dapat digunakan pengguna biasa sama dengan jumlah maksimum koneksi dikurangi jumlah koneksi cadangan. Jika Anda adalah pengguna biasa, kami sarankan Anda tidak menggunakan akun superuser untuk mengelola database. Jika tidak, tidak ada koneksi yang dicadangkan, dan koneksi tidak dapat dilepaskan.
Jumlah Maksimum Koneksi untuk Satu Pengguna
Konfigurasikan Jumlah Maksimum Koneksi untuk Satu Pengguna
Hologres kompatibel dengan PostgreSQL dan memungkinkan Anda mengonfigurasi jumlah maksimum koneksi untuk satu pengguna. Hal ini mencegah satu pengguna menduduki sumber daya berlebihan akibat koneksi berlebihan.
Anda dapat menjalankan pernyataan berikut untuk mengonfigurasi jumlah maksimum koneksi ke satu node FE untuk satu pengguna. Jika instans berisi beberapa node, jumlah maksimum koneksi ke instans untuk satu pengguna dihitung sebagai berikut: Jumlah maksimum koneksi ke satu node FE × Jumlah node.
Contoh sintaks
ALTER ROLE "ID Akun Alibaba Cloud" CONNECTION LIMIT <number>;Parameter
Parameter
Deskripsi
ID Akun
ID pengguna (UID) dari akun yang ingin Anda kelola. Akun tersebut dapat berupa akun Alibaba Cloud atau pengguna RAM. Jika akun tersebut adalah pengguna RAM, tambahkan p4_ sebelum UID.
Untuk informasi lebih lanjut, lihat Ikhtisar.
number
Jumlah maksimum koneksi.
Nilai valid: [-1 , N]. Nilai -1 menunjukkan bahwa tidak ada batasan yang diberlakukan pada jumlah koneksi untuk satu pengguna.
Contoh
Contoh berikut menunjukkan cara menetapkan jumlah maksimum koneksi menjadi 1 untuk pengguna RAM yang UID-nya adalah 283813xxxx:
ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1;
Menanyakan Jumlah Maksimum Koneksi ke Satu Node untuk Setiap Pengguna
Anda dapat menjalankan pernyataan berikut untuk menanyakan jumlah maksimum koneksi ke satu node yang dikonfigurasi untuk setiap pengguna.
SELECT rolname, rolconnlimit
FROM pg_roles
WHERE rolconnlimit <> -1;Hasil berikut dikembalikan:
rolname | rolconnlimit
---------------+--------------
p4_283813xxxx | 1
(1 row)Mengaktifkan Sistem untuk Secara Otomatis Melepaskan Koneksi Idle
Jika jumlah koneksi ke instans Hologres Anda mendekati atau mencapai batas atas, kemungkinan terjadi kebocoran koneksi. Anda dapat mengaktifkan pelepasan otomatis koneksi idle untuk melepaskan koneksi yang tidak digunakan selama periode waktu tertentu. Jika koneksi tetap idle selama periode waktu tertentu, koneksi tersebut akan ditutup secara otomatis. Koneksi yang tidak sedang mengeksekusi pernyataan SQL dianggap idle.
Batasan
Hologres V0.10.25 dan versi lebih baru mendukung pelepasan otomatis koneksi idle. Jika versi instans Hologres Anda lebih lama dari V0.10.25, tingkatkan instans Hologres Anda secara manual di konsol Hologres atau bergabunglah dengan grup DingTalk untuk dukungan teknis. Untuk informasi lebih lanjut tentang cara meningkatkan instans Hologres Anda secara manual di konsol Hologres, lihat Kesalahan umum persiapan peningkatan dalam topik "Peningkatan Instans". Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan dukungan online untuk Hologres.
Contoh sintaks
Tingkat Sesi
-- Jika koneksi idle selama 600.000 ms (10 menit), koneksi akan ditutup secara otomatis. SET idle_session_timeout = 600000;Tingkat Database
-- Jika koneksi idle selama 600.000 ms (10 menit), koneksi akan ditutup secara otomatis. ALTER DATABASE <db_name> SET idle_session_timeout = 600000;Parameter db_name menentukan nama database tempat Anda ingin mengaktifkan pelepasan otomatis koneksi idle.
Praktik terbaik penggunaan koneksi
Topik ini menjelaskan praktik terbaik untuk koneksi Hologres.
Gunakan akun superuser dengan benar.
Kami sarankan Anda tidak menggunakan akun superuser untuk mengelola instans Hologres Anda atau terhubung ke aplikasi. Jika tidak, jika jumlah koneksi ke instans mencapai batas atas, Anda tidak dapat menggunakan akun superuser untuk terhubung ke instans.
Anda dapat membuat akun superuser sebagai akun O&M. Dengan cara ini, jika jumlah koneksi ke instans mencapai batas atas atau jika query berhenti merespons, Anda dapat menggunakan akun O&M untuk mengelola koneksi atau query di konsol HoloWeb.
Konfigurasikan pool koneksi yang tepat.
Untuk alasan keamanan, Hologres tidak melepaskan koneksi secara otomatis di backend. Kami sarankan Anda mengonfigurasi pengaturan yang sesuai untuk pool koneksi aplikasi Anda. Dengan cara ini, koneksi idle dapat dilepaskan tepat waktu.
Kami sarankan Anda secara berkala melepaskan koneksi idle untuk mencegah mereka memengaruhi bisnis online Anda.
Kesalahan umum
Kesalahan berikut terjadi saat Anda mengeksekusi pernyataan SQL:
terminating connection due to idle state timeout.Penyebab: Periode timeout untuk melepaskan koneksi idle secara otomatis dikonfigurasi untuk instans Hologres. Setelah periode timeout yang ditentukan berakhir, koneksi ditutup secara otomatis. Kemudian, pesan kesalahan ini dikembalikan.
Solusi: Terhubung kembali ke instans Hologres, atau tingkatkan periode timeout untuk melepaskan koneksi idle secara otomatis. Untuk informasi lebih lanjut tentang cara meningkatkan periode timeout, lihat Mengaktifkan Sistem untuk Secara Otomatis Melepaskan Koneksi Idle dalam topik ini.