资源池化的函数

  • ss_buffer_ctrl()

    描述:显示buffer对应的buf_ctrl上记录的信息

    返回值类型:record

    返回的字段如下:

    bufferid:buffer在数组的下标

    is_remote_dirty:是否有远程脏页,即除本节点,其他节点是否持有这个页面的早期脏页版本(edp页面)。0代表没有远程脏页,1代表有脏页版本

    lock_mode:本地对页面持有的分布式锁模式。0代表没有持有锁模式,1代表以S锁的方式持有页面,2代表以X锁的方式持有页面

    is_edp:是否是edp页面(Early Dirty Page),当请求者X锁请求页面,本节点作为owner转移页面,且该页面还是脏页,等页面转移后,本地页面就是edp页面。0代表不是edp页面,1代表是edp页面

    force_request:是否是是强制请求,0代表不是,1代表是

    need_flush:reform的flush_copy阶段,标记需要刷盘的页面。0代表不需要刷盘,1代表需要刷盘

    buf_id:同bufferid,buffer在数组的下标

    state:用于记录状态标签

    pblk_relno:物理块的relation编号

    pblk_blkno:物理块储的block编号

    pblk_lsn:物理块的lsn

    seg_fileno:段页式存储的文件编号

    seg_blockno:段页式存储的block编号

    示例1:查询特定的buffer的buf_ctrl信息

    openGauss=# select * from ss_buffer_ctrl() where bufferid = 20;
    bufferid | is_remote_dirty | lock_mode | is_edp | force_request | need_flush | buf_id | state | pblk_relno | pblk_blkno | pblk_lsn | seg_fileno | seg_blockno
    ----------+-----------------+-----------+--------+---------------+------------+--------+-------+------------+------------+----------+------------+-------------
    20 | 0 | 1 | 0 | 0 | 0 | 19 | 32 | 0 | 4294967295 | 0 | 2 | 4375
    (1 row)
    

    示例2:查询DMS页面分布式锁不为NULL的buffer数量

    openGauss=#  select count(*) from ss_buffer_ctrl() where lock_mode > 0;
    count
    -------
      258
     (1 row)
    
  • ss_txnstatus_cache_stat()

    描述:返回事务信息缓存和事务信息获取的相关统计信息。注意相关count统计项并不是精确值,本统计函数的目的是性能调优分析,而非精确统计。

    返回值类型:record
    vcache_gets:事务信息从变量缓存获取的次数
    hcache_gets:事务信息从哈希缓存获取的次数
    nio_gets:事务信息从网络I/O获取的次数
    avg_hcache_gettime_us:从哈希缓存获取的平均耗时,单位us
    avg_nio_gettime_us:从网络I/O获取的平均耗时,单位us
    cache_hit_rate:缓存命中率
    hcache_eviction:缓存淘汰计数
    avg_eviction_refcnt:每个缓存条目被淘汰前的平均被引用次数

    示例:主备TPCC写/读,备机查询事务信息缓存统计项。

    openGauss=# select * from ss_txnstatus_cache_stat();
    vcache_gets | hcache_gets | nio_gets | avg_hcache_gettime_us | avg_nio_gettime_us | cache_hit_rate | hcache_eviction | avg_eviction_refcnt
    -------------+-------------+----------+-----------------------+--------------------+-----------------+-----------------+---------------------
    263809 | 782159 | 275012 | 1.73883698838727 | 756.186410047562 | .79181213947221 | 0 | 0
    (1 row)
    
  • query_node_reform_info()

    描述:查询集群reform相关统计信息。

    返回值类型:record

    reform_node_id:数据库节点编号,取值范围:[0, 63]

    reform_type:集群发生reform的类型,取值范围:[Normal reform、Failover、Switchover]

    reform_start_time:reform开始的时间

    reform_end_time:reform结束的时间

    is_reform_success:reform是否成功

    redo_start_time:日志回放开始的时间

    redo_end_time:日志回放结束的时间

    xlog_total_bytes:总共回放的日志量

    hashmap_construct_time:hashmap构造的时间

    action:节点的动作,取值范围:[kick off、join in、stable]

    约束:该函数只能在数据库主节点进行查询;查询结果中备节点的信息仅支持查看reform_node_id和action,其他信息无效

    示例1:备节点退出集群

    openGauss=# select * from query_node_reform_info();
     reform_node_id |  reform_type  |    reform_start_time     |     reform_end_time      | is_reform_success | redo_start_time | redo_end_time | xlog_total_bytes | hashmap_construct_time |  action  
    ----------------+---------------+--------------------------+--------------------------+-------------------+-----------------+---------------+------------------+------------------------+----------
                  0 | Normal reform | 2023-09-21 16:37:06.520  | 2023-09-21 16:37:06.568  | t                 | -               | -             |               -1 | -                      | stable
                  1 | -             | -                        | -                        | t                 | -               | -             |               -1 | -                      | kick off
    (2 rows)
    

    示例2:备节点加入集群

    openGauss=# select * from query_node_reform_info();
     reform_node_id |  reform_type  |    reform_start_time     |     reform_end_time      | is_reform_success | redo_start_time | redo_end_time | xlog_total_bytes | hashmap_construct_time | action  
    ----------------+---------------+--------------------------+--------------------------+-------------------+-----------------+---------------+------------------+------------------------+---------
                  0 | Normal reform | 2023-09-21 16:37:46.414  | 2023-09-21 16:37:47.817  | t                 | -               | -             |               -1 | -                      | stable
                  1 | -             | -                        | -                        | t                 | -               | -             |               -1 | -                      | join in
    (2 rows)
    

    示例3:主节点故障,集群failover

    openGauss=# select * from query_node_reform_info();
     reform_node_id | reform_type |    reform_start_time     |     reform_end_time      | is_reform_success |     redo_start_time      |      redo_end_time       | xlog_total_bytes |  hashmap_construct_time  |  action  
    ----------------+-------------+--------------------------+--------------------------+-------------------+--------------------------+--------------------------+------------------+--------------------------+----------
                  0 | -           | -                        | -                        | t                 | -                        | -                        |               -1 | -                        | kick off
                  1 | Failover    | 2023-09-21 16:56:45.893  | 2023-09-21 16:56:50.702  | t                 | 2023-09-21 16:56:50.282  | 2023-09-21 16:56:50.385  |              288 | 2023-09-21 16:56:50.385  | stable
    (2 rows)
    

    示例4:集群主动进行switchover

    openGauss=# select * from query_node_reform_info();
     reform_node_id | reform_type |    reform_start_time     |     reform_end_time      | is_reform_success | redo_start_time | redo_end_time | xlog_total_bytes | hashmap_construct_time | action 
    ----------------+-------------+--------------------------+--------------------------+-------------------+-----------------+---------------+------------------+------------------------+--------
                  0 | Switchover  | 2023-09-21 16:59:25.646  | 2023-09-21 16:59:29.182  | t                 | -               | -             |               -1 | -                      | stable
                  1 | -           | -                        | -                        | t                 | -               | -             |               -1 | -                      | stable
    (2 rows)
    
  • query_page_distribution_info(relname TEXT, forkNum INT4, blockNum INT4)

    描述:根据relname + forkNum + blockNum查询页面在集群中的分布信息。

    入参说明:

    relname:需要查询的表名

    forkNum:需要查询的文件名,取值范围为[0,3]的int值,其中数据文件为0,FSM文件为1,visibility map文件为2,BCM文件为3

    blockNum:需要查询的数据页号,取值范围为[0, total_bolcks)的int值,其中total_blocks由表中相应文件的总页数决定

    返回值类型:record

    instance_id:数据库节点id,取值范围:[0, 63]

    is_master:是否是页面master

    is_owner:是否是页面owner

    is_copy:是否持有副本

    lock_mode:节点持有的锁模式

    mem_lsn:页面在内存中的lsn

    disk_lsn:页面在磁盘上的lsn

    is_dirty:内存中的页面是否是脏页

    约束:该函数只能在数据库主节点进行查询

    示例:向表中插入一行数据,然后立即查询数据页面的分布信息

    openGauss=# create table tb(id int);
    CREATE TABLE
    openGauss=# insert into tb values(0); select * from query_page_distribution_info('tb', 0, 0);
    INSERT 0 1
     instance_id | is_master | is_owner | is_copy |   lock_mode    |  mem_lsn   |  disk_lsn  | is_dirty 
    -------------+-----------+----------+---------+----------------+------------+------------+----------
               0 | t         | t        | f       | Exclusive lock | 1975555208 | 1975555112 | t
    (1 row)
    
  • dss_io_stat(duration INT4)

    描述:统计在给定时间间隔内IO读写速度和次数,通过duration指定时间间隔,单位秒。

    返回值类型:record

    read_kilobyte_per_sec:给定时间内DSS读取数据的速度,单位KB/s

    write_kilobyte_per_sec:给定时间内DSS写入数据的速度,单位KB/s

    io_times:给定时间间隔内DSS IO的调用次数

    约束:duration < 60

    示例:主节点向表中写入数据,查询2秒内DSS IO的统计信息

    openGauss=# select * from dss_io_stat(2);
     read_kilobyte_per_sec | write_kilobyte_per_sec | io_times 
    -----------------------+------------------------+----------
                       404 |                  25664 |     3158
    (1 row)
    
  • query_node_reform_info_from_dms()

    描述:查询集群reform相关信息。

    返回值类型:record

    NAME:TEXT

    DESCRIPTION:TEXT

    其中NAME总共有27种:

    • NAME types:

      (1) INSTANCE_ID:实例ID (2) DMS_ROLE:实例角色 reformer/partener (3) PROC_STATUS:线程状态 runnung/finish (4) REFORM_STATUS:执行进度 waiting/running/finished (5) START_TIME:开始时间戳 (6) REFORM_TYPE:Reform类型 (7) FULL_CLEAN:full clean 标志 true/false (8) PROMOTE_ID:升主实例ID 仅switchover类型 (9) DEMOTE_ID:降备实例ID 仅switchover类型 (10) LAST_STEP:上一个步骤 (11) CURR_STEP:当前步骤 (12) NEXT_STEP:下一个步骤 (13) CURR_STEP_ELASPED:当前步骤耗时 (14) DDL_ENABLE:是否允许DDL (15) FILE_ENABLE:是否允许文件操作 (16) BITMAP_MES:建立mes的实例bitmap (17) BITMAP_CONNECT:允许广播的实例bitmap (18) BITMAP_STABLE:稳定节点bitmap (19) BITMAP_ONLINE:在线节点bitmap (20) BITMAP_RECONNECT:需要重新建联的实例bitmap (21) BITMAP_DISCONNECT:需要断连的实例bitmap (22) BITMAP_CLEAN:需要清理信息的实例bitmap (23) BITMAP_RECOVERY:需要日志回放的bitmap (24) BITMAP_IN:正常启动状态的实例bitmap (25) BITMAP_REBUILD:需要rebuild的bitmap (26) BITMAP_WITHDRAW:需要接管回事务信息的实例bitmap (27) BITMAP_ROLLBACK:需要被reformer接管事务信息的实例bitmap

    示例1:查询0节点的reform信息

    openGauss=# select * from query_node_reform_info_from_dms(0);
        NAME        |       DESCRIPTION
    -------------------+-------------------------
    INSTANCE_ID       | 0
    DMS_ROLE          | REFORMER
    REFORM_STATUS     | FINISHED
    START_TIME        | 2024-01-02 20:29:04.376
    REFORM_TYPE       | OPENGAUSS_NORMAL
    FULL_CLEAN        | FALSE
    LAST_STEP         | PAGE_ACCESS
    CURR_STEP         | DONE_CHECK
    NEXT_STEP         | N/A
    DDL_ENABLE        | TRUE
    FILE_ENABLE       | TRUE
    BITMAP_MES        | 3
    BITMAP_CONNECT    | 1
    BITMAP_STABLE     | 0
    BITMAP_ONLINE     | 1
    BITMAP_RECONNECT  | 1
    BITMAP_DISCONNECT | 0
    BITMAP_CLEAN      | 0
    BITMAP_RECOVERY   | 1
    BITMAP_IN         | 0
    BITMAP_REBUILD    | 0
    BITMAP_WITHDRAW   | 0
    BITMAP_ROLLBACK   | 0
    (23 rows)
    
  • query_all_drc_info()

    描述:查询所有的drc相关信息。

    返回值类型:record

    resource_id:资源标识符,对于页面,格式为fileid-pageid;对于锁,格式为type/uid/oid/index/part

    master_id:master的节点id

    copy_insts:副本持有节点bitmap

    claimed_owner:owner持有节点id

    lock_mode:持有锁模式 0:NULL 1:SHARED 2:EXCLUSIVE

    last_edp:最近的早期脏页持有节点id

    type:资源类型 1:page 2:lock

    in_recovery:是否处于recovery阶段

    copy_promote:reform期间DRC是否从副本升级为owner

    part_id:所属的DRC分区链表id

    edp_map:EDP持有节点bitmap

    lsn:集群中本页面所有EDP中最大的LSN

    len:DRC缓存的data大小

    recovery_skip:reform期间DRC是否跳过回放

    recycling:DRC资源是否正在被回收

    CONVERTING_INST_ID:converting节点ID

    CONVERTING_CURR_MODE:converting节点当前持有的锁模式: 0:NULL 1:SHARED 2:EXCLUSIVE

    CONVERTING_REQ_MODE:converting节点申请的锁模式: 0:NULL 1:SHARED 2:EXCLUSIVE

    约束:当有且仅有主节点启动后,该函数查询drc锁信息为空

    示例1:查询特定页面的drc锁信息

    openGauss=# select * from query_all_drc_info(0) where RESOURCE_ID = 8/0/15199/1262/0;
       RESOURCE_ID    | MASTER_ID | COPY_INSTS | CLAIMED_OWNER | LOCK_MODE | LAST_EDP | TYPE | IN_RECOVERY | COPY_PROMOTE | PART_ID | EDP_MAP | LSN | LEN | RECOVERY_SKIP | RECYCLING | CONVERTING_INST_ID | CONVERTING_CURR_MODE | CONVERTING_REQ_MODE
    -------------------+-----------+------------+---------------+-----------+----------+------+-------------+--------------+---------+---------+-----+-----+---------------+-----------+--------------------+----------------------+---------------------
    8/0/15199/1262/0  |         0 |          0 |             0 |         2 |      255 |    2 |           0 |            0 |     123 |       0 |   0 |  20 |             0 |         0 |                255 |                    0 |                   0
    (1 row)
    
  • ondemand_recovery_status()

    描述:查询当前资源池化节点按需回放状态。

    返回值类型:record

    primary_checkpoint_redo_lsn:当前节点读取到的主机redo点位置。未开启实时构建特性时,本字段值为'0/0'。

    realtime_build_replayed_lsn:当前节点完成构建的主机日志位置。未开启实时构建特性时,本字段值为'0/0'。

    hashmap_used_blocks:当前hashmap中已存入的block-record数量。

    hashmap_total_blocks:hashmap中能够存入的block-record总数。

    trxn_queue_blocks:当前已存入的事务日志数量,未开启实时构建特性时,本字段为0。

    seg_queue_blocks:当前已存入的段页式元数据日志数量,未开启实时构建特性时,本字段为0。

    in_ondemand_recovery:当前节点是否处于按需回放中,取值范围:[t、f]。当节点正常运行时,无论是否开启实时构建特性,本字段值为'f'。

    ondemand_recovery_status:集群按需回放状态,取值范围及对应含义如下:

    ondemand_recovery_status集群按需回放状态
    ONDEMAND_RECOVERY_BUILD集群处于按需回放中,在构建回放所必须的信息,暂不对外提供服务
    ONDEMAND_RECOVERY_REDO集群处于按需回放中,集群对外提供服务,且后台进行日志回放
    NORMAL集群处于正常运行中,未进行按需回放

    realtime_build_status:当前节点实时构建状态,取值范围及对应含义如下:

    realtime_build_status当前节点实时构建状态
    DISABLED当前节点未处于实时构建状态
    BUILD_NORMAL当前节点处于实时构建状态,且集群状态正常
    READY_TO_BUILD当前节点正在启动实时构建
    BUILD_TO_DISABLED当前节点处于实时构建状态,且即将关闭实时构建,一般发生于switchover、normal reform和failover但是未升主的节点中
    BUILD_TO_REDO当前节点处于实时构建状态,且即将升主,一般发生于failover的升主节点中

    recovery_pause_status:当前节点实时构建暂停状态,取值范围及对应含义如下:

    recovery_pause_status当前节点实时构建暂停状态
    NOT PAUSE当前节点实时构建未暂停
    PAUSE(for sync record)当前节点实时构建暂停,暂停原因为构建到了DDL日志
    PAUSE(for hashmap full)当前节点实时构建暂停,暂停原因为HashMap空间满
    PAUSE(for trxn queue full)当前节点实时构建暂停,暂停原因为事务日志队列满
    PAUSE(for seg queue full)当前节点实时构建暂停,暂停原因为段页式元数据日志队列满

    须知:

    • 当recovery_pause_status显示当前节点处于实时构建暂停状态时,会严重影响回放性能,无法保证RTO要求,应当考虑增大ss_ondemand_recovery_mem_size,同时提高主机刷盘及checkpoint频率。
    • 仅在开启了按需回放特性情况下,才允许查询该视图。
意见反馈
编组 3备份
    openGauss 2024-04-27 00:42:13
    取消