All Products
Search
Document Center

Hologres:Mengelola koneksi

Last Updated:May 22, 2026

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 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:

  • Realtime Compute for Apache Flink: {client_version}_ververica-connector-hologres.

  • Open-source Flink: {client_version}_hologres-connector-flink.

  • DataWorks Data Integration untuk sinkronisasi batch (baca dari Hologres): datax_{jobId}.

  • DataWorks Data Integration untuk sinkronisasi batch (tulis ke Hologres): {client_version}_datax_{jobId}.

  • DataWorks Data Integration untuk sinkronisasi real-time: {client_version}_streamx_{jobId}.

  • HoloWeb: holoweb.

  • Akses Hologres menggunakan tabel eksternal di MaxCompute: MaxCompute.

  • Proses yang dimulai oleh Holo Client untuk membaca binlog Hologres: holo_client_replication. Konten kueri tidak ditampilkan untuk jenis tugas ini.

  • Untuk aplikasi lain, kami merekomendasikan agar Anda secara eksplisit menentukan application_name dalam string koneksi.

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.

  • Bidang ini bernilai null jika tidak ada transaksi aktif.

  • Jika kueri saat ini merupakan transaksi pertama dalam proses ini, nilai ini sama dengan query_start.

query_start

Waktu mulai kueri aktif saat ini. Jika status koneksi bukan active, ini adalah waktu mulai kueri sebelumnya.

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:

  • LWLock: Backend sedang menunggu lightweight lock.

  • Lock: Backend sedang menunggu heavyweight lock. Bidang wait_event mengidentifikasi jenis lock yang ditunggu.

  • BufferPin: Proses server sedang menunggu akses ke buffer data sementara tidak ada proses lain yang memeriksa buffer tersebut.

  • Activity: Proses server sedang idle. Ini digunakan untuk proses sistem yang menunggu aktivitas dalam loop pemrosesan utamanya.

  • Extension: Proses server sedang menunggu aktivitas dalam modul ekstensi.

  • Client: Proses server sedang menunggu kueri dari aplikasi client dan mengharapkan sesuatu terjadi yang tidak terkait dengan pemrosesan internalnya.

  • IPC: Proses server sedang menunggu aktivitas dari proses lain di server.

  • Timeout: Proses server sedang menunggu timeout terjadi.

  • IO: Proses server sedang menunggu operasi I/O selesai.

wait_event

Nama event tunggu jika backend sedang menunggu, jika tidak maka bernilai NULL.

state

Status koneksi saat ini. Status umum meliputi:

  • active: Koneksi sedang mengeksekusi kueri.

  • idle: Koneksi sedang menunggu perintah client baru.

  • idle in transaction: Koneksi berada dalam transaksi tetapi tidak sedang mengeksekusi kueri.

  • idle in transaction (Aborted): Koneksi berada dalam transaksi gagal dan tidak sedang mengeksekusi kueri.

  • \N (Kosong): Menunjukkan proses non-pengguna, biasanya proses latar belakang sistem untuk maintenance yang dapat diabaikan.

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 active, kueri yang sedang berjalan akan ditampilkan. Pada semua status lain, kueri terakhir yang dieksekusi akan ditampilkan.

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 client backend, yang merepresentasikan koneksi aplikasi.

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.

  1. Login ke konsol HoloWeb. Untuk informasi lebih lanjut, lihat Hubungkan ke HoloWeb dan jalankan kueri SQL.

  2. Di bilah navigasi atas, klik Diagnostics and Optimization.

  3. Di panel navigasi kiri, klik Connections.

  4. Di halaman Connections, konfigurasikan parameter untuk melihat koneksi dan informasi terkait untuk instans Anda.

    Catatan

    Hanya 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.

    Catatan

    Jika 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.

    Catatan

    Kueri 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.

  1. 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;
  2. 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 activities untuk 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.

  3. 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 283813xxxx hingga 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.