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.
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 |
|
|
Text |
Nama Table Group |
|
|
INT4 |
Jumlah shard untuk Table Group |
Contoh:
-- Buat Table Group bernama tg_8 dengan 8 shard.
CALL HG_CREATE_TABLE_GROUP('tg_8', 8);
-
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.
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 |
|
|
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 |
|
|
TEXT |
Nama tabel baru |
|
|
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 |
|
|
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 readonlyuntuk 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
SERIALtidak dapat di-reshard. Tabel dengan nilaiDEFAULTakan kehilangan atributDEFAULT-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, aturset 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 |
|
|
Tabel yang akan dipindahkan. Untuk tabel partisi, tentukan tabel induk. Jalankan perintah ini sekali per tabel. |
|
|
|
Table Group target. |
|
-
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_GROUPjika 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:
-
Temukan semua tabel read-only:
SELECT * FROM hologres.hg_table_properties WHERE property_key = 'readonly' AND property_value = 'true'; -
Hapus flag read-only. Ganti
<table_name>dengan nama tabel lengkap (misalnya,public.my_table).CALL set_table_property('<table_name>', 'readonly', 'false');