Tüm Ürünler
Search
Belge Merkezi

Hologres:Manage table groups and shards

Son Güncelleme:Oct 06, 2026

Hologres'te Tablo Gruplarını ve parça sayılarını yapılandırarak iş yükleri arasında sorgu performansını, yazma aktarım hızını ve depolama verimliliğini dengeleyin.

Tablo Gruplarını nasıl oluşturacağınızı, sorgulayacağınızı, değiştireceğinizi ve sileceğinizi öğrenin; ayrıca iş yükünüz değiştiğinde tabloları yeniden parçalayın.

Tablo Grupları ve parçaların çalışma şekli

Bir Hologres örneği verileri iki seviyeli bir hiyerarşide düzenler:

  • Tablo Grubu -- Bir veya daha fazla tabloyu barındıran mantıksal bir konteyner. Aynı Tablo Grubundaki tüm tablolar aynı parça sayısını paylaşır.

  • Parça -- Veri dağıtım birimi. Parçalar, paralel işlemeye olanak tanımak için Çalışanlar (hesaplama düğümleri) arasında yayılır.


Kavram


Rolü


Örnek


Bir veya daha fazla veritabanı içerir; her veritabanında bir veya daha fazla Tablo Grubu bulunur


Tablo Grubu


Aynı parça sayısını paylaşan tabloları gruplar. Birleştirme (join) işlemlerine katılan tablolar aynı Tablo Grubunda olmalıdır.


Parça


Paralel işlemeye olanak tanımak için verileri Çalışanlar arasında dağıtır


Çalışan


Bir veya daha fazla parçayı işleyen bir hesaplama düğümü

Her veritabanının, parça sayısı örnek teknik özellikleriyle eşleşen varsayılan bir Tablo Grubu vardır. Varsayılan ayar, çoğu iş yükü için yeterlidir.

Yapılandırma önerileri

Aşağıdaki yönergeleri izleyin:

  • İş yükünüz farklı bir parça sayısı gerektirmiyorsa varsayılan Tablo Grubunu kullanın. Örnek boyutuna göre varsayılan parça sayıları Örnek yönetimi bölümünde listelenmiştir.

  • Büyük örnekler (> 256 CU): Yük dengeleme için birden fazla Tablo Grubu düşünün:

    • Büyük veri hacimleri -- daha yüksek bir parça sayısıyla ayrı bir Tablo Grubu oluşturun.

    • Çok sayıda küçük tablo -- sorgu başlatma ek yükünü azaltmak için daha düşük bir parça sayısıyla ayrı bir Tablo Grubu oluşturun.

  • Birleştirilen tablolar aynı Tablo Grubunu paylaşmalıdır.

  • Tablo başına bir Tablo Grubu oluşturmayın. Bu durum gereksiz ek yük ve parçalanmaya neden olur.

  • Parça sayısını Çalışanlarla hizalayın. Dengeli kaynak kullanımı ve daha kolay yatay ölçeklendirme için parça sayısını Çalışan sayısının katı olarak ayarlayın.

Önemli

Mevcut bir Tablo Grubunun parça sayısı değiştirilemez. Parça sayısını değiştirmek için yeni bir Tablo Grubu oluşturun ve tablolarınızı bu gruba yeniden parçalayın.

Parça sayısı sınırları

Hologres V2.0'dan itibaren, aşırı parça sayısından kaynaklanan tahsis hatalarını önlemek için varsayılan üst sınırlar uygulanır. Üst sınırın aşılması too many shards in this instance hatası döndürür.

Üst sınırlar aşağıdaki formüllere göre belirlenir:

  • Tablo Grubu başına maksimum parça sayısı = Varsayılan parça sayısı x 2

  • Örnek başına toplam maksimum parça sayısı = Varsayılan parça sayısı x 8


Örnek teknik özellikleri


Varsayılan hesaplama düğümleri


Varsayılan parçalar (V0.10.31+)


Tablo Grubu başına maksimum parça (V2.0+)


Örnek başına maksimum parça (V2.0+)


32 CU


2


20


40 (20 x 2)


160 (20 x 8)


64 CU


4


40


80 (40 x 2)


320 (40 x 8)


96 CU


6


60


120 (60 x 2)


480 (60 x 8)


128 CU


8


80


160 (80 x 2)


640 (80 x 8)


160 CU


10


80


160 (80 x 2)


640 (80 x 8)


192 CU


12


80


160 (80 x 2)


640 (80 x 8)


256 CU


16


120


240 (120 x 2)


960 (120 x 8)


384 CU


24


160


320 (160 x 2)


1280 (160 x 8)


512 CU


32


160


320 (160 x 2)


1280 (160 x 8)


...


...


M


M x 2


M x 8

Bu üst sınırları devre dışı bırakmak için (önerilmez -- kaynak tahsis hatalarına neden olabilir):

SET hg_experimental_enable_shard_count_cap = off;

İzinler

Yalnızca süper kullanıcı Tablo Grubu oluşturabilir, değiştirebilir veya silebilir; ayrıca bir tabloyu farklı bir Tablo Grubuna taşıyabilir (yeniden parçalama).

Bir kullanıcıya süper kullanıcı ayrıcalıkları vermek için:

-- Replace <Alibaba Cloud account ID> with the user's UID.
-- For a RAM user, add the prefix "p4_" to the account ID.
ALTER USER "<Alibaba Cloud account ID>" SUPERUSER;

Yeni bir tabloyu bir Tablo Grubuna atamak için yalnızca tablo oluşturma izinleri gerekir.

Tablo Grubu meta verilerini sorgulayın

Varsayılan Tablo Grubunu görüntüleyin

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'
);

Örnek çıktı:

 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)

Çıktıda, is_default_tg varsayılan Tablo Grubunu tanımlar ve shard_count parça sayısını gösterir.

Tüm Tablo Gruplarını listeleyin

SELECT tablegroup_name
FROM hologres.hg_table_group_properties GROUP BY tablegroup_name;

Bir Tablo Grubunun parça sayısını görüntüleyin

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

Bir Tablo Grubundaki tabloları listeleyin

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

Bir tablo için Tablo Grubunu bulun

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

Tablo Grubu oluşturun

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


Parametre


Tür


Açıklama


new_tg_name


Metin


Tablo Grubu adı


shard_count


INT4


Tablo Grubu için parça sayısı

Örnek:

-- Create a Table Group named tg_8 with 8 shards.
CALL HG_CREATE_TABLE_GROUP('tg_8', 8);
Not
  • Mevcut tablolar orijinal Tablo Gruplarında kalır.

  • Orijinal Tablo Grubu, içindeki tüm tablolar ve veriler taşındıktan veya silindikten sonra geçersiz hale gelir.

Varsayılan Tablo Grubunu değiştirin

Yeni tabloların otomatik olarak atanması için farklı bir varsayılan Tablo Grubu ayarlayın.

Not

Hologres V0.9 veya sonraki bir sürüm gerektirir. Örneğiniz daha eski bir sürümdeyse, önce yükseltin.

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


Parametre


Tür


Açıklama


tg_name


TEXT


Varsayılan olarak ayarlanacak Tablo Grubunun adı. Parça sayısı, veritabanı için yeni varsayılan değer olur.

Örnek:

-- Set tg_8 as the default Table Group.
CALL HG_UPDATE_DATABASE_PROPERTY('default_table_group', 'tg_8');

Yeni bir tabloyu belirli bir Tablo Grubuna atayın

CREATE TABLE ve SET_TABLE_PROPERTY çağrılarını bir işlem içinde sarın:

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


Parametre


Tür


Açıklama


table_name


TEXT


Yeni tablonun adı


tg_name


TEXT


Hedef Tablo Grubu. Tablo, bu Tablo Grubunun parça sayısını devralır.

Örnek:

-- Create table tbl1 and assign it to Table Group tg_8.
BEGIN;
CREATE TABLE tbl1 (
    col1 text
);
CALL SET_TABLE_PROPERTY('tbl1', 'table_group', 'tg_8');
COMMIT;

Tabloyu yeniden parçalayın

Bir örneği yukarı ölçeklendirmek, mevcut veritabanları için parça sayısını ayarlamaz. Eklenen kapasiteyi kullanmak için daha yüksek bir parça sayısına sahip yeni bir Tablo Grubu oluşturun ve tablolarınızı bu gruba taşıyın. Ölçeklendirmeden sonra oluşturulan yeni veritabanları güncellenmiş varsayılanı kullanır. Örnek teknik özelliklerine genel bakış.

Üç yöntem kullanılabilir:


Yöntem


Desteklenen tablo türleri


Minimum sürüm


Liquid Table


Bölümlenmemiş ve mantıksal bölümlenmiş tablolar (dinamik; okuma veya yazmayı kesintiye uğratmadan hemen etkili olur)


Hologres V4.2


REBUILD komutu


Bölümlenmemiş, fiziksel bölümlenmiş ve mantıksal bölümlenmiş tablolar (bölüm başına sıralı yürütme)


Hologres V3.1


Saklı yordam


Bölümlenmemiş ve fiziksel bölümlenmiş tablolar


Hologres V0.10

Liquid Table ile yeniden parçalama

Hologres V4.2'den itibaren, bir Liquid Table dinamik olarak Tablo Grupları arasında taşınabilir. Değişiklik, okuma veya yazmayı kesintiye uğratmadan hemen etkili olur. Liquid Table.

REBUILD ile yeniden parçalama

Hologres V3.1'den itibaren, REBUILD komutu tabloları Tablo Grupları arasında eşzamansız olarak taşır ve gerçek zamanlı ilerleme izlemeye olanak tanır. REBUILD (Beta).

Saklı yordamla yeniden parçalama

Hologres V0.10'dan itibaren, yerleşik bir saklı yordam tabloyu yeniden oluşturmadan veya verileri yeniden içe aktarmadan yeni bir Tablo Grubuna taşır.

Sınırlamalar

  • Hologres V0.10 veya sonraki bir sürüm gerektirir. Sürümünüzü Instance Details sayfasında kontrol edin. Daha eski bir sürüm kullanıyorsanız, örneğinizi yükseltin veya çevrimiçi destek alın.

  • Yeniden parçalama sırasında tüm yazma işlemlerini durdurun. Okuma işlemleri etkilenmez. V1.1'den itibaren, gerçek zamanlı yazma görevlerinin otomatik yük devretmesi için set table readonly kullanın.

  • Yeniden parçalama CPU tüketir ve depolamayı geçici olarak artırır. Yoğun olmayan saatlerde çalıştırın.

  • Yeniden parçalamadan önce tablo ikili günlüğünü devre dışı bırakın ve işlem bittikten sonra yeniden etkinleştirin. Hologres ikili günlüklerine abone olun.

  • SERIAL alanları içeren tablolar yeniden parçalanamaz. DEFAULT değerleri içeren tablolar, yeniden parçalamadan sonra DEFAULT niteliğini kaybeder.

  • Tablo, görünümler gibi diğer nesnelere bağımlı olmamalıdır. Yeniden parçalamadan önce bağımlılıkları silin; aksi takdirde Hologres şu hatayı döndürür: "ERROR: resharding table xxx can not executed because other objects depend on it.". Görünüm bağımlılıklarını atlamak için set hg_experimental_hg_insert_overwrite_enable_view=on; ayarlayın.

  • Yeniden parçalama yalnızca Basit İzin Modeli (SPM) için geçerlidir. Hologres izin modeli.

  • Yeniden parçalama, otomatik bölümlendirme özelliklerini korumaz.

  • Hologres V2.0'dan itibaren, sütun açıklamaları yeniden parçalama sırasında korunur. Daha eski sürümlerde, sütun açıklamalarını manuel olarak yedekleyin ve geri yükleyin.

Söz dizimi

V2.0.24 ve sonraki sürümler için: Grafik arayüz üzerinden yeniden parçalama yapmak için HoloWeb'i kullanın. Tablo yeniden parçalama.

Daha eski sürümler için: Aşağıdaki SQL komutlarını çalıştırın.

-- For V1.1 and later:
CALL HG_MOVE_TABLE_TO_TABLE_GROUP('<table_name>', '<new_table_group_name>');

-- For V0.10 and later:
CALL HG_UPDATE_TABLE_SHARD_COUNT('<table_name>', '<new_table_group_name>');


Parametre


Açıklama


Örnek


table_name


Taşınacak tablo. Bölümlenmiş bir tablo için üst tabloyu belirtin. Komutu tablo başına bir kez çalıştırın.


new_table


new_table_group_name


Hedef Tablo Grubu.


new_tg

Önemli
  • Tabloları taşımadan önce yeni Tablo Grubunu oluşturun. Tablo Grubu oluşturun.

  • Yeniden parçalama sırasında tablodaki tüm yazma işlemlerini durdurun. Okuma işlemleri etkilenmez.

  • Tüm tablolar bir Tablo Grubundan taşındıktan sonra, artık gerekmiyorsa boş Tablo Grubunu HG_DROP_TABLE_GROUP kullanarak manuel olarak silin.

  • Bölümlenmiş bir tablo için yalnızca üst tablo üzerinde işlem yapın.

  • Sanal ambar örneğinde, taşıma işlemini hedef Tablo Grubunun lider Sanal Ambarı tarafından çalıştırılması gerekir; ayrıca kaynak Tablo Grubuna takipçi olarak erişebilmesi gerekir. Verilere erişmek için bir hesaplama grubunu yetkilendirin.

Yeniden parçalama istisnalarını yönetin

Yeniden parçalama, OOM hataları veya manuel sonlandırma nedeniyle kesintiye uğrayabilir. Kesintiye uğrarsa, orijinal tablo salt okunur hale gelir ve <initial_table_name>_xxxxxxxx adında geçici bir tablo görünür.

V2.0.24 veya sonraki sürümlerdeki örnekler için:

  • HoloWeb: Kullanıcı arayüzünden yeniden parçalamaya devam edin veya iptal edin. Tablo yeniden parçalama.

  • SQL: Aşağıdaki adımları izleyin.

Daha eski sürümlerdeki örnekler için: Önce V2.0.24 veya sonraki bir sürüme yükseltin.

Yeniden parçalamaya devam etmek için, kök nedeni çözün ve HG_MOVE_TABLE_TO_TABLE_GROUP komutunu tekrar çalıştırın.

Yeniden parçalamayı iptal etmek ve orijinal durumu geri yüklemek için, bu komutları sırayla çalıştırın:

-- 1. Remove the read-only flag from the original table.
CALL set_table_property('<schema_name>.<table_name>', 'readonly', 'false');

-- 2. Find the temporary table name.
-- For a partitioned table:
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;

-- For a non-partitioned table:
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. Drop the temporary table.
DROP TABLE IF EXISTS <schema_name>.<target_temp_table_name>;

-- 4. Clear the resharding progress record.
CALL hologres.hg_internal_clear_resharding_properties('<schema_name>.<table_name>');

Tablo Grubunu silin

Önce Tablo Grubundaki tüm tabloları kaldırın, ardından şunu çalıştırın:

CALL HG_DROP_TABLE_GROUP('<tg_name>');

Örnek:

CALL HG_DROP_TABLE_GROUP('tg_8');

Parça-Çalışan dağıtımını kontrol edin

Parçaların Çalışanlar arasında dengesiz dağıtılması, yük dengesizliğine ve kaynakların verimsiz kullanımına neden olur.

Hologres V1.3'ten itibaren, parça-Çalışan eşlemesini kontrol etmek için worker_info sistem görünümünü kullanın. Temel kavramlar parça-düğüm ilişkisini kapsar. Çalışanlar arasındaki parça tahsisini sorgulayın sorgu söz dizimini sağlar.

En iyi uygulamalar

Varsayılan Tablo Grubu çoğu iş yükü için uygundur. Özel yapılandırmalar Tablo gruplarını ayarlama için en iyi uygulamalar bölümünde ele alınmıştır.

SSS

"internal error: Get rundown is not allowed in recovering state" hatası ne anlama gelir?

Bu hata, tablonun salt okunur olduğunu ve INSERT, UPDATE ve DELETE işlemlerini engellediğini gösterir. Hologres, veri tutarsızlığını önlemek için yeniden parçalama kesintiye uğradığında bu durumu ayarlar.

Sorunu çözmek için:

  1. Tüm salt okunur tabloları bulun:

       SELECT * FROM hologres.hg_table_properties
       WHERE property_key = 'readonly' AND property_value = 'true';
  2. Salt okunur bayrağını kaldırın. <table_name> yerine tam nitelikli tablo adını girin (örneğin, public.my_table).

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