VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

资源池化函数

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信息。

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数量。

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写/读,备机查询事务信息缓存统计项。

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:备节点退出集群。

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:备节点加入集群

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

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

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:内存中的页面是否是脏页

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

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

create table tb(id int);
insert into tb values(0); select * from query_page_distribution_info('tb', 0, 0);

查询效果如下:

 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的统计信息

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种:

(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

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

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锁信息为空。

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

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)