资源池化函数
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)