All Products
Search
Document Center

Hologres:Kelola tugas refresh

Last Updated:Jul 29, 2026

Tabel dinamis menjalankan tugas refresh di latar belakang berdasarkan waktu mulai dan interval refresh yang dikonfigurasi. Ketika tabel dasar berubah, tabel dinamis melakukan refresh untuk mencerminkan data terbaru. Topik ini menjelaskan cara memantau, melihat, dan mengelola tugas-tugas refresh tersebut.

Metrik pemantauan

Mulai dari Hologres V4.0.8, keempat metrik berikut tersedia untuk tugas refresh tabel dinamis. Konfigurasikan ambang batas peringatan di Cloud Monitor sesuai kebutuhan Anda. Untuk informasi selengkapnya, lihat CloudMonitor.

QPS kegagalan refresh tingkat instans

Nama metrik: Dynamic Table Refresh Failed QPS Unit: count/s (queries per second)

Metrik ini menunjukkan laju kegagalan tugas refresh di semua tabel dinamis dalam suatu instans. Dalam kondisi normal, nilainya mendekati nol.

Jika nilai ini terus-menerus bukan nol atau meningkat, buka HoloWeb untuk troubleshooting.

Latensi data

Nama metrik: Dynamic Table Lag Unit: s (detik)

Metrik ini menunjukkan seberapa jauh ketinggalan setiap tabel dinamis relatif terhadap tabel dasarnya atau titik waktu tertentu. Metrik ini mencerminkan kesegaran data.

Jika latensi terus meningkat:

Kemungkinan Penyebab

Langkah selanjutnya

Tugas refresh gagal berulang kali, atau auto-refresh dijeda

Buka Konsol HoloWeb dan periksa status tugas

Volume besar data hulu telah berubah dan sumber daya instans tidak mencukupi untuk mengimbangi

Tinjau metrik pemantauan Hologres seperti durasi refresh untuk menyelidiki bottleneck sumber daya

Durasi tugas penyegaran

Nama metrik: Dynamic Table Refresh Duration Unit: ms (milidetik)

Metrik ini menunjukkan berapa lama tugas refresh saat ini untuk setiap tabel dinamis telah berjalan. Gunakan metrik ini untuk mendeteksi apakah epoch refresh semakin panjang.

Jika nilai tiba-tiba meningkat atau tetap jauh di atas rata-rata historisnya:

Penyebab kemungkinan

Langkah selanjutnya

Bottleneck sumber daya

Periksa metrik CPU, memori, dan penyimpanan instans

Peningkatan volume data hulu

Kueri hologres.hg_dynamic_table_refresh_history untuk membandingkan durasi saat ini dengan garis dasar historis

QPM kegagalan refresh per tabel

Nama metrik: Dynamic Table Refresh Failed QPM Unit: count/m (jumlah per menit)

Metrik ini menunjukkan jumlah tugas refresh yang gagal per menit untuk setiap tabel dinamis. Dalam kondisi normal, nilainya nol.

Menginterpretasikan metrik ini:

Pola yang diamati

Makna

Aksi

Terdapat lonjakan sesekali, refresh berikutnya berhasil

Tekanan sistem sementara atau peningkatan instans

Tidak perlu tindakan

Nilai tetap di atas nol secara persisten untuk tabel tertentu

Kegagalan refresh persisten

Kueri hologres.hg_dynamic_table_refresh_log('<table_name>') untuk mengambil detail error dari tugas refresh yang gagal, lalu selesaikan masalah mendasarnya. Untuk petunjuk, lihat Lihat tugas refresh yang sedang berjalan.

Lihat tugas refresh

Lihat tugas refresh yang sedang berjalan

Menggunakan hologres.hg_dynamic_table_refresh_activity

Tabel sistem hologres.hg_dynamic_table_refresh_activity menampilkan tugas refresh yang sedang berjalan — termasuk refresh penuh dan bertahap — beserta konsumsi sumber dayanya. Untuk deskripsi bidang, lihat hologres.hg_dynamic_table_refresh_activity.

Tabel sistem ini hanya didukung di Hologres V3.0, serta V4.0.8 dan versi setelahnya.
-- Lihat tugas refresh yang sedang berjalan
SELECT
    pid,
    query_id,
    refresh_mode,
    'RUNNING' AS status,
    refresh_start,
    extract(epoch FROM duration) AS duration,                            -- milidetik
    serverless_queue_time_ms::bigint / 1000 AS serverless_queue_time_sec,
    serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_sec,
    serverless_allocated_cores
FROM hologres.hg_dynamic_table_refresh_activity
WHERE datname = '${database}'
  AND table_write = quote_ident('${schema}') || '.' || quote_ident('${tableName}')
ORDER BY refresh_start DESC
LIMIT 2000;

Menggunakan hg_stat_activity

Tampilan sistem hg_stat_activity juga menampilkan tugas refresh yang sedang berjalan. Tampilannya berbeda berdasarkan mode refresh:

  • Refresh penuh: Pernyataan INSERT muncul.

  • Refresh bertahap: Tugas Refresh muncul.

Menggunakan hologres.hg_dynamic_table_refresh_log

Untuk tabel dinamis yang dibuat dengan sintaksis 3.1, hologres.hg_dynamic_table_refresh_log menyediakan tampilan log tugas refresh per tabel. Contoh berikut mengkueri semua tugas refresh yang sedang berjalan untuk tabel tertentu:

-- Lihat tugas refresh yang sedang berjalan untuk tabel tertentu (sintaksis 3.1)
SELECT query_job_id, status
FROM hologres.hg_dynamic_table_refresh_log('<dynamic_table_name>')
WHERE status = 'RUNNING';
Catatan

hologres.hg_dynamic_table_refresh_log hanya didukung untuk tabel dinamis yang dibuat dengan sintaksis 3.1. Untuk tabel dinamis yang dibuat dengan sintaksis 3.0, gunakan hologres.hg_dynamic_table_refresh_activity atau hg_stat_activity.

query_job_id yang dikembalikan oleh tampilan ini juga digunakan saat membatalkan tugas refresh yang sedang berjalan. Untuk informasi selengkapnya, lihat Tabel dinamis yang dibuat dengan sintaksis baru 3.1.

Menggunakan metrik pemantauan

Periksa metrik seperti QPS, RPS (records per second), dan latensi untuk mengonfirmasi status eksekusi. Command Type bernilai refresh menunjukkan tugas refresh tabel dinamis. Untuk informasi selengkapnya, lihat Metrik pemantauan.

Jika tugas refresh dijalankan pada sumber daya Serverless Computing, Anda juga dapat memeriksa statusnya di metrik Serverless Computing.

Lihat riwayat tugas refresh

Menggunakan hologres.hg_dynamic_table_refresh_history

Tabel sistem hologres.hg_dynamic_table_refresh_history mencatat riwayat semua tugas refresh — penuh, bertahap, dan manual — selama sebulan terakhir. Untuk deskripsi bidang, lihat hologres.hg_dynamic_table_refresh_history.

Catatan disimpan selama satu bulan. Data yang lebih tua dari satu bulan tidak dapat dikueri.
Hanya pemilik tabel yang dapat melihat riwayat refresh mereka sendiri. Pengguna dengan role superuser dapat melihat semua catatan refresh.

Contoh 1: Lihat tugas refresh bertahap dari hari kemarin

SELECT
    query_id,
    refresh_mode,
    status,
    refresh_start,
    duration,
    refresh_latency / 1000 AS refresh_latency_second,
    serverless_allocated_cores,
    queue_time_ms::bigint / 1000 AS queue_time_second,
    serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_second
FROM hologres.hg_dynamic_table_refresh_history
WHERE refresh_start >= CURRENT_DATE - INTERVAL '1 day'
  AND dynamic_table_name = '<dynamic_table>'
  AND refresh_mode = 'incremental'
ORDER BY refresh_start DESC
LIMIT 100;

Contoh 2: Lihat semua tugas refresh dalam instans dari hari kemarin

SELECT
    query_id,
    refresh_mode,
    status,
    refresh_start,
    duration,
    refresh_latency / 1000 AS refresh_latency_second,
    serverless_allocated_cores,
    queue_time_ms::bigint / 1000 AS queue_time_second,
    serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_second
FROM hologres.hg_dynamic_table_refresh_history
WHERE refresh_start >= CURRENT_DATE - INTERVAL '1 day';

Contoh 3: Lihat tugas refresh untuk tabel tertentu dari hari kemarin

SELECT
    query_id,
    refresh_mode,
    status,
    refresh_start,
    duration,
    refresh_latency / 1000 AS refresh_latency_second,
    serverless_allocated_cores,
    queue_time_ms::bigint / 1000 AS queue_time_second,
    serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_second
FROM hologres.hg_dynamic_table_refresh_history
WHERE schema_name = '<schema_name>'
  AND dynamic_table_name = '<dynamic_table>'
  AND refresh_start >= CURRENT_DATE - INTERVAL '1 day';
Untuk tabel dinamis full-refresh yang dibuat dengan sintaksis lama 3.0, hologres.hg_dynamic_table_refresh_history mungkin tidak mencerminkan status keberhasilan atau kegagalan secara akurat — refresh yang gagal mungkin tampak sebagai Success. Untuk mengambil riwayat refresh yang sebenarnya untuk tabel-tabel ini: 1. Dapatkan cron_job_name dari hologres.hg_dynamic_table_properties. 2. Kueri catatan eksekusi cron job menggunakan nama tersebut.
-- Langkah 1: Dapatkan cron_job_name
SELECT property_value AS cron_job_name
FROM hologres.hg_dynamic_table_properties
WHERE dynamic_table_name = '<dt_name>'
  AND property_key = 'cron_job_name';

-- Langkah 2: Kueri catatan eksekusi cron job
SELECT *
FROM hologres.hg_user_cron_tasks
WHERE jobname = '<cron_job_name>'
ORDER BY start_time DESC;

Menggunakan log kueri lambat

Tugas refresh juga muncul di log kueri lambat dengan Command Type bernilai refresh. Untuk informasi selengkapnya, lihat Dapatkan dan analisis log kueri lambat.

Lihat rencana eksekusi tugas refresh

Gunakan EXPLAIN dan EXPLAIN ANALYZE pada pernyataan refresh untuk melihat rencana eksekusinya dan mengidentifikasi bottleneck performa, sama seperti yang Anda lakukan untuk kueri biasa.

EXPLAIN REFRESH DYNAMIC TABLE hmtest.dt_order_lineitem;

Contoh output:

                                                                                              QUERY PLAN
-------------------------------------------------------------------------------------------------------------
 Gather  (cost=0.00..10.13 rows=1 width=16)
   ->  Insert  (cost=0.00..10.13 rows=1 width=16)
         ->  Redistribution  (cost=0.00..10.11 rows=1 width=16)
               ->  Final HashAggregate  (cost=0.00..10.11 rows=1 width=16)
                     Group Key: orders.o_orderpriority
                     ->  Redistribution  (cost=0.00..10.11 rows=10 width=16)
                           Hash Key: orders.o_orderpriority
                           ->  Partial HashAggregate  (cost=0.00..10.11 rows=10 width=16)
                                 Group Key: orders.o_orderpriority
                                 ->  Hash Left Semi Join  (cost=0.00..10.11 rows=1000 width=8)
                                       Hash Cond: (orders.o_orderkey = lineitem.l_orderkey)
                                       ->  Redistribution  (cost=0.00..5.03 rows=1000 width=16)
                                             Hash Key: orders.o_orderkey
                                             ->  Local Gather  (cost=0.00..5.01 rows=1000 width=16)
                                                   ->  Seq Scan on orders  (cost=0.00..5.01 rows=1000 width=16)
                                                         Filter: ((o_orderdate >= '1996-07-01 00:00:00+08'::timestamp with time zone) AND (o_orderdate < '1996-10-01 00:00:00+08'::timestamp with time zone))
                                       ->  Hash  (cost=5.03..5.03 rows=1000 width=8)
                                             ->  Redistribution  (cost=0.00..5.03 rows=1000 width=8)
                                                   Hash Key: lineitem.l_orderkey
                                                   ->  Local Gather  (cost=0.00..5.03 rows=1000 width=8)
                                                         ->  Seq Scan on lineitem  (cost=0.00..5.03 rows=1000 width=8)
                                                               Filter: (l_commitdate < l_receiptdate)
 Optimizer: HQO version 2.1.0
(23 rows)

Tetapkan durasi timeout refresh

Tetapkan timeout untuk mencegah tugas refresh yang berjalan lama memblokir sumber daya. Hologres mendukung tiga tingkat konfigurasi timeout.

Timeout tingkat tabel

Tetapkan timeout tingkat tabel saat membuat tabel dinamis. Timeout ini berlaku untuk semua tugas refresh pada tabel tersebut. Contoh berikut menggunakan dataset publik tpch_10g. Sebelum menjalankan kode, impor dataset tersebut. Untuk informasi selengkapnya, lihat Buat tugas impor dataset publik.

-- Tetapkan timeout 30 menit untuk semua tugas refresh pada tabel ini
CREATE DYNAMIC TABLE tpch_q1_batch
WITH (
    refresh_mode = 'full',
    auto_refresh_enable = 'true',
    full_auto_refresh_interval = '1 hours',
    refresh_guc_statement_timeout = '30 min'
)
AS
SELECT
    l_returnflag,
    l_linestatus,
    SUM(l_quantity) AS sum_qty,
    SUM(l_extendedprice) AS sum_base_price,
    SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
    SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
    AVG(l_quantity) AS avg_qty,
    AVG(l_extendedprice) AS avg_price,
    AVG(l_discount) AS avg_disc,
    COUNT(*) AS count_order
FROM hologres_dataset_tpch_10.lineitem
WHERE l_shipdate <= DATE '1998-12-01' - INTERVAL '120' DAY
GROUP BY l_returnflag, l_linestatus;

Timeout tingkat session

Untuk refresh manual, tetapkan timeout menggunakan parameter GUC (Grand Unified Configuration) tingkat session:

SET statement_timeout = <time>;
REFRESH DYNAMIC TABLE <dynamic_schema_name.dynamic_table_name>;

Untuk informasi selengkapnya tentang pengaturan timeout, lihat Ubah timeout kueri aktif.

Timeout per-refresh

Timpa timeout untuk satu refresh manual menggunakan refresh ... WITH (refresh_guc_statement_timeout = '...'):

REFRESH DYNAMIC TABLE <schema_name.table_name> WITH (
    refresh_guc_statement_timeout = '30 min'
);

Picu refresh manual

Jalankan pernyataan berikut untuk memicu refresh segera:

REFRESH DYNAMIC TABLE <schema_name.table_name>;
Jika auto-refresh diaktifkan, refresh manual dijalankan secara paralel dengan tugas auto-refresh terjadwal. Keduanya selesai secara normal. Sistem hanya menyimpan satu salinan data terbaru.

Batalkan tugas refresh

Tabel dinamis yang dibuat dengan sintaksis baru 3.1

Batalkan tugas refresh yang sedang berjalan

Kueri query_job_id dari tugas yang sedang berjalan dari hologres.hg_dynamic_table_refresh_log, lalu batalkan menggunakan hologres.hg_internal_cancel_query_job.

-- Langkah 1: Dapatkan query_job_id
SELECT query_job_id
FROM hologres.hg_dynamic_table_refresh_log('<dt_name>')
WHERE status = 'RUNNING';

-- Langkah 2: Batalkan tugas
SELECT hologres.hg_internal_cancel_query_job('<query_job_id>');
Hanya superuser yang dapat membatalkan tugas refresh menggunakan hologres.hg_internal_cancel_query_job.

Jeda auto-refresh untuk tabel

Untuk menghentikan semua tugas refresh berikutnya di tingkat tabel, nonaktifkan auto-refresh:

ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (auto_refresh_enable = false);
Penting

Operasi ini menghentikan semua tugas refresh mendatang untuk tabel tersebut. Data dalam tabel dinamis tidak akan diperbarui hingga auto-refresh diaktifkan kembali. Untuk mengaktifkannya kembali, lihat ALTER DYNAMIC TABLE.

Tabel dinamis yang dibuat dengan sintaksis 3.0

Batalkan tugas refresh yang sedang berjalan

Jika tugas refresh berlangsung terlalu lama atau tampak macet, batalkan menggunakan pg_cancel_backend.

-- Batalkan tugas refresh berdasarkan ID prosesnya (pid)
SELECT pg_cancel_backend(<pid>);

Dapatkan pid dari hologres.hg_dynamic_table_refresh_activity atau hg_stat_activity. Untuk informasi selengkapnya, lihat Lihat tugas refresh.

Untuk membatalkan tugas refresh secara batch, gunakan metode yang sama seperti untuk kueri biasa. Untuk informasi selengkapnya, lihat Hentikan kueri.

Jeda auto-refresh untuk tabel

Untuk menghentikan semua tugas refresh berikutnya di tingkat tabel:

ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (auto_refresh_enable = false);
Penting

Operasi ini menghentikan semua tugas refresh mendatang untuk tabel tersebut. Data dalam tabel dinamis tidak akan diperbarui hingga auto-refresh diaktifkan kembali. Untuk mengaktifkannya kembali, lihat ALTER DYNAMIC TABLE.