全部产品
Search
文档中心

Hologres:Panduan pengguna untuk kelompok tabel dan jumlah shard

更新时间:Dec 27, 2025

Dalam skenario yang memerlukan pemrosesan data waktu nyata atau pengumpulan data skala besar—seperti analitik waktu nyata dan pengumpulan log—Anda mungkin menghadapi volume tinggi permintaan baca dan tulis secara konkuren. Anda dapat menentukan kelompok tabel dan jumlah shard yang sesuai untuk menerapkan distribusi data dan penyeimbangan beban. Praktik ini mengoptimalkan kinerja kueri serta meningkatkan efisiensi penyimpanan dan komputasi data.

Rekomendasi untuk mengatur kelompok tabel dan jumlah shard

Hologres memungkinkan Anda menentukan shard dan kelompok tabel secara fleksibel. Dibandingkan produk serupa, Hologres menyediakan metode yang lebih fleksibel dan ramah pengguna untuk menyesuaikan skema sesuai skenario tertentu. Fitur ini membantu Anda memenuhi kebutuhan bisnis. Pemahaman yang baik terhadap bisnis Anda memungkinkan Anda memanfaatkan sepenuhnya kinerja tinggi yang ditawarkan Hologres. Ikuti aturan dasar berikut saat mengatur kelompok tabel:

  • Kecuali benar-benar diperlukan, jangan membuat kelompok tabel baru. Gunakan kelompok tabel default sebagai gantinya. Untuk informasi selengkapnya tentang spesifikasi instans, lihat Manajemen instans.

  • Untuk instans besar dengan lebih dari 256 core, Anda dapat membuat beberapa kelompok tabel sesuai kebutuhan untuk menyeimbangkan beban kerja.

    • Jika volume data besar, buat kelompok tabel terpisah dengan jumlah shard yang besar.

    • Jika Anda memiliki banyak tabel dengan volume data kecil, buat kelompok tabel terpisah dengan jumlah shard yang kecil. Hal ini mengurangi overhead startup kueri.

  • Tabel yang perlu di-join (Local Join) harus berada dalam kelompok tabel yang sama.

  • Jangan mengatur kelompok tabel terpisah untuk setiap tabel.

  • Saat menentukan jumlah shard, pertimbangkan jumlah worker dan kemungkinan scale-out di masa depan. Atur jumlah shard sebagai kelipatan jumlah worker untuk menyeimbangkan alokasi sumber daya.

  • Anda tidak dapat mengubah jumlah shard pada kelompok tabel yang sudah ada. Untuk mengubah jumlah shard, Anda harus membuat kelompok tabel baru.

  • Jangan mengatur jumlah shard terlalu tinggi. Jika tidak, sumber daya komputasi mungkin gagal dialokasikan, sehingga menimbulkan overhead tambahan. Di Hologres V2.0 dan versi setelahnya, batas atas jumlah shard ditetapkan secara default untuk satu kelompok tabel dan jumlah total shard dalam suatu instans. Hal ini mencegah kegagalan alokasi sumber daya akibat jumlah shard yang berlebihan. Jika jumlah total shard melebihi batas, kesalahan too many shards in this instance akan dilaporkan. Batas atas tersebut ditentukan oleh aturan berikut:

    • Jumlah shard maksimum untuk satu kelompok tabel = Jumlah shard default untuk satu kelompok tabel × 2

    • Jumlah total shard maksimum untuk suatu instans = Jumlah shard default untuk satu kelompok tabel × 8

    • Untuk menyesuaikan batas atas tersebut, Anda dapat menggunakan parameter GUC berikut untuk menonaktifkannya. Namun, hal ini tidak disarankan. Jika Anda mengatur jumlah shard terlalu tinggi, sumber daya komputasi mungkin gagal dialokasikan.

      set hg_experimental_enable_shard_count_cap =off;
    • Tabel berikut mencantumkan batas atas jumlah shard.

      Instance Type

      Jumlah default node komputasi

      Jumlah shard default (untuk V0.10.31 dan versi setelahnya)

      Jumlah shard maksimum untuk satu kelompok tabel (untuk V2.0 dan versi setelahnya)

      Jumlah total shard maksimum untuk suatu instans (untuk V2.0 dan versi setelahnya)

      32 Core

      2

      20

      40 (20 × 2)

      160 (20 × 8)

      64 Core

      4

      40

      80 (40 × 2)

      320 (40 × 8)

      96 Core

      6

      60

      120 (60 × 2)

      480 (60 × 8)

      128 Core

      8

      80

      160 (80 × 2)

      640 (80 × 8)

      160 Core

      10

      80

      160 (80 × 2)

      640 (80 × 8)

      192 Core

      12

      80

      160 (80 × 2)

      640 (80 × 8)

      256 Core

      16

      120

      240 (120 × 2)

      960 (120 × 8)

      384 Core

      24

      160

      320 (160 × 2)

      1280 (160 × 8)

      512 Core

      32

      160

      320 (160 × 2)

      1280 (160 × 8)

      ......

      ......

      M

      M × 2

      M × 8

Izin

  • Untuk membuat kelompok tabel, mengubah kelompok tabel default, menghapus kelompok tabel, atau memigrasikan tabel ke kelompok tabel lain (resharding), Anda harus memiliki izin Superuser untuk instans tersebut. Superuser dapat menjalankan pernyataan berikut untuk memberikan izin Superuser kepada pengguna biasa.

    -- Ganti "ID akun Alibaba Cloud" dengan username sebenarnya. Jika Anda menggunakan Pengguna RAM, tambahkan awalan "p4_" ke ID akun.
    ALTER USER "ID akun Alibaba Cloud" SUPERUSER; 
  • Untuk menempatkan tabel baru ke dalam kelompok tabel tertentu, akun pengguna harus memiliki izin untuk membuat tabel.

Dapatkan metadata kelompok tabel

  1. Lihat kelompok tabel 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'
    );

    Hasil:

    Catatan

    Dalam hasil tersebut, is_default_tg menunjukkan apakah kelompok tabel tersebut merupakan kelompok default, dan shard_count menunjukkan jumlah shard pada kelompok tabel tersebut.

    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 baris)
  2. Lihat kelompok tabel dalam database saat ini.

    SELECT tablegroup_name
    FROM hologres.hg_table_group_properties GROUP BY tablegroup_name;

    Hasil:

    tablegroup_name
    -----------------
     test_tg_default
    (1 baris)
  3. Lihat jumlah shard pada kelompok tabel.

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

    Hasil:

    shard_count
    -------------
     3
    (1 baris)
  4. Lihat tabel-tabel dalam kelompok tabel.

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

    Hasil:

    schema_name | table_name
    -------------+------------
     public      | a
    (1 baris)
  5. Lihat kelompok tabel tempat suatu tabel berada.

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

    Hasil:

    table_group_name
    ------------------
     test_tg_default
    (1 baris)

Buat grup tabel

Jika Anda memiliki layanan baru atau perlu membuat kelompok tabel dengan jumlah shard baru, Anda dapat menggunakan pernyataan berikut.

Catatan
  • Setelah membuat kelompok tabel baru, tabel dan data asli tetap berada di kelompok tabel asal. Mereka tidak secara otomatis dimigrasikan ke kelompok tabel baru.

  • Kelompok tabel asal hanya dihapus setelah semua tabel dan datanya dimigrasikan atau dihapus.

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

Parameter:

Parameter

Tipe

Deskripsi

new_tg_name

Teks

Nama kelompok tabel baru.

shard_count

INT4

Jumlah shard untuk grup tabel.

Contoh:

-- Buat kelompok tabel baru bernama tg_8 dengan jumlah shard 8.
CALL HG_CREATE_TABLE_GROUP ('tg_8', 8);

Ubah kelompok tabel default

Setelah Anda membuat database, kelompok tabel default dengan jumlah shard default dibuat dalam instans tersebut. Untuk informasi selengkapnya, lihat Manajemen instans. Jika suatu database memiliki beberapa kelompok tabel dan Anda ingin mengubah kelompok default-nya, Anda dapat menggunakan pernyataan berikut. Setelah perubahan, tabel baru akan disimpan dalam kelompok tabel default yang baru.

Catatan

Anda dapat menjalankan pernyataan berikut untuk mengubah kelompok tabel default di Hologres V0.9 dan versi setelahnya. Jika instans Anda menggunakan versi sebelumnya, Anda harus melakukan upgrade terlebih dahulu.

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

Deskripsi:

Parameter

Tipe

Deskripsi

tg_name

TEXT

Nama kelompok tabel default. Setelah Anda mengatur parameter ini, jumlah shard pada kelompok tabel ini akan digunakan.

Contoh:

-- Tetapkan kelompok tabel baru sebagai default. Tabel baru akan menggunakan kelompok tabel ini secara default (untuk V0.9 dan versi setelahnya).
CALL HG_UPDATE_DATABASE_PROPERTY ('default_table_group', 'tg_8');

Tempatkan tabel baru ke dalam kelompok tabel tertentu

Anda dapat menggunakan pernyataan berikut untuk secara eksplisit menempatkan tabel baru ke dalam kelompok tabel tertentu.

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

Parameter:

Parameter

Type

Deskripsi

table_name

TEXT

Nama tabel baru.

tg_name

TEXT

Nama kelompok tabel yang ditentukan. Setelah Anda mengatur parameter ini, jumlah shard pada kelompok tabel ini akan digunakan.

Contoh:

-- Buat tabel bernama tbl1 dan kaitkan dengan kelompok tabel bernama tg_8.
BEGIN;
CREATE TABLE tbl1 (
    col1 text
);
CALL SET_TABLE_PROPERTY('tbl1', 'table_group', 'tg_8');
COMMIT;

Migrasikan tabel ke kelompok tabel baru (resharding)

Di Hologres, shard meningkatkan konkurensi pemrosesan data. Jumlah shard yang tepat membantu meningkatkan kinerja kueri dan penulisan. Dalam kebanyakan kasus, jumlah shard default untuk instans Hologres sudah cukup, dan Anda tidak perlu mengubahnya secara manual.

Setelah instans diperluas kapasitasnya, misalnya dari 32 core menjadi 128 core, jumlah shard pada database yang sudah ada tidak berubah secara default. Kami menyarankan agar Anda menambah jumlah shard untuk database tersebut guna mencapai kinerja yang lebih baik. Jika Anda membuat database baru dalam instans tersebut, jumlah shard default untuk tipe instans saat ini akan digunakan. Untuk informasi selengkapnya tentang tipe instans dan shard, lihat Manajemen instans.

Setelah instans diperluas atau dikurangi kapasitasnya, jumlah shard pada database yang sudah ada tidak secara otomatis bertambah atau berkurang. Anda harus menggunakan pernyataan untuk mengatur jumlah shard, lalu mengimpor ulang data tersebut.

  • Untuk tabel standar dan tabel partisi fisik, Anda dapat menggunakan sintaks `REBUILD` atau prosedur tersimpan bawaan.

  • Untuk tabel partisi logis, kami menyarankan agar Anda menggunakan sintaks `REBUILD`. Sintaks ini dapat secara otomatis melakukan eksekusi sekuensial berdasarkan partisi.

Resharding menggunakan sintaks REBUILD

Di Hologres V3.1 dan versi setelahnya, perintah `REBUILD` didukung untuk mengubah properti tabel, termasuk memigrasikan tabel ke kelompok tabel berbeda. Sintaks `REBUILD` dapat menjalankan tugas migrasi secara asinkron dan mendukung pemantauan waktu nyata terhadap progres tugas. Untuk informasi selengkapnya, lihat REBUILD (Beta).

Resharding menggunakan prosedur tersimpan bawaan

Di Hologres V0.10 dan versi setelahnya, perintah resharding disediakan. Setelah Anda mengubah jumlah shard, perintah ini secara otomatis menyeimbangkan ulang data. Anda dapat melakukan resharding pada tabel dan data asli tanpa perlu membuat ulang tabel atau mengimpor ulang data. Hal ini menyederhanakan operasi dan membantu mencapai kinerja optimal.

  • Batasan

    • Fitur resharding hanya didukung di Hologres V0.10 dan versi setelahnya. Anda dapat melihat versi instans Hologres Anda di halaman detail instans di Konsol Hologres. Jika versi instans Anda sebelum V0.10, lihat Kesalahan umum persiapan upgrade atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Dapatkan dukungan online untuk Hologres.

    • Saat ini, resharding dilakukan pada tingkat tabel. Saat Anda melakukan resharding pada suatu tabel, Anda harus menghentikan penulisan data ke tabel tersebut dari sumber seperti Flink dan Data Integration. Kueri pada tabel tersebut tidak terpengaruh. Di Hologres V1.1 dan versi setelahnya, Anda dapat menjalankan set table readonly untuk mengaktifkan failover otomatis untuk tugas penulisan waktu nyata.

    • Resharding mengonsumsi sumber daya CPU dan meningkatkan penggunaan penyimpanan selama proses berlangsung. Kami menyarankan agar Anda melakukan resharding pada jam sepi.

    • Jika binary logging diaktifkan untuk suatu tabel, nonaktifkan terlebih dahulu sebelum melakukan resharding. Aktifkan kembali binary logging setelah resharding selesai. Untuk informasi selengkapnya, lihat Berlangganan log biner Hologres.

    • Resharding tidak didukung untuk tabel yang berisi kolom dengan urutan auto-increment `SERIAL` atau nilai `DEFAULT`. Kesalahan akan dilaporkan jika Anda melakukan resharding pada tabel dengan kolom `SERIAL`. Properti `DEFAULT` akan hilang setelah tabel dengan kolom `DEFAULT` di-resharding.

    • Tabel tidak boleh memiliki dependensi lain, seperti view, selama proses resharding. Jika dependensi ada, Anda harus menghapusnya terlebih dahulu sebelum melakukan resharding. Jika tidak, kesalahan "ERROR: resharding table xxx can not executed because other objects depend on it." akan dilaporkan.

    • Di Hologres V2.2.29 dan versi setelahnya serta V3.0.36 dan versi setelahnya, Anda dapat melakukan resharding pada tabel yang memiliki dependensi view. Untuk melakukannya, jalankan perintah set hg_experimental_hg_insert_overwrite_enable_view=on; untuk mengaktifkan parameter GUC tersebut.

    • Resharding hanya berlaku untuk model izin simple, bukan model izin expert. Untuk informasi selengkapnya tentang model izin Hologres, lihat Model izin Hologres.

    • Resharding tidak mempertahankan properti partisi dinamis suatu tabel.

    • Hanya operasi resharding di Hologres V2.0 dan versi setelahnya yang mempertahankan `COMMENTS` kolom. Jika versi instans Anda sebelum V2.0, Anda harus mencadangkan `COMMENTS` kolom terlebih dahulu dan mengaturnya secara manual setelah resharding selesai.

  • Contoh sintaks

    • Jika instans Anda menggunakan V2.0.24 atau versi setelahnya, kami menyarankan agar Anda menggunakan HoloWeb untuk melakukan resharding. Untuk informasi selengkapnya, lihat Resharding Tabel.

    • Jika versi instans Anda sebelum V2.0.24, Anda dapat menggunakan perintah berikut untuk memigrasikan tabel bisnis ke kelompok tabel baru. Jika versi instans sebelum V0.10, Anda harus melakukan upgrade terlebih dahulu.

    Catatan
    • Sebelum migrasi, Anda harus memiliki kelompok tabel baru. Jika belum, buat terlebih dahulu. Untuk informasi selengkapnya, lihat Buat kelompok tabel.

    • Saat memigrasikan tabel, Anda harus menghentikan penulisan data ke tabel tersebut. Kueri tidak terpengaruh.

    • Setelah semua tabel dalam kelompok tabel asal dimigrasikan, kelompok tabel asal akan dihapus secara otomatis. Jika bisnis Anda memerlukan beberapa kelompok tabel, atur jumlah shard yang sesuai untuk masing-masing kelompok.

    • Saat memigrasikan tabel partisi, Anda hanya perlu melakukan operasi pada tabel induk.

    • Jika instans Anda bertipe compute group dan Anda perlu memigrasikan tabel dari Kelompok Tabel A ke Kelompok Tabel B target, Anda harus menggunakan compute group primary W dari Kelompok Tabel B untuk melakukan migrasi tersebut. Selain itu, compute group W harus memiliki izin akses ke Kelompok Tabel A. Artinya, compute group W harus dimuat sebagai compute group follower dari Kelompok Tabel A. Untuk informasi selengkapnya tentang cara memberikan izin kelompok tabel kepada compute group, lihat Otorisasi compute group untuk mengakses data.

    -- Sintaks perintah untuk V1.1 dan versi setelahnya
    CALL HG_MOVE_TABLE_TO_TABLE_GROUP('<table_name>','<new_table_group_name>');
    
    -- Sintaks perintah untuk V0.10
    CALL HG_UPDATE_TABLE_SHARD_COUNT('<table_name>','<new_table_group_name>');
  • Parameter

    Parameter

    Deskripsi

    Contoh

    table_name

    Nama tabel yang akan dimigrasikan. Hanya satu tabel yang dapat dimigrasikan dalam satu waktu. Untuk memigrasikan beberapa tabel, jalankan perintah tersebut beberapa kali. Untuk tabel partisi, Anda hanya perlu mengoperasikan tabel induk.

    new_table

    table_group_name

    Nama kelompok tabel baru.

    new_tg

  • Penanganan Pengecualian

    Selama proses resharding tabel, tabel tersebut pertama-tama diatur menjadi read-only, lalu dimigrasikan ke kelompok tabel baru menggunakan tabel temporary. Karena tugas resharding melibatkan impor data dan mungkin memakan waktu lama, berbagai pengecualian dapat terjadi, seperti error kehabisan memori (OOM) atau penghentian tugas secara manual. Dalam kasus tersebut, tabel asli tetap dalam status read-only, dan tabel temporary bernama <initial_table_name>_xxxxxxxx muncul di database. Tangani situasi tersebut sebagai berikut:

    • Jika versi instance Hologres Anda lebih lama dari V2.0.24, tingkatkan instance atau ajukan tiket. Informasi lebih lanjut tentang cara meningkatkan instance dapat ditemukan di Peningkatan Instance.

    • Jika versi instans Hologres Anda V2.0.24 atau versi setelahnya:

      • Jika Anda melakukan resharding di HoloWeb, klik Continue atau Cancel. Untuk informasi selengkapnya, lihat Resharding Tabel.

      • Jika Anda melakukan resharding dengan menjalankan perintah di atas, ikuti langkah-langkah berikut:

        1. Untuk melanjutkan resharding tabel, selesaikan masalah yang menyebabkan gangguan, lalu jalankan kembali perintah `HG_MOVE_TABLE_TO_TABLE_GROUP` pada tabel tersebut.

        2. Untuk membatalkan resharding dan mengembalikan ke kondisi awal, jalankan perintah berikut secara berurutan:

          -- Batalkan properti readonly pada tabel asli.
          CALL set_table_property('<schema_name>.<table_name>','readonly','false');
          
          -- Hapus tabel temporary.
            -- Dapatkan nama tabel temporary (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;
            -- Dapatkan nama tabel temporary (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;
            -- Hapus tabel temporary.
          DROP TABLE IF EXISTS <schema_name>.<target_temp_table_name>;
          
          -- Hapus data dari tabel sistem. Tabel sistem mencatat progres resharding tabel saat ini. Jika Anda ingin membatalkan tugas, Anda harus menghapus data yang sesuai dari tabel sistem.
          CALL hologres.hg_internal_clear_resharding_properties('<schema_name>.<table_name>'); 

Hapus kelompok tabel

Anda dapat menggunakan pernyataan berikut untuk menghapus kelompok tabel kosong. Anda tidak dapat menghapus kelompok tabel jika masih berisi tabel.

CALL HG_DROP_TABLE_GROUP('<tg_name>');

Contoh:

-- Hapus kelompok tabel bernama tg_8.
CALL HG_DROP_TABLE_GROUP('tg_8');

Lihat hubungan skew antara shard dan worker

Hubungan alokasi ada antara jumlah shard dan jumlah worker. Untuk informasi selengkapnya, lihat Hubungan antara shard dan node komputasi worker. Jika shard tidak dialokasikan secara merata ke worker, skew sumber daya worker dapat terjadi, yang menyebabkan beban tidak merata dan penggunaan sumber daya tidak efisien. Oleh karena itu, Hologres V1.3 menyediakan view sistem worker_info untuk mengkueri hubungan antara worker, kelompok tabel, dan shard dalam database saat ini. View ini membantu Anda memecahkan masalah skew. Untuk informasi selengkapnya tentang cara memeriksa skew sumber daya worker, lihat Lihat hubungan skew worker.

Praktik Terbaik

Kelompok tabel merupakan fitur tingkat lanjut. Dalam kebanyakan kasus, kami tidak menyarankan pembuatan kelompok tabel baru atau modifikasi jumlah shard untuk bisnis Anda. Jika Anda memiliki kebutuhan bisnis yang berbeda, Anda dapat merencanakannya berdasarkan praktik terbaik kami. Untuk informasi selengkapnya, lihat Praktik terbaik untuk mengatur kelompok tabel.

FAQ

Resharding adalah proses kompleks yang melibatkan beberapa langkah, seperti membuat tabel temporary, mengubah status read-only tabel asli, menulis ke tabel target, mengganti nama tabel, dan mencatat status sinkronisasi. Jika terjadi pengecualian pada langkah apa pun, status sistem mungkin menjadi tidak pasti. Anda dapat menggunakan metode berikut untuk memecahkan masalah tersebut.

Kesalahan internal error: Get rundown is not allowed in recovering state. menunjukkan bahwa tabel yang sedang diperbarui berada dalam status read-only. Anda tidak dapat melakukan operasi `INSERT`, `UPDATE`, atau `DELETE` pada tabel tersebut. Anda harus keluar dari status read-only.

  1. Jalankan perintah berikut untuk mengambil daftar tabel yang saat ini berada dalam status read-only.

    select * from hologres.hg_table_properties where property_key ='readonly' and property_value='true';
  2. Jalankan perintah berikut untuk keluar dari status read-only.

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

    table_name menentukan nama tabel yang ingin Anda keluarkan dari status read-only.