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_iddiperoleh dengan penundaan 10 hingga 20 detik. Jika Anda menanyakan tampilan sistem segera setelah Anda membuat kelompok tabel, nilai bidangworker_idmungkin kosong.Jika tidak ada tabel yang ada dalam kelompok tabel, sumber daya tidak dialokasikan ke worker. Dalam kasus ini, nilai bidang
worker_idditampilkan sebagaiid/0dalam hasil kueri. Di Hologres V2.1 dan versi lebih tinggi, jika tidak ada shard yang dialokasikan ke worker, bidangworker_idjuga 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.
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.
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_idyang 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: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 | 164983Menanyakan
worker_idberdasarkan ID shard yang ditentukan oleh bidanghg_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_idyang sesuai dengan shard yang ditentukan oleh bidanghg_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 | 39Jika pemanfaatan CPU worker yang ditentukan oleh
worker_iddalam hasil kueri jauh lebih tinggi dibandingkan dengan worker lainnya, sumber daya komputasi dialokasikan secara tidak merata karena kesenjangan data.
Solusi
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.
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
tg2memiliki 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
tg1memiliki 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_defaultmemiliki 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.