All Products
Search
Document Center

Hologres:Compact data files

Last Updated:Sep 05, 2026

Setelah mengimpor volume data yang besar atau menjalankan banyak operasi DELETE atau UPDATE, fragmentasi file data dapat menurunkan performa baca dan tulis. Compaction menggabungkan file data kecil menjadi file yang lebih besar, memulihkan efisiensi penyimpanan, dan meningkatkan kecepatan kueri.

Cara kerja

Hologres menggunakan struktur data yang mirip dengan LSM-Tree (log-structured merge-tree) untuk penulisan data. Semua penulisan bersifat append-only, mengubah penulisan acak menjadi penulisan sekuensial guna memaksimalkan throughput tulis. Seiring waktu, hal ini menghasilkan banyak file kecil yang harus digabung melalui compaction.

Hologres mendukung dua jenis compaction:

  • Auto compaction: Compaction hirarkis dengan hingga lima level. Ketika suatu level mengumpulkan lebih dari lima file, compaction dipicu secara otomatis dan hasilnya dipindahkan ke level berikutnya. Misalnya, lima file di Level 0 digabung menjadi satu file (maksimal 64 MB secara default) yang dipindahkan ke Level 1. Auto Compaction hanya menggabungkan file dalam level yang sama—tidak pernah lintas level.

  • Full compaction: Menggabungkan semua file di seluruh level menjadi file baru (masing-masing 64 MB secara default) yang ditempatkan di level terakhir. Full compaction harus dipicu secara manual.

image.png

Kapan menjalankan full compaction

Auto compaction menangani penggabungan file rutin secara terus-menerus di latar belakang. Jalankan full compaction hanya ketika fragmentasi file telah menumpuk melebihi batas yang dapat ditangani oleh auto compaction secara inkremental—khususnya setelah salah satu situasi berikut:

  • Mengimpor volume besar data offline

  • Menjalankan banyak operasi DELETE atau UPDATE

Catatan

Full compaction adalah operasi administratif yang intensif sumber daya. Operasi ini mengonsumsi sumber daya I/O dan CPU yang signifikan. Eksekusi biasanya memakan waktu lebih dari 10 menit. Jalankan selama periode aktivitas tulis rendah untuk meminimalkan dampak terhadap workload Anda.

Jalankan full compaction

Prasyarat dan batasan

  • Full compaction memerlukan Hologres V2.1 atau versi yang lebih baru. Untuk upgrade, lihat Upgrade an instance atau minta dukungan online untuk mengajukan permintaan upgrade.

  • Hanya tabel berorientasi kolom dan tabel hybrid baris-kolom yang mendukung full compaction.

  • Untuk tabel hybrid baris-kolom, full compaction hanya berlaku pada bagian column store.

Sintaks

SELECT hologres.hg_full_compact_table(
  '<schema_name.table_name>'
  [,'max_file_size_mb=<value>']
);

Parameter

Parameter

Description

Required

Default

schema_name.table_name

Nama tabel yang akan dikompaksi

Yes

—

max_file_size_mb

Ukuran maksimum dalam MB untuk setiap file output. Harus berupa bilangan bulat positif. Menetapkan nilai ini terlalu rendah akan menghasilkan terlalu banyak file kecil, yang memperlambat kueri. Jangan ubah nilai ini kecuali benar-benar diperlukan.

No

64

Contoh

Jalankan full compaction pada public.lineitem:

SELECT hologres.hg_full_compact_table('public.lineitem');

Jalankan full compaction pada public.lineitem dengan ukuran maksimum file output 256 MB:

SELECT hologres.hg_full_compact_table(
  'public.lineitem',
  'max_file_size_mb=256'
);

Tune auto compaction untuk satu tabel

Full compaction adalah operasi manual yang dilakukan sekali saja. Untuk mengubah cara kerja auto compaction pada satu tabel, atur properti tabel tersebut. Properti ini mengontrol konkurensi compaction, pemilihan file, dan frekuensi pemicuan. Gunakan properti ini untuk menjeda compaction selama proses bulk load, membersihkan file kecil yang menumpuk, atau mengurangi konflik sumber daya akibat compaction latar belakang.

Prasyarat dan batasan

  • Properti tabel ini memerlukan Hologres V4.0 atau versi yang lebih baru. Pada versi sebelumnya, pengaturan ini tidak berpengaruh. Lakukan upgrade instans terlebih dahulu.

  • Properti ini hanya berlaku untuk tabel berorientasi kolom dan tabel hybrid baris-kolom. Untuk tabel hybrid baris-kolom, properti ini hanya memengaruhi bagian column store. Mengaturnya pada tabel berorientasi baris tidak berpengaruh.

  • Auto compaction umumnya tidak memerlukan intervensi manual. Kecuali online_config_compaction_semaphore, properti lanjutan berinteraksi dengan pengaturan konkurensi dengan cara yang sulit diprediksi. Ubah hanya untuk mengatasi masalah spesifik, sebaiknya dengan panduan dari dukungan teknis, dan kembalikan ke nilai default setelahnya.

Atur, kueri, dan reset properti tabel

Atur properti compaction tingkat tabel dengan SET_TABLE_PROPERTY. Setiap nama properti memiliki awalan online_config_, dan setiap nilai diberikan sebagai string. Nilai baru berlaku untuk tugas compaction yang dijadwalkan setelah perubahan; tugas yang sedang berjalan tidak terpengaruh. Anda tidak perlu restart instans atau rebuild tabel.

-- Sintaks
CALL SET_TABLE_PROPERTY('<schema_name>.<table_name>', 'online_config_<property_name>', '<value>');

-- Jeda penjadwalan compaction pada public.orders
CALL SET_TABLE_PROPERTY('public.orders', 'online_config_compaction_semaphore', '0');

Reset properti

Atur properti ke reset untuk menghapus override tingkat tabel dan mengembalikan tabel ke nilai default instans.

CALL SET_TABLE_PROPERTY('public.orders', 'online_config_compaction_semaphore', 'reset');
Penting

Jika tabel tersebut sudah memiliki override yang dibutuhkan oleh workload Anda—misalnya, nilai 4 yang sengaja ditetapkan—masukkan kembali nilai tersebut alih-alih menggunakan reset. Catat status saat ini sebelum melakukan perubahan apa pun. Lihat Query the current settings.

Kueri pengaturan saat ini

SELECT property_key, property_value
FROM hologres.hg_table_properties
WHERE table_namespace = '<schema_name>'
  AND table_name = '<table_name>'
  AND property_key LIKE 'online_config_%';

Hasil kosong berarti tabel tidak memiliki override tingkat tabel dan mengikuti nilai default instans.

Kontrol konkurensi compaction

online_config_compaction_semaphore adalah properti utama yang perlu diatur. Properti ini membatasi jumlah tugas compaction konkuren per tablet, bukan per tabel—tablet adalah unit tempat compaction dijadwalkan. Satu tabel memiliki satu atau beberapa tablet pada setiap shard; pada tabel hybrid baris-kolom, bagian row store dan column store merupakan tablet terpisah. Batas teoretis untuk seluruh tabel karenanya kira-kira tablet_count × property_value, meskipun batas konkurensi tingkat worker dan sumber daya yang tersedia biasanya membatasinya lebih rendah.

Value

Behavior

When to use

0

Menghentikan penjadwalan tugas compaction baru untuk tabel tersebut.

Jendela sementara sebelum bulk load. Selalu kembalikan nilainya setelahnya.

1

Mempertahankan kemampuan penggabungan minimum.

Compaction jelas memengaruhi kueri online dan Anda perlu mengurangi beban.

2

Default.

Hampir semua workload.

3 hingga 8

Meningkatkan throughput penggabungan.

File terus menumpuk dan instans memiliki sumber daya cadangan. Naikkan nilai satu per satu.

Apa yang sebenarnya terjadi saat nilai diatur ke 0

  • Tugas compaction baru untuk tabel tersebut tidak lagi dijadwalkan.

  • Tugas yang sedang berjalan tidak dibatalkan. Mereka selesai secara normal.

  • Tugas yang sudah dipilih untuk tabel ini dan sedang menunggu tetap mengambil slot konkurensi tingkat worker. Oleh karena itu, mengatur banyak tabel ke 0 sekaligus akan menghambat compaction pada tabel lain.

  • Setelah Anda menaikkan nilai di atas 0, tugas yang antre dilanjutkan, tetapi backlog yang belum pernah dijadwalkan tidak dijamin akan diproses sendiri—terutama jika tabel tidak menerima penulisan baru. Jalankan VACUUM sekali untuk memaksa backlog diproses. Untuk informasi tentang apa yang dilakukan dan tidak dilakukan oleh VACUUM, lihat Examples.

Untuk memulihkan konkurensi dan menggabungkan backlog:

CALL SET_TABLE_PROPERTY('public.orders', 'online_config_compaction_semaphore', '2');
VACUUM public.orders;

Tabel partisi logis

Untuk tabel partisi logis, Hologres menaikkan konkurensi secara proporsional terhadap jumlah partisi aktif. Batas atas untuk satu unit penjadwalan adalah min(online_config_partition_table_compaction_semaphore_max, active_partition_count × online_config_compaction_semaphore), dibatasi hingga 8 secara default. active_partition_count diukur saat runtime dan bukan properti yang dapat Anda atur.

Risiko

  • Jangan biarkan nilai tetap 0 terlalu lama. Jumlah file dan baris yang dihapus terus menumpuk, performa kueri dan penggunaan penyimpanan keduanya menurun, dan semakin lama backlog tumbuh, semakin berat proses penggabungan akhirnya.

  • Jangan atur nilai 0 atau naikkan nilai untuk banyak tabel sekaligus. Semua tabel berbagi anggaran konkurensi tingkat worker: jeda massal memungkinkan tugas yang antre menghabiskan anggaran tersebut, dan peningkatan massal menyebabkan antrian global dan lonjakan sumber daya.

  • Ubah satu tabel dan satu properti dalam satu waktu, dengan kenaikan terkecil yang berguna, dan amati selama satu siklus bisnis penuh sebelum melakukan perubahan berikutnya.

Properti lanjutan

Properti berikut mengubah cara compaction memilih file dan seberapa sering dipicu. Properti ini berinteraksi dengan pengaturan konkurensi, sehingga ubah hanya untuk masalah spesifik yang telah didiagnosis—idealnya dengan panduan dari dukungan teknis—dan kembalikan ke nilai default setelahnya.

Property

Default

Description

online_config_partition_table_compaction_semaphore_max

8

Batas atas konkurensi compaction untuk satu unit penjadwalan tabel partisi logis. Digabungkan dengan online_config_compaction_semaphore dalam rumus yang diberikan di Control compaction concurrency.

online_config_parts_to_merge

5

Jumlah maksimum file input yang dipilih oleh satu tugas compaction.

online_config_trigger_compaction_picker_threshold

5

Jumlah file kandidat yang diperlukan untuk memicu tugas compaction. Ambang batas efektif adalah nilai yang lebih kecil antara nilai ini dan online_config_parts_to_merge.

online_config_orc_max_total_size_to_merge_mb

256

Total ukuran dalam MB dari file yang dipilih oleh satu tugas compaction untuk tabel berorientasi kolom, atau bagian column store dari tabel hybrid baris-kolom. Secara tidak langsung menentukan ukuran output gabungan.

online_config_max_total_size_to_merge_mb

512

Total volume data dalam MB yang dipilih oleh satu tugas compaction pada jalur data non-kolom.

online_config_deletion_compaction_ratio

30

Persentase baris yang dihapus dalam suatu file di atas ambang batas yang menyebabkan file tersebut dikompaksi di tempat untuk membebaskan ruang.

online_config_ignore_level_compaction

false

Mengabaikan batas level selama pemilihan file, memungkinkan penggabungan lintas level. Gunakan untuk membersihkan file kecil ekor panjang yang tersebar beberapa per level dan tidak pernah mencapai ambang pemicu.

online_config_bottom_level_compaction

true

Apakah file di level terbawah ikut serta dalam compaction.

Catatan

Konkurensi compaction total tingkat worker—batas atas yang dibagi oleh semua tabel pada satu node pekerja—adalah pengaturan tingkat instans, bukan properti tabel, dan tidak dapat diubah dengan SET_TABLE_PROPERTY. Hubungi dukungan teknis jika Anda perlu menyesuaikannya.

Contoh

Catatan

Contoh 2 dan 3 mengubah properti lanjutan. Jalankan dengan panduan dari dukungan teknis, dan kembalikan ke nilai default setelah masalah teratasi.

Contoh 1: Jeda compaction untuk bulk load

-- 1. Catat status saat ini. Hasil kosong berarti tidak ada override yang diatur.
SELECT property_key, property_value FROM hologres.hg_table_properties
WHERE table_namespace = 'public' AND table_name = 'orders'
  AND property_key = 'online_config_compaction_semaphore';

-- 2. Hentikan penjadwalan tugas compaction baru.
CALL SET_TABLE_PROPERTY('public.orders', 'online_config_compaction_semaphore', '0');

-- 3. Jalankan bulk load. Pantau CPU, I/O, dan throughput load selama proses berlangsung.

-- 4. Pulihkan properti. Pilih salah satu berikut berdasarkan langkah 1.
-- 4a. Langkah 1 tidak mengembalikan baris:
CALL SET_TABLE_PROPERTY('public.orders', 'online_config_compaction_semaphore', 'reset');
-- 4b. Langkah 1 mengembalikan nilai. Masukkan kembali nilai tersebut:
-- CALL SET_TABLE_PROPERTY('public.orders', 'online_config_compaction_semaphore', '<original_value>');

-- 5. Gabungkan backlog. Jalankan ini selama periode aktivitas tulis rendah.
VACUUM public.orders;

Contoh 2: Bersihkan file kecil ekor panjang

Gunakan ini ketika setiap level memiliki file lebih sedikit daripada ambang pemicu, namun tabel telah mengumpulkan puluhan file kecil yang tidak pernah digabung.

CALL SET_TABLE_PROPERTY('public.orders', 'online_config_ignore_level_compaction', 'true');
VACUUM public.orders;
-- Kembalikan ke default setelah jumlah file turun. Membiarkannya aktif akan meningkatkan
-- frekuensi compaction serta penggunaan CPU dan I/O pada tabel yang terus ditulis.
CALL SET_TABLE_PROPERTY('public.orders', 'online_config_ignore_level_compaction', 'reset');

Contoh 3: Hasilkan file gabungan yang lebih besar

Gunakan ini ketika satu tablet menyimpan volume data besar yang tersebar di banyak file.

CALL SET_TABLE_PROPERTY('public.orders', 'online_config_orc_max_total_size_to_merge_mb', '512');
VACUUM public.orders;
-- Kembalikan ke default setelah jumlah file turun.
CALL SET_TABLE_PROPERTY('public.orders', 'online_config_orc_max_total_size_to_merge_mb', 'reset');
Catatan

Di Hologres, VACUUM <table_name> melakukan flush pada tabel dan menunggu tugas compaction-nya konvergen. Ini adalah cara untuk memicu auto compaction—berguna setelah menaikkan online_config_compaction_semaphore dari 0, atau setelah mengubah properti pemilihan—tetapi tidak setara dengan full compaction dan tidak memaksa penggabungan lintas level untuk semua file.

Verifikasi bahwa perubahan telah berlaku

  1. Nama properti tidak divalidasi. Nama apa pun setelah awalan online_config_ diterima dan pernyataan berhasil. Nama yang salah ketik tidak cocok dengan konfigurasi apa pun, sehingga perubahan diam-diam tidak berpengaruh. Untuk mencegah hal ini:

    • Salin nama properti dari tabel dalam topik ini alih-alih mengetiknya.

    • Konfirmasi penulisan dengan mengkueri hologres.hg_table_properties.

    • Konfirmasi bahwa perilaku benar-benar berubah dengan memantau jumlah file dan ukuran file. Pernyataan yang berhasil tidak membuktikan apa-apa tanpa verifikasi tambahan.

  2. Tabel partisi mewarisi properti hanya saat pembuatan. Menjalankan SET_TABLE_PROPERTY pada tabel induk tidak memengaruhi partisi anak yang sudah ada. Properti tersebut hanya ditulis pada tabel induk, dan tabel induk tidak menyimpan data, sehingga perilaku compaction pada partisi yang sudah ada tidak berubah. Partisi anak menyalin properti tabel induk satu kali saat dibuat—termasuk partisi yang dibuat otomatis melalui partisi dinamis—dan perubahan selanjutnya pada induk tidak disebarkan. Untuk mengubah perilaku compaction pada tabel partisi, jalankan SET_TABLE_PROPERTY pada setiap partisi anak target dan verifikasi masing-masing. Atur juga properti pada tabel induk jika Anda ingin partisi mendatang mewarisinya.

  3. Tutup loop dengan pengamatan. Kueri hologres.hg_table_file_status untuk jumlah file dan ukuran file saat ini, hologres.hg_partition_file_status untuk tampilan per partisi tabel partisi logis, dan hologres.hg_table_info (dihasilkan sekali sehari) untuk meninjau tren. Penyesuaian yang berhasil menunjukkan penurunan jumlah file total dan peningkatan ukuran file rata-rata. Penggunaan penyimpanan dapat naik sementara saat file hasil penggabungan menunggu pembersihan; hal ini wajar.

    SELECT * FROM hologres.hg_table_file_status('<schema_name>.<table_name>'::regclass);

Remote compaction

Mulai Hologres V5.0, Anda dapat memindahkan fase penggabungan tugas compaction ke gudang virtual terpisah. Compaction tidak lagi bersaing untuk sumber daya komputasi pada gudang virtual utama, sehingga menjaga stabilitas performa kueri dan penulisan online. Fitur ini juga dikenal sebagai compaction offload.

Prasyarat dan batasan

  • Remote compaction memerlukan Hologres V5.0 atau versi yang lebih baru.

  • Tabel berorientasi baris, tabel berorientasi kolom, dan tabel hybrid baris-kolom semuanya mendukung remote compaction. Namun, beberapa strategi compaction internal tidak dapat di-offload, dan tugas tersebut tetap berjalan secara lokal.

  • Remote compaction hanya mencakup fase penggabungan file. Pembacaan dan penulisan data tetap berjalan di gudang virtual utama.

  • Secara default, tugas remote compaction yang gagal tidak kembali ke eksekusi lokal. Tugas tersebut langsung gagal dan penjadwal latar belakang akan mencoba ulang secara otomatis. Untuk mengaktifkan kembali perilaku fallback, atur parameter global enable_compaction_offload_fallback ke true.

Konfigurasi compaction_resource

Properti tabel compaction_resource menetapkan gudang virtual yang menjalankan tugas compaction untuk satu tabel. Perubahan berlaku segera, dan Anda tidak perlu restart instans.

Sintaks

-- Offload compaction untuk tabel ke gudang virtual tertentu
CALL SET_TABLE_PROPERTY('<SCHEMA_NAME>.<TABLE_NAME>', 'compaction_resource', '<WAREHOUSE_NAME>');

-- Jalankan compaction di gudang virtual lokal lagi (default)
CALL SET_TABLE_PROPERTY('<SCHEMA_NAME>.<TABLE_NAME>', 'compaction_resource', 'local');

Contoh

-- Offload compaction untuk public.orders ke gudang virtual bernama readonly
CALL SET_TABLE_PROPERTY('public.orders', 'compaction_resource', 'readonly');

-- Kueri pengaturan saat ini
SELECT property_key, property_value
FROM hologres.hg_table_properties
WHERE table_namespace = 'public'
  AND table_name = 'orders'
  AND property_key = 'compaction_resource';

Hasil kosong, atau nilai local, berarti tabel menjalankan compaction secara lokal.

Lihat status compaction

Panggil hologres.hg_show_compactions() untuk menampilkan daftar tugas compaction yang sedang berjalan dan yang telah selesai, termasuk yang dijalankan secara remote.

Catatan

Record yang dikembalikan oleh hologres.hg_show_compactions() disimpan di memori. Record tersebut dihapus saat instans restart. Record disimpan berdasarkan waktu akhir tugas: record yang telah mencapai status terminal disimpan selama 600 detik (10 menit) secara default.

-- Tampilkan semua record compaction
SELECT * FROM hologres.hg_show_compactions();

-- Tampilkan record compaction yang dijalankan secara remote
SELECT table_name, status, compaction_reason, execution_location,
       warehouse_name, start_time, end_time, extended_cost, last_error
FROM hologres.hg_show_compactions()
WHERE execution_location = 'warehouse'
ORDER BY start_time DESC;

Fungsi ini mengembalikan bidang-bidang berikut.

Field

Description

database_name

Nama database. Hanya record untuk database saat ini yang dikembalikan.

schema_name

Nama skema.

table_name

Nama tabel.

table_id

ID tabel.

shard_id

ID shard data.

task_id

Identifier tugas compaction.

status

Status tugas. Nilai valid: QUEUED (menunggu dijadwalkan), RUNNING (sedang berjalan), SUCCEEDED, FAILED, dan CANCELLED.

compaction_reason

Alasan yang memicu tugas. Misalnya, kFullCompaction untuk full compaction yang dipicu manual dan kLevelL0FilesNum untuk yang dipicu otomatis.

configured_resource

Pengaturan compaction_resource yang berlaku: local atau nama gudang virtual target.

execution_location

Lokasi tugas benar-benar dijalankan. local berarti eksekusi lokal, dan warehouse berarti eksekusi remote.

warehouse_name

Nama gudang virtual yang menjalankan tugas secara remote. Kosong untuk eksekusi lokal.

start_time

Waktu tugas masuk antrian penjadwalan.

end_time

Waktu tugas mencapai status terminal. Kosong selama tugas masih berjalan.

progress

Progres. Bidang cadangan, saat ini selalu 0.

extended_cost

Waktu yang dikonsumsi di setiap fase, dalam format JSON.

extended_stats

Statistik input dan output, dalam format JSON.

last_error

Pesan error jika tugas gagal. Kosong jika berhasil.

Contoh

Contoh berikut memindahkan compaction untuk tabel ke gudang virtual remote, lalu memicu full compaction secara manual.

-- 1. Pastikan gudang virtual target ada. Buat di Konsol Hologres
--    atau melalui API. Contoh ini menggunakan yang bernama readonly.

-- 2. Konfigurasi tabel untuk menggunakan remote compaction.
CALL SET_TABLE_PROPERTY('public.lineitem', 'compaction_resource', 'readonly');

-- 3. Picu full compaction. Fase penggabungan dijalankan di gudang virtual readonly.
SELECT hologres.hg_full_compact_table('public.lineitem');

-- 4. Tunggu compaction selesai.
SELECT hologres.hg_wait_table_full_compact('public.lineitem');

-- 5. Tinjau record remote compaction.
SELECT table_name, status, compaction_reason, execution_location,
       warehouse_name, start_time, end_time, extended_cost,
       extended_stats, last_error
FROM hologres.hg_show_compactions()
WHERE table_name = 'lineitem'
  AND execution_location = 'warehouse'
ORDER BY start_time DESC;

Referensi

Jalankan tugas compaction menggunakan Serverless Computing