All Products
Search
Document Center

Hologres:Kelola kelompok tabel dan shard

Last Updated:Jul 23, 2026

Konfigurasikan Table Groups dan jumlah shard di Hologres untuk menyeimbangkan performa kueri, throughput penulisan, dan efisiensi penyimpanan pada berbagai workload.

Pelajari cara membuat, mengkueri, memodifikasi, dan menghapus Table Groups, serta melakukan resharding pada tabel saat workload Anda berubah.

Cara kerja Table Groups dan shard

Sebuah instans Hologres mengorganisasi data dalam hierarki dua tingkat:

  • Table Group — Kontainer logis yang menampung satu atau beberapa tabel. Semua tabel dalam Table Group yang sama memiliki jumlah shard yang sama.

  • Shard — Unit distribusi data. Shard tersebar di seluruh Worker (node komputasi) untuk pemrosesan paralel.

Konsep

Peran

Instans

Berisi satu atau beberapa database, masing-masing dengan satu atau beberapa Table Group

Table Group

Mengelompokkan tabel yang memiliki jumlah shard yang sama. Tabel yang terlibat dalam join harus berada dalam Table Group yang sama.

Shard

Mendistribusikan data di seluruh Worker untuk pemrosesan paralel

Worker

Node komputasi yang memproses satu atau beberapa shard

Setiap database memiliki Table Group default dengan jumlah shard yang sesuai dengan spesifikasi instans. Konfigurasi default ini cukup untuk sebagian besar workload.

Rekomendasi konfigurasi

Ikuti panduan berikut:

  • Gunakan Table Group default kecuali workload Anda memerlukan jumlah shard yang berbeda. Jumlah shard default berdasarkan ukuran instans tercantum di Instance management.

  • Instans besar (> 256 CUs): Pertimbangkan penggunaan beberapa Table Group untuk load balancing:

    • Volume data besar — buat Table Group terpisah dengan jumlah shard lebih tinggi.

    • Banyak tabel kecil — buat Table Group terpisah dengan jumlah shard lebih rendah untuk mengurangi overhead startup kueri.

  • Tabel yang melakukan join harus berada dalam Table Group yang sama.

  • Jangan membuat satu Table Group per tabel. Hal ini menambah overhead dan fragmentasi yang tidak perlu.

  • Selaraskan jumlah shard dengan jumlah Worker. Atur jumlah shard sebagai kelipatan jumlah Worker untuk penggunaan sumber daya yang seimbang dan memudahkan scale-out.

Penting

Jumlah shard pada Table Group yang sudah ada tidak dapat dimodifikasi. Untuk mengubah jumlah shard, buat Table Group baru dan pindahkan tabel Anda ke dalamnya melalui proses resharding.

Batas jumlah shard

Mulai Hologres V2.0, batas default diterapkan untuk mencegah kegagalan alokasi akibat jumlah shard yang berlebihan. Melebihi batas akan menghasilkan error too many shards in this instance.

Batas atas tersebut mengikuti rumus berikut:

  • Jumlah shard maksimum per Table Group = Jumlah shard default × 2

  • Jumlah shard total maksimum per instans = Jumlah shard default × 8

Spesifikasi Instance

Node komputasi default

Default Shard (V0.10.31+)

Shard maks per Table Group (V2.0+)

Shard maks per instans (V2.0+)

32 CUs

2

20

40 (20 x 2)

160 (20 x 8)

64 CUs

4

40

80 (40 x 2)

320 (40 x 8)

96 CUs

6

60

120 (60 x 2)

480 (60 x 8)

128 CUs

8

80

160 (80 x 2)

640 (80 x 8)

160 CUs

10

80

160 (80 x 2)

640 (80 x 8)

192 CUs

12

80

160 (80 x 2)

640 (80 x 8)

256 CUs

16

120

240 (120 x 2)

960 (120 x 8)

384 CUs

24

160

320 (160 x 2)

1280 (160 x 8)

512 CUs

32

160

320 (160 x 2)

1280 (160 x 8)

...

...

M

M x 2

M x 8

Untuk menonaktifkan batas ini (tidak disarankan — dapat menyebabkan kegagalan alokasi sumber daya):

SET hg_experimental_enable_shard_count_cap = off;

Izin

Hanya superuser yang dapat membuat, memodifikasi, atau menghapus Table Group, atau memindahkan tabel ke Table Group berbeda (resharding).

Untuk memberikan hak istimewa superuser kepada pengguna:

-- Ganti <ID akun Alibaba Cloud> dengan UID pengguna.
-- Untuk Pengguna RAM, tambahkan awalan "p4_" ke ID akun.
ALTER USER "<ID akun Alibaba Cloud>" SUPERUSER;

Menetapkan tabel baru ke Table Group hanya memerlukan izin pembuatan tabel.

Kueri metadata Grup Tabel

Lihat Table Group default

SELECT * FROM hologres.hg_table_group_properties
WHERE tablegroup_name IN (
  SELECT tablegroup_name FROM hologres.hg_table_group_properties
  WHERE property_key = 'is_default_tg' AND property_value = '1'
);

Contoh output:

 tablegroup_name |   property_key   | property_value
-----------------+------------------+----------------
 test_tg_default | tg_version       | 1
 test_tg_default | table_num        | 1
 test_tg_default | is_default_tg    | 1
 test_tg_default | shard_count      | 3
 test_tg_default | replica_count    | 1
 test_tg_default | created_manually | 0
(6 rows)

Pada output tersebut, is_default_tg mengidentifikasi Table Group default dan shard_count menunjukkan jumlah shard-nya.

Daftar semua Table Group

SELECT tablegroup_name
FROM hologres.hg_table_group_properties GROUP BY tablegroup_name;

Lihat jumlah shard Table Group

SELECT property_value AS shard_count
FROM hologres.hg_table_group_properties
WHERE property_key = 'shard_count' AND tablegroup_name = '<tg_name>';

Daftar tabel dalam Table Group

SELECT table_namespace AS schema_name, table_name
FROM hologres.hg_table_properties
WHERE property_key = 'table_group' AND property_value = '<tg_name>';

Temukan Table Group untuk suatu tabel

SELECT property_value AS table_group_name
FROM hologres.hg_table_properties
WHERE property_key = 'table_group' AND table_name = '<table_name>';

Buat Table Group

CALL HG_CREATE_TABLE_GROUP('<new_tg_name>', <shard_count>);

Parameter

Tipe

Deskripsi

new_tg_name

Text

Nama Table Group

shard_count

INT4

Jumlah shard untuk Table Group

Contoh:

-- Buat Table Group bernama tg_8 dengan 8 shard.
CALL HG_CREATE_TABLE_GROUP('tg_8', 8);
Catatan
  • Tabel yang sudah ada tetap berada di Table Group asalnya.

  • Table Group asal hanya menjadi tidak valid setelah semua tabel dan datanya dipindahkan atau dihapus.

Ubah Table Group default

Tetapkan Table Group default yang berbeda agar tabel baru secara otomatis ditetapkan ke dalamnya.

Catatan

Memerlukan Hologres V0.9 atau versi lebih baru. Jika instans Anda menggunakan versi sebelumnya, upgrade terlebih dahulu.

CALL HG_UPDATE_DATABASE_PROPERTY('default_table_group', '<tg_name>');

Parameter

Tipe

Deskripsi

tg_name

TEXT

Nama Table Group yang akan dijadikan default. Jumlah shard-nya menjadi nilai default baru untuk database tersebut.

Contoh:

-- Tetapkan tg_8 sebagai Table Group default.
CALL HG_UPDATE_DATABASE_PROPERTY('default_table_group', 'tg_8');

Tetapkan tabel baru ke Table Group tertentu

Bungkus panggilan CREATE TABLE dan SET_TABLE_PROPERTY dalam transaksi:

BEGIN;
CREATE TABLE <table_name> (
    col1 text,
    ...
);
CALL SET_TABLE_PROPERTY('<table_name>', 'table_group', '<tg_name>');
COMMIT;

Parameter

Tipe

Deskripsi

table_name

TEXT

Nama tabel baru

tg_name

TEXT

Table Group target. Tabel mewarisi jumlah shard dari Table Group ini.

Contoh:

-- Buat tabel tbl1 dan tetapkan ke Table Group tg_8.
BEGIN;
CREATE TABLE tbl1 (
    col1 text
);
CALL SET_TABLE_PROPERTY('tbl1', 'table_group', 'tg_8');
COMMIT;

Reshard tabel

Proses scale-up instans tidak mengubah jumlah shard untuk database yang sudah ada. Untuk memanfaatkan kapasitas tambahan, buat Table Group baru dengan jumlah shard lebih tinggi dan pindahkan tabel Anda ke dalamnya. Database baru yang dibuat setelah scale-up akan menggunakan nilai default yang telah diperbarui. Ikhtisar spesifikasi instans.

Tersedia tiga metode:

Metode

Jenis tabel yang didukung

Versi minimum

Liquid Table

Tabel non-partisi dan tabel partisi logis (dinamis; langsung berlaku tanpa mengganggu operasi baca atau tulis)

Hologres V4.2

REBUILD

Tabel non-partisi, partisi fisik, dan partisi logis (eksekusi sekuensial per partisi)

Hologres V3.1

Prosedur tersimpan

Tabel non-partisi dan partisi fisik

Hologres V0.10

Reshard dengan Liquid Table

Mulai Hologres V4.2, Liquid Table dapat dipindahkan antar Table Group secara dinamis. Perubahan langsung berlaku tanpa mengganggu operasi baca atau tulis. Liquid Table.

Reshard dengan REBUILD

Mulai Hologres V3.1, perintah REBUILD memindahkan tabel antar Table Group secara asinkron dengan pemantauan progres real-time. REBUILD (Beta).

Reshard dengan prosedur tersimpan

Mulai Hologres V0.10, prosedur tersimpan bawaan memindahkan tabel ke Table Group baru tanpa perlu membuat ulang atau mengimpor ulang data.

Batasan

  • Memerlukan Hologres V0.10 atau versi lebih baru. Periksa versi Anda di halaman Instance Details. Jika versi lebih lama, upgrade instans Anda atau hubungi dukungan online.

  • Hentikan semua operasi tulis selama proses resharding. Operasi baca tidak terpengaruh. Mulai V1.1, gunakan set table readonly untuk failover otomatis pada tugas tulis real-time.

  • Resharding mengonsumsi CPU dan sementara meningkatkan penggunaan penyimpanan. Jalankan selama jam sepi.

  • Nonaktifkan log biner tabel sebelum resharding dan aktifkan kembali setelahnya. Berlangganan log biner Hologres.

  • Tabel dengan bidang SERIAL tidak dapat di-reshard. Tabel dengan nilai DEFAULT akan kehilangan atribut DEFAULT-nya setelah resharding.

  • Tabel tidak boleh memiliki dependensi terhadap objek lain seperti view. Hapus dependensi sebelum resharding, atau Hologres akan mengembalikan pesan: "ERROR: resharding table xxx can not executed because other objects depend on it.". Untuk melewati dependensi view, atur set hg_experimental_hg_insert_overwrite_enable_view=on;.

  • Resharding hanya berlaku untuk Simple Permission Model (SPM). Model izin Hologres.

  • Resharding tidak mempertahankan properti partisi otomatis.

  • Mulai Hologres V2.0, komentar kolom dipertahankan selama resharding. Pada versi sebelumnya, backup dan restore komentar kolom secara manual.

Sintaks

Untuk V2.0.24 dan versi lebih baru: Gunakan HoloWeb untuk resharding melalui antarmuka grafis. Resharding tabel.

Untuk versi sebelumnya: Jalankan perintah SQL berikut.

-- Untuk V1.1 dan versi lebih baru:
CALL HG_MOVE_TABLE_TO_TABLE_GROUP('<table_name>', '<new_table_group_name>');

-- Untuk V0.10 dan versi lebih baru:
CALL HG_UPDATE_TABLE_SHARD_COUNT('<table_name>', '<new_table_group_name>');

Parameter

Deskripsi

Contoh

table_name

Tabel yang akan dipindahkan. Untuk tabel partisi, tentukan tabel induk. Jalankan perintah ini sekali per tabel.

new_table

new_table_group_name

Table Group target.

new_tg

Penting
  • Buat Table Group baru sebelum memindahkan tabel. Buat Table Group.

  • Hentikan semua operasi tulis pada tabel selama proses resharding. Operasi baca tidak terpengaruh.

  • Setelah semua tabel dipindahkan dari Table Group, hapus Table Group kosong tersebut secara manual menggunakan HG_DROP_TABLE_GROUP jika tidak lagi diperlukan.

  • Untuk tabel partisi, lakukan operasi hanya pada tabel induk.

  • Pada instans virtual warehouse, migrasi harus dijalankan oleh Virtual Warehouse leader dari Table Group target, yang juga harus mengakses Table Group sumber sebagai follower. Otorisasi kelompok komputasi untuk mengakses data.

Penanganan pengecualian resharding

Resharding dapat terganggu oleh error OOM atau terminasi manual. Jika terganggu, tabel asli menjadi read-only, dan muncul tabel sementara bernama <initial_table_name>_xxxxxxxx.

Untuk instans V2.0.24 atau versi lebih baru:

  • HoloWeb: Lanjutkan atau batalkan resharding melalui UI. Resharding tabel.

  • SQL: Ikuti langkah-langkah berikut.

Untuk instans versi sebelumnya: Upgrade ke V2.0.24 atau versi lebih baru terlebih dahulu.

Untuk melanjutkan resharding, atasi akar penyebabnya lalu jalankan kembali perintah HG_MOVE_TABLE_TO_TABLE_GROUP.

Untuk membatalkan resharding dan mengembalikan ke kondisi semula, jalankan perintah berikut secara berurutan:

-- 1. Hapus flag read-only dari tabel asli.
CALL set_table_property('<schema_name>.<table_name>', 'readonly', 'false');

-- 2. Temukan nama tabel sementara.
-- Untuk tabel partisi:
SELECT schema_name, target_temp_table_name
FROM hologres.hg_resharding_properties
WHERE reshard_table_name = '<schema_name>.<table_name>' AND is_parent_table IS TRUE;

-- Untuk tabel non-partisi:
SELECT schema_name, target_temp_table_name
FROM hologres.hg_resharding_properties
WHERE reshard_table_name = '<schema_name>.<table_name>'
  AND is_parent_table IS FALSE AND is_sub_table IS FALSE;

-- 3. Hapus tabel sementara.
DROP TABLE IF EXISTS <schema_name>.<target_temp_table_name>;

-- 4. Hapus catatan progres resharding.
CALL hologres.hg_internal_clear_resharding_properties('<schema_name>.<table_name>');

Hapus Table Group

Hapus semua tabel dari Table Group terlebih dahulu, lalu jalankan:

CALL HG_DROP_TABLE_GROUP('<tg_name>');

Contoh:

CALL HG_DROP_TABLE_GROUP('tg_8');

Periksa distribusi shard ke Worker

Distribusi shard yang tidak merata di seluruh Worker menyebabkan ketidakseimbangan beban dan penggunaan sumber daya yang tidak efisien.

Mulai Hologres V1.3, gunakan view sistem worker_info untuk memeriksa pemetaan shard ke Worker. Konsep dasar menjelaskan hubungan shard ke node. Kueri alokasi shard di antara Worker menyediakan sintaks kueri.

Praktik terbaik

Table Group default cocok untuk sebagian besar workload. Konfigurasi khusus dijelaskan dalam Praktik terbaik untuk menetapkan kelompok tabel.

FAQ

Apa arti error "internal error: Get rundown is not allowed in recovering state"?

Error ini menunjukkan bahwa tabel bersifat read-only, sehingga memblokir operasi INSERT, UPDATE, dan DELETE. Hologres menetapkan status ini saat resharding terganggu untuk mencegah inkonsistensi data.

Untuk mengatasinya:

  1. Temukan semua tabel read-only:

       SELECT * FROM hologres.hg_table_properties
       WHERE property_key = 'readonly' AND property_value = 'true';
  2. Hapus flag read-only. Ganti <table_name> dengan nama tabel lengkap (misalnya, public.my_table).

       CALL set_table_property('<table_name>', 'readonly', 'false');