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

自助健康檢查常用命令

本文為您介紹Hologres使用過程中自助健康檢查常用命令。

表規劃檢查

  • 避免Table Group & Shard過多

    實例在256Core以下規格,建議只使用默認Table Group;256Core及以上規格實例,可以定義2~3個Table Group。數據庫總的Table Group數不建議超過3個。Shard數應大于Worker Node數,小于Core數的60%。如果配置了Replication,Shard數應等比例減小,或等比例增加Worker Node計算資源。檢查命令如下。

    -- 查詢當前Table Group個數
    SELECT COUNT(DISTINCT tablegroup_name)
    FROM hologres.hg_table_group_properties;
    
    -- 檢查每個TG配置,一個TG不建議超過3000張表(table_num)
    SELECT tablegroup_name AS table_group
            ,max(property_value) FILTER( WHERE property_key='shard_count') AS shard_count
            ,max(property_value) FILTER( WHERE property_key='replica_count') AS replica_count
            ,max(property_value) FILTER( WHERE property_key='is_default_tg') AS is_default
            ,max(property_value) FILTER( WHERE property_key='table_num') AS table_num
    FROM    hologres.hg_table_group_properties
    GROUP BY tablegroup_name;

    如果Table Group數量超過3個,建議規劃為一個核心Table Group,合并多余Table Group;或者一個主Table Group,以及一個面向維表的小Table Group,通過(Resharding)遷移表至新建Table Group操作。

  • 檢查表數量是否合理

    過多的表,引起小文件多,導致元數據占用內存過多,檢查表數量命令如下。

    -- 檢查不同Schema下的內部表數量
    SELECT table_namespace AS schema 
            , COUNT(distinct table_name) AS total_tables
            , COUNT(distinct table_name) FILTER ( WHERE property_key='storage_format') AS inner_tables
    FROM    hologres.hg_table_properties
    WHERE   table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    GROUP BY table_namespace
    ORDER BY table_namespace;

    如果分區表小且多,建議重新建表,將分區表合并為普通表。

  • 檢查表統計信息是否更新及時

    檢查表統計信息命令如下。

    -- 檢索超過一天沒有更新統計信息的表
    SELECT  schema_name
            ,table_name
            ,total_rows
            ,analyze_timestamp
    FROM    hologres_statistic.hg_table_statistic
    WHERE   analyze_timestamp < now() - interval '1 days'
    ORDER BY schema_name
             ,table_name
    LIMIT 200;

    如果有統計信息更新不及時的表,且該表有數據更新,請執行analyze tablename命令,刷新表的統計信息。

  • 避免過多資源組

    資源組會限制CPU和內存資源的使用,通常資源組最多設置3個,且保證default資源組分配資源在0.3以上。

    檢查資源組的命令如下。

    SELECT * FROM pg_holo_resource_groups
    WHERE property_key='worker_limit';

表設計檢查

  • 有限使用行存表

    行存表使用場景相對有限,主要用在Flink關聯維表場景,因此需要避免誤用。列出所有行存表命令如下。

    SELECT  table_namespace AS schema
            ,table_name AS tables
    FROM    hologres.hg_table_properties
    WHERE
            property_key = 'orientation'
    AND     property_value = 'row'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog');

    如果誤用了行存表,請重新建表,選擇列存或者行列共存表。

  • Distribution Key應明確設置,且不建議超過2列

    建議每個表都至少設置一列做Distribution Key,并且Distribution Key不建議超過2個,檢查命令如下。

    -- 列出所有Distribution Key超過2列的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS distribution_key
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'distribution_key'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    AND     array_length(string_to_array(property_value,','),1) > 2;
    
    -- 列出所有沒有設置Distribution Key的表
    SELECT  DISTINCT table_namespace AS schema
            ,table_name AS tables
    FROM    hologres.hg_table_properties a
    WHERE property_key='storage_format' AND NOT EXISTS (
                         SELECT  1
                         FROM    hologres.hg_table_properties b
                         WHERE   b.property_key = 'distribution_key'
                         AND     a.table_namespace = b.table_namespace
                         AND     a.table_name = b.table_name)
                         AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog'
                     )
    ORDER BY schema
             ,tables;

    如果Distribution Key列超過兩個,請重新建表,選擇一到兩個列作為Distribution Key。

  • Dictionary Encoding不建議超過20列

    僅對低基數列設置Dictionary Encoding,一般建議不超過20列。如果不確定,請選擇auto encoding,避免全部列設置Dictionary Encoding。檢查命令如下。

    --列出所有dictionary_encoding_columns超過20列,并且沒有配置為auto encoding的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS dictionary_encoding_columns
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'dictionary_encoding_columns'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    AND     array_length(string_to_array(property_value,','),1) > 20
    AND     property_value NOT LIKE '%:auto';

    如果設置Dictionary Encoding列超過20列,請通過SET_TABLE_PROPERTY或者UPDATE_TABLE_PROPERTY命令更改dictionary_encoding_columns的配置,詳情請參見SET_TABLE_PROPERTY或者ALTER TABLE

  • Bitmap Columns不建議超過30列

    僅對需要等值比較的列設置Bitmap,一個表建議不超過30列設置Bitmap,過多字符串列設置Bitmap會占用額外存儲和內存開銷。

    -- 列出所有bitmap_columns超過30個列的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS bitmap_columns
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'bitmap_columns'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    AND     array_length(string_to_array(property_value,','),1) > 30;

    如果設置Bitmap列超過30列,請通過SET_TABLE_PROPERTY或者UPDATE_TABLE_PROPERTY命令更改bitmap_columns的配置,詳情請參見SET_TABLE_PROPERTY或者ALTER TABLE

  • Clustering Key不建議超過2列

    Clustering Key具備左匹配原則,因此一般不建議超過兩個列,否則適用場景減少。檢查命令如下。

    -- 列出所有clustering_key超過2個列的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS clustering_key
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'clustering_key'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    AND     array_length(string_to_array(property_value,','),1) > 2;

    如果Clustering Key設置超過兩列,請重新建表,選擇一到兩個排序列作為Clustering Key。

  • Segment Key最多僅設置一個實時寫入時間戳相關列

    Segment Key用于文件分塊,建議最多只設置一列,且類型為時間戳或者整型。檢查命令如下。

    -- 列出所有Segment Key大于一列的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS segment_key
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'segment_key'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    AND     array_length(string_to_array(property_value,','),1) > 1;

    如果Segment Key設置超過一列,請重新建表,選擇一個時間戳列作為Segment Key。

  • 數據TTL不建議小于7天

    TTL表示一個表數據的回收時間,由于回收是異步進行,不建議TTL小于七天,否則可能會由于回收不及時,造成重復數據。檢查命令如下。

    -- 列出所有time_to_live_in_seconds小于7天的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS time_to_live_in_seconds
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'time_to_live_in_seconds'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    AND     property_value::bigint < 604800;

    如果表的TTL小于七天,請通過SET_TABLE_PROPERTY命令更改TTL大于七天,詳情請參見SET_TABLE_PROPERTY

  • 按需使用Binlog

    Binlog能力強大,但消耗資源也更多,使用Binlog的表寫入性能會受到較大影響,行存表Binlog的開銷會遠小于列存表,因此對于列存表,謹慎開通Binlog能力。檢查命令如下。

    -- 列出所有配置了Binlog的表
    SELECT  table_namespace AS schema
            ,table_name AS tables
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'binlog.level'
    AND     property_value = 'replica'
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    ;
    
    -- 列出所有Binlog TTL大于7天的表,建議縮短TTL
    SELECT  table_namespace AS schema
            ,table_name AS tables
            ,property_value AS "binlog.ttl"
    FROM    hologres.hg_table_properties
    WHERE   property_key = 'binlog.ttl'
    AND     property_value::bigint > 604800
    AND     table_namespace NOT IN ('hologres','hologres_statistic','pg_catalog')
    ;

    如果Binlog設置不合適,請通過SET_TABLE_PROPERTY命令調整Binlog級別及TTL時間,詳情請參見SET_TABLE_PROPERTY

  • 避免數據傾斜性

    數據分布在不同的Shard中,如果部分Shard的數據明顯多于其他Shard,說明數據具有顯著的傾斜性,此時應該調整Distribution Key的設計,實現更為均衡的數據分布。檢查命令如下。

    SELECT  hg_shard_id
            , COUNT(*)
    FROM    table_name
    GROUP BY hg_shard_id;

    如果數據明顯傾斜,需要通過調整Distribution_key重新導入數據。

運行態檢查

  • 資源使用檢查

    CPU、內存、連接數使用情況,通過云監控分析,詳情請參見Hologres管控臺的監控指標

  • 查詢成功率檢查

    不同類型Query的占比、成功率、延時、并發同比環比分析命令如下。

    -- 過去7天各個數據庫的DML次數(Select\Insert\Update\Delete)
    SELECT datname, query_date, count(*) FROM hologres.query_log
    WHERE query_date > to_char(current_date - interval'7 days','YYYYMMDD')
    AND command_tag IN ('SELECT','INSERT','UPDATE','DELETE')
    GROUP BY datname, query_date
    ORDER BY datname, query_date DESC;
    
    -- 過去1天各類DML的執行成功情況
    SELECT datname, query_date, command_tag,
           count(*) FILTER( WHERE status='SUCCESS') AS SUCCESS,
           count(*) FILTER( WHERE status='FAILED') AS FAILED
    FROM hologres.query_log
    WHERE query_date > to_char(current_date - interval'1 days','YYYYMMDD')
    AND command_tag IN ('SELECT','INSERT','UPDATE','DELETE')
    GROUP BY datname, query_date, command_tag
    ORDER BY datname, query_date DESC;
    
    -- 最近2天成功查詢的響應延時分析
    SELECT datname, query_date, command_tag, count(*), AVG(duration) as duration
    FROM hologres.query_log
    WHERE query_date > to_char(current_date - interval'1 days','YYYYMMDD')
    AND command_tag IN ('SELECT','INSERT','UPDATE','DELETE')
    AND status = 'SUCCESS'
    GROUP BY datname, query_date, command_tag
    ORDER BY datname, query_date DESC;
  • 慢查詢檢查

    過去一天耗時最長的重點慢查詢檢查命令如下。

    -- 查詢過去1天耗時最長的重點慢查詢
    SELECT status AS "狀態",
           duration AS "耗時(ms)",
           optimization_cost AS "優化耗時(ms)",
           start_query_cost AS "啟動耗時(ms)",
           get_next_cost AS "執行耗時(ms)",
           duration-optimization_cost-start_query_cost-get_next_cost AS "其他耗時(ms)",
           query_id AS "QueryID",
           query
     FROM hologres.hg_query_log
     WHERE query_start > current_date - interval '1 days'
      AND command_tag IN ('SELECT')
      AND duration > 1000
     ORDER BY duration DESC,
              start_query_cost DESC,
              optimization_cost,
              get_next_cost DESC,
              duration-optimization_cost-start_query_cost-get_next_cost DESC
     LIMIT 200;

    消耗資源最多查詢的檢查命令如下。

    -- 查詢最近一天消耗比較高的Query
    SELECT status AS "狀態",
           duration AS "耗時(ms)",
           query_start AS "開始時間",
           (read_bytes/1048576)::text || ' MB' AS "讀取量",
           (memory_bytes/1048576)::text || ' MB' AS "內存",
           (shuffle_bytes/1048576)::text || ' MB' AS "Shuffle",
           (cpu_time_ms/1000)::text || ' s' AS "CPU時間",
           physical_reads AS "讀盤",
           query_id AS "QueryID",
           query
     FROM hologres.hg_query_log
     WHERE query_start > current_date - interval'1 days'
     AND command_tag IN ('SELECT','INSERT','UPDATE','DELETE')
     AND duration > 1000
     ORDER BY duration DESC,
              read_bytes DESC,
              shuffle_bytes DESC,
              memory_bytes DESC,
              cpu_time_ms DESC,
              physical_reads DESC
     LIMIT 500;