全部产品
Search
文档中心

Hologres:Memeriksa alokasi shard di antara workers

更新时间:Nov 06, 2025

Jika kecepatan respons instance Hologres Anda melambat dan data deret waktu menunjukkan bahwa pemanfaatan CPU satu atau lebih workers dalam instance Hologres Anda lebih rendah dibandingkan dengan workers lainnya, kemungkinan terjadi ketidakseimbangan sumber daya komputasi. Hologres menyediakan Tampilan sistem baru hologres.hg_worker_info. Anda dapat menggunakan tampilan ini untuk memeriksa hubungan antara workers, grup tabel, dan shard dalam database. Hal ini membantu Anda menemukan dan menyelesaikan masalah ketidakseimbangan sumber daya serta meningkatkan pemanfaatan sumber daya. Topik ini menjelaskan cara menggunakan hologres.hg_worker_info untuk memeriksa alokasi shard di antara workers.

Latar Belakang

Untuk informasi lebih lanjut tentang konsep dan hubungan antara workers, grup tabel, dan shard dalam Hologres, lihat Arsitektur dan Konsep Dasar. Shard perlu dialokasikan secara merata ke workers. Jika shard tidak dialokasikan secara merata ke workers, mungkin terjadi ketidakseimbangan sumber daya yang menyebabkan penggunaan sumber daya menjadi tidak efisien. Selain itu, metrik worker ditampilkan di konsol Hologres. Tampilan sistem hologres.hg_worker_info yang disediakan oleh Hologres V1.3 dan versi berikutnya membantu Anda memeriksa hubungan antara workers, grup tabel, dan shard dalam database. Anda dapat menentukan apakah sumber daya dialokasikan secara tidak merata berdasarkan hasil kueri.

Batasan

  • Hanya Hologres V1.3.23 dan versi berikutnya yang mendukung tampilan sistem hologres.hg_worker_info. Anda dapat melihat versi instance Hologres Anda di halaman detail instance di konsol Hologres. Jika versi instance Hologres Anda lebih awal dari V1.3.23, tingkatkan instance Hologres Anda secara manual di konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mengajukan peningkatan instance. Untuk informasi lebih lanjut tentang cara menaikkan versi instance Hologres secara manual, lihat Peningkatan Instance. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan Dukungan Online untuk Hologres.

  • Tampilan sistem hologres.hg_worker_info menunjukkan alokasi real-time shard di antara workers. Anda tidak dapat memeriksa alokasi historis shard di antara workers.

  • Saat Anda membuat kelompok tabel, worker_id diperoleh dengan penundaan 10 hingga 20 detik. Jika Anda menanyakan tampilan sistem segera setelah Anda membuat kelompok tabel, nilai bidang worker_id mungkin kosong.

  • Jika tidak ada tabel yang ada dalam kelompok tabel, sumber daya tidak dialokasikan ke worker. Dalam kasus ini, nilai bidang worker_id ditampilkan sebagai id/0 dalam hasil kueri. Di Hologres V2.1 dan versi lebih tinggi, jika tidak ada shard yang dialokasikan ke worker, bidang worker_id juga ditampilkan. Nilai bidang ini kosong, menunjukkan bahwa tidak ada shard yang dialokasikan ke worker.

  • Anda hanya dapat memeriksa informasi tentang workers, grup tabel, dan shard di database saat ini. Anda tidak dapat memeriksa informasi tentang database lainnya.

Catatan penggunaan

Tabel berikut menjelaskan bidang-bidang yang terkandung dalam tampilan sistem hologres.hg_worker_info.

Bidang

Tipe data

Deskripsi

worker_id

TEXT

ID worker yang sesuai dengan database saat ini.

table_group_name

TEXT

Nama grup tabel dalam database saat ini.

shard_id

BIGINT

ID shard dalam grup tabel.

warehouse_id

BIGINT

ID gudang virtual tempat worker berada.

Eksekusi pernyataan SQL berikut untuk memeriksa alokasi shard di antara workers dari tampilan sistem hologres.hg_worker_info:

select * from hologres.hg_worker_info;

Kode sampel berikut menunjukkan hasil kueri.

Catatan

Dalam hasil kueri, xx_tg_internal adalah kelompok tabel bawaan instans Hologres. Kelompok tabel ini digunakan untuk mengelola informasi seperti metadata. Anda dapat mengabaikan kelompok tabel ini.

 worker_id  | table_group_name | shard_id
------------+------------------+----------
 bca90a00ef | tg1              |        0
 ea405b4a9c | tg1              |        1
 bca90a00ef | tg1              |        2
 ea405b4a9c | tg1              |        3
 bca90a00ef | db2_tg_default   |        0
 ea405b4a9c | db2_tg_default   |        1
 bca90a00ef | db2_tg_default   |        2
 ea405b4a9c | db2_tg_default   |        3
 ea405b4a9c | db2_tg_internal  |        3
                    

Praktik terbaik: Memecahkan masalah alokasi sumber daya komputasi yang tidak merata (distribusi beban tidak seimbang di antara workers)

Di Hologres, data didistribusikan di antara shard. Seorang worker mungkin mengakses data dari satu atau lebih shard selama komputasi. Dalam sebuah instance Hologres, satu shard hanya dapat diakses oleh satu worker pada satu waktu. Jika total jumlah shard yang diakses oleh setiap worker berbeda, maka beban di antara workers tidak seimbang. Dalam hal ini, pemanfaatan CPU satu atau lebih workers rendah. Gambar berikut menunjukkan contoh distribusi beban yang tidak seimbang di antara workers. worker负载不均Distribusi beban yang tidak seimbang di antara workers dapat disebabkan oleh berbagai alasan. Anda dapat menggunakan tampilan sistem hologres.hg_worker_info untuk analisis lebih lanjut. Informasi berikut menjelaskan kemungkinan penyebab dan solusi untuk masalah tersebut:

  • Penyebab 1: Shard dialokasikan secara tidak merata ke workers setelah failover worker.

    Sebagaimana dijelaskan dalam Konsep Dasar, jika worker gagal karena kesalahan out of memory (OOM) atau penyebab lainnya, sistem akan mengalokasikan shard pada worker yang rusak ke worker lain untuk memulihkan kueri. Setelah worker pulih, sistem akan mengalokasikan ulang beberapa shard ke worker ini. Hal ini menyebabkan alokasi shard yang tidak merata di antara workers. Dalam tampilan sistem hologres.hg_worker_info, Anda dapat memeriksa jumlah shard yang dialokasikan ke setiap worker dalam database saat ini. Dengan cara ini, Anda dapat memeriksa apakah sumber daya komputasi dialokasikan secara tidak merata. Tampilan sistem hologres.hg_worker_info menampilkan informasi tentang database saat ini, tetapi workers dibagi oleh semua database dalam instance. Oleh karena itu, jika Anda ingin memeriksa alokasi shard di antara workers, Anda perlu memeriksa jumlah shard yang dialokasikan ke setiap worker di setiap database untuk mendapatkan jumlah total shard yang dialokasikan ke setiap worker dalam instance, kemudian tentukan apakah sumber daya komputasi dialokasikan secara tidak merata.

    • Pernyataan Sampel

      select worker_id, count(1) as shard_count from hologres.hg_worker_info group by worker_id;
    • Hasil Sampel

      -- Dalam contoh ini, instans hanya memiliki satu database, dan hasil berikut dikembalikan:
       worker_id  | shard_count
      ------------+-------------
       bca90a     |      4
       ea405b     |      4
       tkn4vc     |      4
       bqw5cq     |      3
       mbbrf6     |      3
       hsx66f     |      1
      (6 baris)
    • Deskripsi Hasil

      Instance memiliki enam workers, dan jumlah shard yang dialokasikan ke enam workers tersebut berbeda. Metrik dalam konsol Hologres menunjukkan bahwa pemanfaatan CPU workers dengan lebih sedikit shard lebih rendah dibandingkan dengan workers lainnya. Sumber daya komputasi instance dialokasikan secara tidak merata.

    • Solusi

      Mulai ulang instance. Dengan cara ini, shard dialokasikan ulang di antara workers. Ini memastikan alokasi shard yang merata di antara workers. Jika Anda tidak memulai ulang instance, lebih banyak sumber daya dialokasikan ke workers yang idle saat worker lain gagal.

  • Penyebab 2: Sumber daya komputasi dialokasikan secara tidak merata karena skew data.

    Jika data bisnis sangat condong, sebagian besar data didistribusikan pada beberapa shard. Saat Anda menanyakan data, worker sering mengakses shard-shard ini. Ini mengarah pada beban CPU yang tidak seimbang di antara worker. Anda dapat menggunakan tampilan sistem hologres.hg_worker_info dan hologres.hg_table_properties untuk menanyakan worker_id yang sesuai dengan data condong dalam tabel. Kemudian, Anda dapat menentukan apakah sumber daya komputasi dialokasikan secara tidak merata karena kesenjangan data. Lakukan langkah-langkah berikut:

    1. Periksa apakah skew data ada.

      Eksekusi pernyataan SQL berikut untuk memeriksa apakah data tabel miring. Jika jumlah data dalam sebuah shard secara signifikan berbeda dari yang lain, data tabel miring.

      select hg_shard_id,count(1) from <table_name> group by hg_shard_id order by 2;
      
      -- Hasil Contoh: Jumlah data dalam shard 39 jauh lebih besar daripada yang lain. Ini menunjukkan bahwa kesenjangan data ada.
      hg_shard_id | count
      -------------+--------
                53 |  29130
                65 |  28628
                66 |  26970
                70 |  28767
                77 |  28753
                24 |  30310
                15 |  29550
                39 | 164983
    2. Menanyakan worker_id berdasarkan ID shard yang ditentukan oleh bidang hg_shard_id.

      Pada langkah sebelumnya, Anda dapat menemukan shard yang condong. Anda dapat menggunakan tampilan sistem hologres.hg_worker_info dan hologres.hg_table_properties untuk menanyakan worker_id yang sesuai dengan shard yang ditentukan oleh bidang hg_shard_id. Pernyataan contoh:

      SELECT distinct b.table_name, a.worker_id, a.table_group_name,a.shard_id from
      hologres.hg_worker_info a
      join (SELECT property_value, table_name
      FROM hologres.hg_table_properties
      WHERE property_key = 'table_group') b
      on a.table_group_name = b.property_value and b.table_name = '<tablename>' and shard_id=<shard_id>;
      
      -- Hasil Contoh
      table_name  | worker_id  | table_group_name  | shard_id
      ------------+------------+-------------------+------------------
       table03    | bca90a00ef | db2_tg_default    | 39

      Jika pemanfaatan CPU worker yang ditentukan oleh worker_id dalam hasil kueri jauh lebih tinggi dibandingkan dengan worker lainnya, sumber daya komputasi dialokasikan secara tidak merata karena kesenjangan data.

    Solusi

    1. Konfigurasikan kunci distribusi yang tepat. Dengan cara ini, data dapat didistribusikan secara merata di antara shard. Untuk informasi lebih lanjut, lihat Optimalkan Kinerja Kueri pada Tabel Internal Hologres.

    2. Jika data bisnis sangat miring, Anda dapat membagi tabel menjadi beberapa tabel. Misalnya, volume merchandise bruto (GMV) dalam tabel pesanan yang ditempatkan dalam live streaming mungkin jelas berbeda di antara streamer.

  • Penyebab 3: Jumlah shard tidak dikonfigurasi dengan benar.

    Kami merekomendasikan Anda untuk menyetel jumlah shard menjadi kelipatan dari jumlah workers untuk menyeimbangkan beban di antara workers. Jika jumlah shard tidak dikonfigurasi dengan benar, beban di antara workers mungkin tidak seimbang. Anda dapat menggunakan tampilan sistem hologres.hg_worker_info untuk memeriksa apakah jumlah shard grup tabel dikonfigurasi dengan benar dalam database saat ini.

    • Pernyataan Sampel

      select table_group_name, worker_id, 
      count(1) as shard_count, warehouse_id from hologres.hg_worker_info 
      group by table_group_name, worker_id, warehouse_id 
      order by table_group_name desc;
    • Hasil Sampel

       table_group_name | worker_id  | shard_count  | warehouse_id
      ------------------+------------+--------------+-------------
       tg2              | ea405b4a9c |           1  |           1
       tg2              | bca90a00ef |           2  |           2
       tg1              | ea405b4a9c |           5  |           1
       tg1              | bca90a00ef |           6  |           2
       db2_tg_default   | bca90a00ef |           4  |           2
       db2_tg_default   | ea405b4a9c |           4  |           1
       db2_tg_internal  | bca90a00ef |           1  |           2
      (7 baris)
    • Deskripsi Hasil (untuk instance yang memiliki dua workers)

      • Kelompok tabel tg2 memiliki tiga shard. Satu worker dialokasikan dengan satu shard lebih sedikit daripada yang lain. Jika performa tidak memenuhi harapan Anda, kami merekomendasikan Anda untuk menetapkan jumlah shard yang sesuai atau menambah skala instans.

      • Kelompok tabel tg1 memiliki 11 shard. Satu worker dialokasikan dengan satu shard lebih sedikit daripada yang lain. Jika performa tidak memenuhi harapan Anda, kami merekomendasikan Anda untuk menetapkan jumlah shard yang sesuai atau menambah skala instans.

      • Kelompok tabel default db2_tg_default memiliki delapan shard. Dengan cara ini, shard dialokasikan secara merata ke worker.

    • Solusi

      Jika sumber daya tidak dialokasikan secara merata ke workers karena jumlah shard yang tidak sesuai, perkirakan pengaturan jumlah shard berdasarkan kebutuhan bisnis Anda. Kami merekomendasikan Anda untuk menyetel jumlah shard menjadi kelipatan dari jumlah workers.