Jika tabel dasar dari sumber data Tabel Dinamis berubah, Anda harus melakukan refresh pada Tabel Dinamis tersebut untuk memperbarui datanya. Tabel Dinamis menjalankan task refresh secara otomatis di latar belakang berdasarkan waktu mulai dan interval yang telah dikonfigurasi. Topik ini menjelaskan cara melihat dan mengelola task refresh untuk Tabel Dinamis.
Lihat task refresh
Lihat tugas penyegaran yang berjalan
Gunakan tabel sistem hologres.hg_dynamic_table_refresh_activity
Anda dapat menggunakan tabel sistem hologres.hg_dynamic_table_refresh_activity untuk melihat task refresh yang sedang berjalan, termasuk refresh penuh dan bertahap, serta konsumsi resource-nya. Untuk informasi lebih lanjut mengenai bidang-bidang dalam tabel sistem hologres.hg_dynamic_table_refresh_activity, lihat tabel sistem hologres.hg_dynamic_table_refresh_activity.
Tabel sistem ini hanya didukung di Hologres V3.0, V4.0.8, dan versi yang lebih baru.
--Lihat task 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;Gunakan tampilan sistem hg_stat_activity
Anda dapat menggunakan tampilan sistem hg_stat_activity untuk melihat task refresh yang sedang berjalan. Informasi yang ditampilkan di hg_stat_activity bervariasi tergantung pada mode refresh:
Refresh penuh: Menampilkan pernyataan INSERT.
Refresh bertahap: Menampilkan task Refresh.
Lihat task refresh menggunakan metrik pemantauan
Anda dapat melihat metrik seperti permintaan per detik (QPS), catatan per detik (RPS), dan latensi untuk memeriksa status task refresh Tabel Dinamis. Jenis Perintah `refresh` menunjukkan adanya task refresh Tabel Dinamis. Untuk informasi lebih lanjut mengenai metrik pemantauan, lihat Metrik pemantauan di Konsol Hologres.
Jika task refresh Tabel Dinamis dijalankan pada resource Serverless Computing, Anda juga dapat melihat metrik Serverless Computing yang relevan.
Anda dapat membuat aturan alert untuk task refresh Tabel Dinamis di CloudMonitor. Untuk informasi lebih lanjut, lihat CloudMonitor.
Lihat riwayat task refresh
Gunakan tabel sistem hologres.hg_dynamic_table_refresh_history
Tabel sistem hologres.hg_dynamic_table_refresh_history mencatat riwayat semua task refresh Tabel Dinamis selama sebulan terakhir, termasuk refresh penuh, bertahap, dan manual. Untuk informasi lebih lanjut mengenai bidang-bidang dalam tabel sistem hologres.hg_dynamic_table_refresh_history, lihat tabel sistem hologres.hg_dynamic_table_refresh_history.
Satu bulan riwayat disimpan secara default. Data yang lebih tua dari satu bulan tidak dapat diquery.
Pemilik tabel hanya dapat melihat riwayat refresh miliknya sendiri. Superuser dapat melihat riwayat refresh untuk semua tabel.
Contoh 1: Lihat catatan refresh bertahap dari hari kemarin.
--Contoh 1: Lihat catatan refresh bertahap selama sehari terakhir. 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 task refresh di instans saat ini dari hari kemarin.
--Lihat semua catatan refresh di instans selama sehari terakhir. 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 catatan refresh untuk tabel tertentu dari hari kemarin.
--Lihat catatan refresh untuk tabel tertentu selama sehari terakhir. 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='<scehma_name>' and dynamic_table_name='<dynamic_table>' and refresh_start >= CURRENT_DATE - INTERVAL '1 day'
Gunakan log kueri lambat
Anda dapat melihat task refresh Tabel Dinamis di log kueri lambat. Jenis Perintah `refresh` menunjukkan adanya task refresh. Untuk informasi lebih lanjut mengenai cara melihat log kueri lambat, lihat Lihat dan analisis log kueri lambat.
Lihat rencana eksekusi task refresh
Seperti halnya kueri biasa, Anda dapat menggunakan EXPLAIN dan EXPLAIN ANALYZE untuk melihat rencana eksekusi dan informasi waktu proses dari task refresh. Hal ini membantu Anda menganalisis bottleneck performa dan mengoptimalkan kueri. Berikut adalah contohnya:
explain refresh dynamic table hmtest.dt_order_lineitem;
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 < '199
6-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
Seperti halnya kueri biasa, Anda juga dapat menetapkan durasi timeout untuk task refresh Tabel Dinamis.
Tetapkan di tingkat tabel
Saat membuat Tabel Dinamis, Anda dapat menetapkan durasi timeout untuk task refresh-nya. Pengaturan ini berlaku untuk semua task refresh pada tabel tersebut. Kode SQL berikut menggunakan dataset publik tpch_10g sebagai contoh. Sebelum menjalankan kode, pastikan Anda telah mengimpor dataset publik tpch_10g. Untuk informasi lebih lanjut, lihat Buat task impor dataset publik.
--Tetapkan durasi timeout task refresh saat membuat tabel.
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 mins'--Durasi timeout refresh adalah 30 menit.
)
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(*) asAScount_order
FROM
hologres_dataset_tpch_10.lineitem
WHERE
l_shipdate <= DATE '1998-12-01' - INTERVAL '120' DAY
GROUP BY
l_returnflag,
l_linestatus;Tetapkan di tingkat session
Anda dapat menetapkan durasi timeout secara manual. Berikut adalah contoh pernyataan SQL-nya:
SET statement_timeout = <time>;
refresh DYNAMIC TABLE <dynamic_schema_name.dynamic_table_name>;Untuk informasi lebih lanjut mengenai pengaturan ini, lihat Ubah durasi timeout kueri aktif.
Batalkan tugas penyegaran
Batalkan task refresh yang sedang berjalan
Jika Anda menemukan bahwa task refresh berjalan terlalu lama atau hang, Anda dapat menggunakan pg_cancel_backend untuk membatalkan task tersebut.
Anda dapat menggunakan perintah berikut untuk membatalkan satu task refresh yang sedang berjalan:
// pid adalah ID task refresh.
SELECT pg_cancel_backend(<pid>);Parameter `pid` adalah ID task refresh. Anda dapat memperoleh ID task (`query_id`) dengan melihat task refresh tersebut. Untuk informasi lebih lanjut, lihat Lihat task refresh.
Untuk membatalkan beberapa task refresh yang sedang berjalan sekaligus, ikuti prosedur yang sama seperti untuk kueri biasa. Untuk informasi lebih lanjut, lihat Hentikan kueri.
Batalkan semua task refresh untuk suatu tabel
Jika task refresh telah dikonfigurasi untuk Tabel Dinamis, Anda dapat menggunakan perintah ALTER DYNAMIC TABLE untuk membatalkan semua task refresh berikutnya di tingkat tabel.
ALTER DYNAMIC TABLE [IF EXISTS ] [<schema>.]<table_name> set (auto_refresh_enable=false);Gunakan perintah ini dengan hati-hati. Jika tidak, data tidak akan diperbarui.