全部产品
Search
文档中心

Hologres:Mengelola koneksi

更新时间:Jan 06, 2026

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

  • Realtime Compute for Apache Flink (versi VVR): {client_version}_ververica-connector-hologres.

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

  • Data Integration DataWorks yang memungkinkan Anda menjalankan tugas sinkronisasi batch untuk membaca data dari Hologres: datax_{jobId}.

  • Data Integration DataWorks yang memungkinkan Anda menjalankan tugas sinkronisasi batch untuk menulis data ke Hologres: {client_version}_datax_{jobId}.

  • Format nama pekerjaan untuk sinkronisasi integrasi data real-time DataWorks adalah {client_version}_streamx_{jobId}.

  • HoloWeb: holoweb.

  • MaxCompute yang memungkinkan Anda mengakses Hologres menggunakan tabel eksternal: MaxCompute.

  • Proses membaca log biner Hologres yang dimulai oleh klien Holo: holo_client_replication. Konten query tidak ditampilkan untuk tugas jenis ini.

  • Untuk aplikasi lainnya, kami sarankan Anda secara eksplisit menentukan bidang application_name dalam string koneksi jika aplikasi terhubung ke instans Hologres.

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.

  • Jika tidak ada transaksi yang aktif, string kosong dikembalikan.

  • Jika query saat ini berada di transaksi pertama proses, nilai bidang ini sama dengan nilai bidang query_start.

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:

  • LWLock: Backend sedang menunggu kunci ringan.

  • Lock: Backend sedang menunggu kunci berat. Bidang wait_event menunjukkan jenis kunci yang sedang ditunggu oleh backend.

  • BufferPin: Proses server sedang menunggu untuk mengakses buffer data, dan tidak ada proses lain yang memeriksa buffer data.

  • Activity: Proses server sedang idle. Ini mungkin proses sistem yang sedang menunggu untuk dijalankan dalam loop pemrosesan utama.

  • Extension: Proses server berada di modul ekstensi dan sedang menunggu untuk dijalankan.

  • Client: Proses server sedang menunggu query dari aplikasi pengguna. Selain itu, server mengharapkan aktivitas yang tidak terkait dengan pemrosesan internalnya terjadi.

  • PC: Proses server sedang menunggu aktivitas proses lain di server.

  • Timeout: Proses server sedang menunggu timeout.

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

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:

  • active: Menunjukkan status aktif.

  • idle: Menunjukkan status idle.

  • idle in transaction: Koneksi idle dalam transaksi jangka panjang.

  • idle in transaction (Aborted): Koneksi idle dalam transaksi gagal.

  • \N: Nilai ini menunjukkan bahwa proses bukan proses koneksi pengguna. Dalam kebanyakan kasus, status ini dikembalikan untuk proses pemeliharaan di backend sistem dan dapat diabaikan.

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 active, query yang sedang dijalankan akan ditampilkan. Jika koneksi tidak aktif, query yang terakhir dijalankan akan ditampilkan.

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 client backend. Jenis ini menunjukkan jenis koneksi aplikasi.

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.

  1. Masuk ke konsol HoloWeb. Untuk informasi lebih lanjut, lihat Terhubung ke HoloWeb.

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

  3. Di panel navigasi kiri, klik Active Connection Management.

  4. Pada halaman Active Connection Management, Anda dapat mengonfigurasi parameter untuk melihat koneksi instans dan informasi terkait.

    Catatan

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

    Catatan

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

    Catatan

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

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

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