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 |
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 |
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
INSERTmuncul. -
Refresh bertahap: Tugas
Refreshmuncul.
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';
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_historymungkin tidak mencerminkan status keberhasilan atau kegagalan secara akurat — refresh yang gagal mungkin tampak sebagaiSuccess. Untuk mengambil riwayat refresh yang sebenarnya untuk tabel-tabel ini: 1. Dapatkancron_job_namedarihologres.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);
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);
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.