日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Table Group與Shard Count操作指南

當遇到需要進行實時數據處理或大規模數據采集等場景(如:實時分析、日志收集),面臨大量并發讀寫請求時,通過合理的Table Group選擇與Shard Count制定可以實現數據分布和負載均衡,優化查詢性能,從根本上提升數據的存儲與計算效率。

Table Group與Shard Count設置建議

Hologres擁有靈活指定Shard和Table Group的特性,相比一些同類產品,具備更加靈活、易用、方便根據具體場景定制化Schema的能力,更加靈活應對業務需求,加上用戶對自身業務的理解,能夠比較高效、充分地利用Hologres高性能。推薦設置Table Group基本原則如下:

  • 如無必要不建議新建Table Group,使用默認Table Group即可,規格詳情請參見實例規格概述

  • 對于大規格實例(大于256 Core)建議根據業務情況拆分多個Table Group,以使得業務使用更加均衡。

    • 數據量過大,可新建獨立較大Shard數的Table Group。

    • 表的數據量很小但數量很多,可獨立出一個小Shard數的Table Group,減小Query啟動開銷。

  • 需要Join在一起的表(Local Join),必須放在同一個Table Group中。

  • 不要為每個表都設置一個Table Group。

  • 設置Shard數時,充分考慮Worker個數以及后續的擴容情況,盡量使得Shard數與Worker個數為倍數關系,以此讓資源分配更加平衡。

  • 不支持修改已經創建Table Group的Shard數。如果您需要修改Shard數量,請新建Table Group。

  • 不建議Shard數設置過多,否則會導致無法分配計算資源,帶來額外開銷。Hologres從2.0版本開始,將會默認為單個Table Group的Shard數設置上限,并為整個實例設置Shard數上限,防止出現Shard數設置過多導致無法分配計算資源的問題,當超過約定的Shard總數上限時,會提示異常too many shards in this instance,具體Shard數上限規則如下:

    • 單個Table Group的Shard數上限=單個Table Group默認Shard數 * 2

    • 實例總的Shard數上限=單個Table Group默認Shard數 * 8

    • 如需調整單Table Group的Shard數上限和實例總Shard數上限,需要使用如下GUC參數取消Shard數上限,但是不建議使用,否則可能會因為Shard數過多導致無法分配計算資源。

      set hg_experimental_enable_shard_count_cap =off;
    • Shard數上限一覽表:

      實例規格

      默認計算節點數

      默認Shard數(適用于V0.10.31及以上版本)

      單個Table Group的shard count上限(適用于V2.0及以上版本)

      實例總的shard count上限(適用于V2.0及以上版本)

      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

權限說明

  • 新建Table Group、修改默認Table Group、刪除Table Group、遷移表的Table Group(Resharding)需要實例的Superuser賬號進行操作。使用Superuser賬號執行如下語句為普通用戶授予Superuser權限。

    --將“云賬號ID”替換為實際用戶名。如果是RAM用戶,賬號ID前需要添加“p4_”。
    ALTER USER "云賬號ID" SUPERUSER; 
  • 將新建表放入指定Table Group操作需要賬號有新建表權限。

獲取Table Group元數據

  1. 查看默認Table Group

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

    結果:

    說明

    結果中is_default_tg代表為默認Table Group,shard_count代表Table Group對應的Shard數。

    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)
  2. 查看當前數據庫有哪些Table Group

    SELECT tablegroup_name
    FROM hologres.hg_table_group_properties GROUP BY tablegroup_name;

    結果:

    tablegroup_name
    -----------------
     test_tg_default
    (1 row)
  3. 查看某Table Group設置的Shard數

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

    結果:

    shard_count
    -------------
     3
    (1 row)
  4. 查看某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>';

    結果:

    schema_name | table_name
    -------------+------------
     public      | a
    (1 row)
  5. 查看某張表所在的Table Group

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

    結果:

    table_group_name
    ------------------
     test_tg_default
    (1 row)

新建Table Group

若是有新上的業務或者需要重新創建Table Group并指定新的Shard數,可以使用以下命令語句。

說明
  • 新建Table Group后,原來的表和數據還會在原Table Group中,不會默認遷移到新的Table Group中。

  • 需要將原來表和數據都遷移至新的Table Group或者刪除,原Table Group才會失效。

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

參數說明如下:

參數

類型

說明

new_tg_name

Text

新建的Table Group名。

shard_count

INT4

Table Group對應的Shard數。

使用示例:

-- 新建一個Shard數為8的新Table Group,命名為tg_8
CALL HG_CREATE_TABLE_GROUP ('tg_8', 8);

修改默認Table Group

新建一個數據庫后,實例會有一個默認Table Group,以及默認的Shard數。詳情請參見實例規格概述。若是數據庫中有多個Table Group,想要修改默認Table Group,使得后續新建的表存放于新的Table Group中,可以使用如下命令語句。

說明

Hologres實例V0.9及以上版本執行以下命令語句修改默認Table Group,V0.9以下版本請先升級到更高版本。

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

參數說明:

參數

類型

說明

tg_name

TEXT

默認Table Group名稱,設置后,其Shard count為設置的Table Group的Shard數。

使用示例:

-- 將新創建TG設為默認Table Group,后續新建的表,將默認使用新的Table Group (v0.9及以上版本)
CALL HG_UPDATE_DATABASE_PROPERTY ('default_table_group', 'tg_8');

將新建表放入指定Table Group

可以通過以下命令語句將新建表,顯式放入指定的Table Group中。

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

參數說明:

參數

類型

說明

table_name

TEXT

新建的表名。

tg_name

TEXT

指定的Table Group名稱,設置后,其Shard Count為設置的Table Group的Shard數。

使用示例:

-- 新建表tbl1并直接關聯名為tg_8的Table Group
BEGIN;
CREATE TABLE tbl1 (
    col1 text
);
CALL SET_TABLE_PROPERTY('tbl1', 'table_group', 'tg_8');
COMMIT;

(Resharding)遷移表至新建Table Group

在Hologres中,Shard用于提升數據處理的并發度,合理的設置Shard數,有利于提高查詢或者寫入的性能。一般情況下,Hologres實例默認的shard數已經能滿足大部分場景,無需再手動修改。

當實例擴容后,例如32core擴容到128core,該數據庫的Shard數不會隨著擴容默認更改,因此建議您針對該數據庫增加Shard數,以獲取更好的性能。如果是該實例下新建的DB,其Shard數為當前規格的默認數量。實例規格與Shard的相關描述,請參見實例規格概述

當實例擴容或者縮容后,其之前DB的Shard數不會自動隨之增加或減少,需要通過命令語句設置Shard數,并重新進行數據導入。Resharding功能用于修改Shard數后,自動實現Rebalance的功能,無需再重新建表導數據,即可將原來的表和數據Resharding到各Shard上,簡化操作步驟,實現最優性能。

  • 使用限制

    • 僅Hologres V0.10及以上版本支持Resharding,請前往Hologres管控臺的實例詳情頁查看當前實例版本,如果您的實例是V0.10以下版本,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?

    • 目前Resharding是單表級別,當使用Resharding時,需要停止該表的寫入(如Flink、數據集成等寫入),對表的查詢不受影響。V1.1 版本開始,支持set table readonly,實時任務寫入自動Failover。

    • Resharding會消耗CPU資源,且在Resharding過程中會導致存儲增加,建議在業務低峰期處理。

    • 如果表開啟了Binlog,請在Resharding之前關掉Binlog,待Resharding完成后再開啟Binlog,詳細操作請參見訂閱Hologres Binlog

    • 暫不支持表字段帶有Serial自增序列以及Default值進行Resharding,帶Serial字段的表在Resharding時會報錯,帶Default字段的表Resharding后會丟失Default屬性。

    • 表在Resharding時不能有其他的依賴比如view等,若存在請在Resharding前刪除相關依賴,否則會報錯“ERROR: resharding table xxx can not executed because other objects depend on it.”

    • 自Hologres V2.2.29版本開始,支持對有View依賴的表執行Resharding。

    • Resharding只適用簡單模型,不適用于專家模型。關于Hologres權限模型介紹,詳情請參見Hologres權限模型概述

    • Resharding暫不保留表的動態分區屬性。

    • 僅Hologres V2.0及以上版本的Resharding操作支持保留列COMMENTS。如果您的實例版本低于V2.0,請提前備份列COMMENTS,并在Resharding完成后手動設置。

  • 語法示例

    • 如果您的實例為V2.0.24及以上版本,推薦使用HoloWeb進行Resharding操作,詳情請參見Table Resharding

    • 如果您的實例版本低于V2.0.24,可以通過以下命令將業務的部分表遷移至新建的Table Group。如果實例版本低于V0.10,請先升級到更高版本。

    說明
    • 在遷移之前,需要有一個新建的Table Group,若是沒有新建Table Group,請參見新建Table Group進行新建。

    • 表遷移時需要停止對該表的寫入,查詢不受影響。

    • 原Table Group的表全部遷移后,原Table Group將會被自動刪除。若是因為業務需求需要建立多個Table Group,建議合理設置每個Table Group的Shard數。

    • 表遷移時分區表只需要操作父表即可。

    -- V1.1及以上版本命令語法
    CALL HG_MOVE_TABLE_TO_TABLE_GROUP('<table_name>','<new_table_group_name>');
    
    -- V0.10版本命令語法
    CALL HG_UPDATE_TABLE_SHARD_COUNT('<table_name>','<new_table_group_name>');
  • 參數說明

    參數

    說明

    示例

    table_name

    需要遷移的表名。一次命令僅支持單表遷移,若是有多個表,需要多次執行。分區表只需要操作父表即可。

    new_table

    table_group_name

    新的Table Group名。

    new_tg

  • 異常處理

    Table Resharding過程中,會先將表設為只讀狀態,而后通過臨時表的方式進行Table Group遷移。由于Resharding任務涉及數據導入,可能需要執行較長時間,因此可能會出現多種異常情況,如OOM、手動終止任務等,此時原表會仍處于只讀狀態,且數據庫中出現名為<initial_table_name>_xxxxxxxx的臨時表,此時需要根據如下情況進行操作:

    • Hologres實例版本低于 V2.0.24,請升級實例或提交工單解決,升級實例請參見實例升級

    • Hologres實例版本為 V2.0.24及以上:

      • 如果您通過HoloWeb進行Resharding操作,請單擊繼續運行或取消任務,詳情請參見Table Resharding

      • 如果您通過執行上述命令進行Resharding操作,請按以下步驟操作:

        1. 如果您希望繼續對該表進行Resharding:對中斷原因進行處理后,重新對該表運行HG_MOVE_TABLE_TO_TABLE_GROUP命令即可。

        2. 如果您希望取消Resharding并恢復初始狀態:請依次運行如下命令進行恢復:

          -- 取消原表的readonly屬性
          CALL set_table_property('<schema_name>.<table_name>','readonly','false');
          
          -- 清理臨時表
            -- 獲取臨時表名(分區表)
          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;
            -- 獲取臨時表名(非分區表)
          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;
            -- 清理臨時表
          DROP TABLE IF EXISTS <schema_name>.<target_temp_table_name>;
          
          -- 清理系統表。系統表中會記錄當前表的Resharding進度,如果希望取消任務,需要清理系統表中的對應數據
          CALL hologres.hg_internal_clear_resharding_properties('<schema_name>.<table_name>'); 

刪除Table Group

可以通過以下命令語句刪除空的Table Group。如果Table Group有表存在,則無法刪除。

CALL HG_DROP_TABLE_GROUP('<tg_name>');

使用示例:

--刪除名為tg_8的Table Group
CALL HG_DROP_TABLE_GROUP('tg_8');

查看Shard與Worker的傾斜關系

Shard數與Worker個數存在一定的分配關系,詳情請參見Shard與計算節點Worker的關系。如果Worker個數與Shard分配不均,那么很容易出現Worker資源傾斜,導致負載不均,資源得不到高效利用。因此在Hologres V1.3版本提供worker_info系統視圖,用于查詢當前數據庫的Worker、Table Group和Shard之間的關系,從而幫助排查解決傾斜問題,詳細的Worker資源傾斜排查請參見查看Worker傾斜關系

使用最佳實踐

Table Group是比較高級的功能,一般情況下,不建議業務新建Table Group以及修改Shard數。若是因為業務有不同的需求,可以按照最佳實踐合理規劃,詳情請參見Table Group設置最佳實踐

常見問題

Resharding是個比較復雜的過程,涉及到創建臨時表、修改原始表只讀狀態、寫入目標表、更換表名稱和記錄同步狀態等多個環節,如果中間環節因為某些原因出現異常,可能造成系統狀態不確定等問題,可通過以下方法進行排查。

當出現internal error: Get rundown is not allowed in recovering state.異常時,說明當前正在更新的表處于Read Only狀態,不能執行Insert、Update、Delete等操作,此時需要退出Read Only狀態。

  1. 執行如下命令檢索當前處于Read Only狀態的表。

    select * from hologres.hg_table_properties where property_key ='readonly' and property_value='true';
  2. 執行如下命令退出Read Only狀態。

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

    table_name為需要退出Read Only狀態的表名稱。