磐维数据库PanWeiDB2.0日常维护

磐维数据库简介

“中国移动磐维数据库”(ChinaMobileDB),简称“磐维数据库”(PanWeiDB)。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。

其产品内核能力基于华为 OpenGauss 开源软件,并进一步提升了系统稳定性。

磐维数据库 V1.0 基于 openGauss 3.0 研发,在2022年12月29日,openGauss Summit 2022大议上正式发布。

磐维数据库 V2.0 基于 openGauss 5.0 研发,在2023年12月28日,openGauss Summit 2023大会上重磅发布。

磐维数据库 V3.0 基于 openGauss 6.0 研发,在2023年12月27 日,openGauss Summit 2024大会上重磅发布。

磐维数据库2.0,具有高性能、高可靠、高安全、高兼容等特点,能够为集中式、分布式、云原生、一体机等多种应用场景提供强大支撑。

1.磐维数据库查询结果按列展示

磐维数据库中如何实现查询结果按列展示?类似与MySQL数据库的\G效果,可以使用\x命令,以扩展方式显示查询结果

postgres=# \x
Expanded display is on.
postgres=# \x
Expanded display is off.
postgres=# \lList of databasesName    | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------panweidb  | omm   | UTF8     | C       | C     |postgres  | omm   | UTF8     | C       | C     |template0 | omm   | UTF8     | C       | C     | =c/omm           +|       |          |         |       | omm=CTc/ommtemplate1 | omm   | UTF8     | C       | C     | =c/omm           +|       |          |         |       | omm=CTc/omm
(4 rows)

2.gsql常用命令介绍

本文介绍磐维数据库里后台psql工具在一些常用场景下的快捷使用命令。

2.1 使用-r便捷编辑模式

[omm@db01 ~]$ export LANG=en_US
[omm@db01 ~]$ gsql -d postgres -r
gsql ((PanWeiDB_V2.0-S3.0.0_B01) compiled at 2024-07-29 14:51:08 commit ba25a44 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.postgres=#

2.2 快速编辑SQL并执行

元命令\e自动打开上次的查询进行编辑,编辑完成之后立刻执行

[omm@pw01 data]$ gsql -d postgres -r
gsql ((PanWeiDB 2.0.0 (Build0)) compiled at 2024-01-05 17:19:18 commit 9fbca90 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.postgres=# select * from pg_users limit 1;
ERROR:  relation "pg_users" does not exist on dn_6001_6002_6003
LINE 1: select * from pg_users limit 1;^
postgres=# \e
select * from pg_users limit 1;
~

上面使用\e直接在上一个SQL语句里进行编辑修改,然后wq保存退出编辑模式之后,自动执行新SQL语句。

2.3 定制客户端提示符

客户端提示符变量,我们可以定制PROMPT1(等待新命令时的提示符),.gsqlrc文件可以进行下面的设置:

\set PROMPT1 '%`date +%H:%M:%S` (%n@%M:%>)%/%R%#%x'postgres=# \set PROMPT1 '%`date +%H:%M:%S` (%n@%M:%>)%/%R%#%x'
13:33:45 (omm@local:/data/panweidb/tmp:17700)postgres=#

2.4 使用边框美化查询结果

在.gsqlrc文件增加下面的设置,可以对查询结果设置边框,美化输出。

\pset border 2
\pset linestyle unicode

2.5 查询结果自动适配屏幕宽度

在psql里面使用如下pset命令

pset format wrapped \pset columns 0

或者psql选项里加这两个设置

$ psql -r --pset=format=wrapped --pset=columns=0

2.6 输出不同的查询格式

文本紧凑模式

[omm@db01 ~]$ psql -qtA  -c "select * from pg_user limit 2;"
pwaudit|34|f|f|f|f|********|||default_pool|0||||||f|f|f
pwsso|35|f|f|f|f|********|||default_pool|0||||||f|f|f
[omm@db01 ~]$

文本紧凑模式,使用多字符分隔符@@

[omm@db01 ~]$ psql -qtA -F '@@'  -c  "select * from pg_user limit 2;"
pwaudit@@34@@f@@f@@f@@f@@********@@@@@@default_pool@@0@@@@@@@@@@@@f@@f@@f
pwsso@@35@@f@@f@@f@@f@@********@@@@@@default_pool@@0@@@@@@@@@@@@f@@f@@f
[omm@db01 ~]$

HTML格式

[omm@db01 ~]$ psql -qtH  -c "select * from pg_user limit 2;"
<table border="1"><tr valign="top"><td align="left">pwaudit</td><td align="right">34</td><td align="left">f</td><td align="left">f</td><td align="left">f</td><td align="left">f</td><td align="left">********</td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">default_pool</td><td align="right">0</td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">f</td><td align="left">f</td><td align="left">f</td></tr><tr valign="top"><td align="left">pwsso</td><td align="right">35</td><td align="left">f</td><td align="left">f</td><td align="left">f</td><td align="left">f</td><td align="left">********</td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">default_pool</td><td align="right">0</td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">&nbsp; </td><td align="left">f</td><td align="left">f</td><td align="left">f</td></tr>
</table>[omm@db01 ~]$

2.7查看元命令的query语句

使用-E或者–echo-hidden查看db的执行语句

$ psql -E -c "\l"[omm@db01 ~]$ psql -E -c "\l"
********* QUERY **********
SELECT d.datname as "Name",pg_catalog.pg_get_userbyid(d.datdba) as "Owner",pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",d.datcollate as "Collate",d.datctype as "Ctype",pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************List of databasesName    | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------panweidb  | omm   | UTF8     | C       | C     |postgres  | omm   | UTF8     | C       | C     |template0 | omm   | UTF8     | C       | C     | =c/omm           +|       |          |         |       | omm=CTc/ommtemplate1 | omm   | UTF8     | C       | C     | =c/omm           +|       |          |         |       | omm=CTc/omm
(4 rows)[omm@db01 ~]$

查看自定义函数函数列表

$ psql -E -c "\df"

$ psql -E -c "\df"[omm@db01 ~]$ psql -E -c "\df"
********* QUERY **********
SELECT n.nspname as "Schema",p.proname as "Name",pg_catalog.pg_get_function_result(p.oid) as "Result data type",pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",CASEWHEN p.proisagg THEN 'agg'WHEN p.proiswindow THEN 'window'WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'ELSE 'normal'
END as "Type" ,fencedmode as "fencedmode",propackage as "propackage",prokind as "prokind"FROM pg_catalog.pg_proc pLEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)AND n.nspname <> 'pg_catalog'AND n.nspname <> 'db4ai'AND n.nspname <> 'information_schema'
ORDER BY 1, 2, 4;
**************************List of functionsSchema | Name | Result data type | Argument data types | Type | fencedmode | propackage | prokind
--------+------+------------------+---------------------+------+------------+------------+---------
(0 rows)[omm@db01 ~]$

2.8 同时显示query语句及结果

使用-e,–echo-queries回显语句

$ psql -e -c "select 'x' from dual;select now();"

2.9 单步调试

使用-s,–single-step单步调试 (enter 键)

$ psql -s -c "select 'x' from dual;select now();"

3.常用gsql的元命令

3.1 查看客户端工具版权信息:\copyright

postgres=# \copyright
PanWeiDB Kernel Database Management System
Copyright (c) China Mobile Information Technology Co., Ltd. 2022. All rights reserved.

3.2 查看当前登录信息:\conninfo

postgres=# \conninfo
You are connected to database "postgres" as user "omm" via socket in "/data/panweidb/tmp" at port "17700".
postgres=#

3.3 查看有哪些数据库:\l

postgres=# \lList of databasesName    | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------panweidb  | omm   | UTF8     | C       | C     |postgres  | omm   | UTF8     | C       | C     |template0 | omm   | UTF8     | C       | C     | =c/omm           +|       |          |         |       | omm=CTc/ommtemplate1 | omm   | UTF8     | C       | C     | =c/omm           +|       |          |         |       | omm=CTc/omm
(4 rows)postgres=#

3.4 查看有哪些数据表:\dt

db01=# \dtList of relationsSchema | Name | Type  | Owner |                    Storage
--------+------+-------+-------+------------------------------------------------public | t01  | table | omm   | {orientation=row,compression=no,fillfactor=80}
(1 row)db01=#

3.5 \d查看表定义

db01=# \dList of relationsSchema |     Name      | Type  | Owner |                    Storage
--------+---------------+-------+-------+------------------------------------------------public | pw_login_info | view  | omm   |public | t01           | table | omm   | {orientation=row,compression=no,fillfactor=80}
(2 rows)db01=#
db01=# \d t01Table "public.t01"Column |  Type   | Modifiers
--------+---------+-----------id     | integer |name   | text    |

3.6 查看表/索引占用空间大小

 
给测试表test插入50万数据:postgres=# create table test(id int primary key, name varchar(100));
注意:  CREATE TABLE / PRIMARY KEY 将要为表 "test" 创建隐含索引 "test_pkey"
CREATE TABLEpostgres=# insert into test(id,name) select n,n||'_francs' from generate_series(1,500000) n;
INSERT 0 500000
postgres=# \di+ test_pkeyList of relationsSchema |   Name    | Type  | Owner | Table | Size  | Storage | Description
--------+-----------+-------+-------+-------+-------+---------+-------------public | test_pkey | index | omm   | test  | 11 MB |         |
(1 row)postgres=# \dt+ testList of relationsSchema | Name | Type  | Owner | Size  |                    Storage                     | Description
--------+------+-------+-------+-------+------------------------------------------------+-------------public | test | table | omm   | 31 MB | {orientation=row,compression=no,fillfactor=80} |
(1 row)postgres=#---ERROR:  character with byte sequence 0xe5 0xb0 0x86 in encoding "UTF8" has no equivalent in encoding "LATIN1"
postgres=# show client_encoding;client_encoding
-----------------LATIN1
(1 row)
postgres-# \encoding UTF8

3.7 切换数据库:\c 数据库名

postgres=# \c db01
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db01" as user "omm".
db01=#

3.8 切换目录

cd 如果不带参数,则切换到当前用户的主目录。\! pwd用来显示当前工作路径(叹号后有空格)
postgres=# \! pwd
/home/postgres
postgres=# \!pwd
Invalid command \!pwd. Try \? for help.
postgres=# \cd /pgtbs
postgres=# \! pwd
/pgtbs
postgres=# 

3.9 显示执行时间(\timing on | off)

postgres=# \timing on
Timing is on.
postgres=# select id,name from test limit 10;id |   name
----+-----------1 | 1_francs2 | 2_francs3 | 3_francs4 | 4_francs5 | 5_francs6 | 6_francs7 | 7_francs8 | 8_francs9 | 9_francs10 | 10_francs
(10 rows)Time: 1.107 ms
postgres=# \timing off
Timing is off.
postgres=# select id,name from test limit 10;id |   name
----+-----------1 | 1_francs2 | 2_francs3 | 3_francs4 | 4_francs5 | 5_francs6 | 6_francs7 | 7_francs8 | 8_francs9 | 9_francs10 | 10_francs
(10 rows)postgres=#

3.10 退出命令行客户端:\q

[omm@db01 ~]$ gsql -d db01 -r
gsql ((PanWeiDB_V2.0-S3.0.0_B01) compiled at 2024-07-29 14:51:08 commit ba25a44 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.db01=# \q
[omm@db01 ~]$

3.11 其他

\db 列出表空间信息
\du 列出用户、角色
\dt 列出数据库表
\di 列出索引
\dx 列出插件
\df 列出函数
\dv 列出view
\i FILE 执行文件中的命令 
\h [NAME]  sql命令的help信息使用psql执行sql命令,-c :指定psql执行一个给定的命令字符串command
psql -c '\x' -c 'SELECT * FROM pg_user;'使用psql执行sql文件,-f :从文件filename而不是标准输入中读取命令
[postgres@pgserver12 ~]$ cat test.sql
select now();
select current_date;
select 1;
[postgres@pgserver12 ~]$ psql -f test.sql把所有查询输出放到文件filename中。这等效于命令\o。 
[postgres@pgserver12 ~]$ psql -o /tmp/2.log

4.死锁

4.1 如何统计死锁的条数:

postgres=# select datname,deadlocks from pg_stat_database;datname  | deadlocks 
-----------+-----------template1 |         0template0 |         0panweidb  |         0postgres  |         0
(4 rows)postgres=# 

4.2 如何找到导致死锁的sql

方法1、通过报错找到对应的sql:

select * from pg_stat_activity where datname = 'db01';select datname,pid,query,connection_info from  pg_stat_activity where pid='47183102150400' or pid='47183356102400';

以上的两个pid,是从死锁的报错中获取的。

方法2、直接去pg_log日志里,检索deadlock detected,下边有执行死锁的sql。

5.杀死会话

对于磐维CMDB数据库的会话查杀,建议优先使用pg_terminate_backend函数,如果查杀失败,需要使用更强力的命令时,可以使用kill -9或者kill命令查杀客户端进程。

在执行查杀的会话窗口中,查询pg_stat_activity获取连接会话的PID

select datid,pid,state,query from pg_stat_activity;postgres=#  select datid,pid,state,query from pg_stat_activity;datid |      pid       | state  |                                query
-------+----------------+--------+---------------------------------------------------------------------19748 | 22442924242688 | idle   |19748 | 22442953664256 | idle   |19748 | 22442719835904 | idle   | show default_transaction_read_only;19748 | 22442560190208 | idle   | select * from pg_catalog.disable_conn('polling_connection', '', 0);19748 | 22442336769792 | idle   |19748 | 22442291623680 | active |19748 | 22442353551104 | idle   |19748 | 22442319988480 | active |19748 | 22442640013056 | active |19748 | 22441868457728 | active | select datid,pid,state,query from pg_stat_activity;
(10 rows)postgres=#

使用pg_terminate_backend杀会话

select * from pg_terminate_backend(47440526968576);postgres=# select * from pg_terminate_backend(47440526968576);
WARNING:  PID 47440526968576 is not a gaussdb server threadpg_terminate_backend 
----------------------f
(1 row)postgres=# 

查杀会话举例:

--先查会话的pid
postgres=# select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';datid |      pid       | state  |                                        query                                        
-------+----------------+--------+-------------------------------------------------------------------------------------20538 | 47922937857792 | active | select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';20538 | 47922981963520 | idle   | select * from pw_version();
(2 rows)
--基于上一步查到的pid杀会话
postgres=# select * from pg_terminate_backend(47922981963520);pg_terminate_backend 
----------------------t
(1 row)
--再次查询,会话已消失
postgres=# select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';datid |      pid       | state  |                                        query                                        
-------+----------------+--------+-------------------------------------------------------------------------------------20538 | 47922937857792 | active | select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';
(1 row)

6.sql执行计划

SQL执行计划概述:

SQL执行计划是一个节点树,显示磐维数据库执行一条SQL语句时执行的详细步骤。每一个步骤为一个数据库运算符。

如何获取执行计划:

使用EXPLAIN命令可以查看优化器为每个查询生成的具体执行计划。EXPLAIN给每个执行节点都输出一行,显示基本的节点类型和优化器为执行这个节点预计的开销值。具体用法如下:

  • EXPLAIN statement:只生成执行计划,不实际执行。其中statement代表SQL语句。
  • EXPLAIN ANALYZE statement:生成执行计划,进行执行,并显示执行的概要信息。显示中加入了实际的运行时间统计,包括在每个规划节点内部花掉的总时间(以毫秒计)和它实际返回的行数。
  • EXPLAIN PERFORMANCE statement:生成执行计划,进行执行,并显示执行期间的全部信息。
postgres=# explain select name from test where id>499999;QUERY PLAN
-----------------------------------------------------------------------[Bypass]Index Scan using test_pkey on test  (cost=0.00..8.27 rows=1 width=13)Index Cond: (id > 499999)
(3 rows)postgres=#escspdb=# postgres=# EXPLAIN ANALYZE select name from test where id>499999;QUERY PLAN
-----------------------------------------------------------------------------------------------------------------[Bypass]Index Scan using test_pkey on test  (cost=0.00..8.27 rows=1 width=13) (actual time=0.101..0.104 rows=1 loops=1)Index Cond: (id > 499999)Total runtime: 0.186 ms
(4 rows)postgres=#postgres=# EXPLAIN PERFORMANCE   select name from test where id>499999;QUERY PLAN
------------------------------------------------------------------------------------------------------------------------[Bypass]Index Scan using test_pkey on public.test  (cost=0.00..8.27 rows=1 width=13) (actual time=0.013..0.015 rows=1 loops=1)Output: nameIndex Cond: (test.id > 499999)(Buffers: shared hit=4)(CPU: ex c/r=643335262137099, ex row=1, ex cyc=643335262137099, inc cyc=643335262137099)Total runtime: 0.084 ms
(7 rows)postgres=#

7.数据库日志收集


gs_collector --begin-time="BEGINTIME" --end-time="ENDTIME" [-h HOSTNAME |
-f HOSTFILE] [--keyword=KEYWORD] [--speed-limit=SPEED] [-o OUTPUT] [-l LO
GFILE] [-C CONFIGFILE]示例:gs_collector --begin-time="20240707 14:00" --end-time="20240707 19:00"
说明:不加-h参数时,收集的是集群中所有节点的信息[omm@db01 ~]$ gs_collector --begin-time="20240126 14:00" --end-time="20250126 15:00"
Successfully parsed the configuration file.
create Dir.
Successfully create dir.
do system check interval 0 : count 1
Collecting OS information.
Successfully collected OS information.
do database check interval 0 : count 1
Collecting catalog statistics.
Successfully collected catalog statistics.
do log check interval 0 : count 1
Collecting Log files.
Successfully collected Log files.
do Config check 0:1
Collecting Config files.
Successfully collected Config files.
Collecting files.
Successfully collected files.
All results are stored in /data/panweidb/log/omm/collector_20250126_144945.tar.gz.
[omm@db01 ~]$

8.创建用户和数据库

需求描述
库名:pwejb
用户名:pwejb
端口:17700
密码:1qlIk8L2aaWW
客户端白名单:192.168.50.46a.创建用户USER
CREATE USER pwejb IDENTIFIED BY '1qlIk8L2aaWW';
grant all privileges to pwejb;b. 使用如下命令创建一个新的表空间pwejb_tbs,并将表空间pwejb_tbs授权给用户pwejb
CREATE TABLESPACE pwejb_tbs OWNER pwejb RELATIVE LOCATION 'tablespace/pwejb_tbs1';c. 使用如下命令创建一个新的数据库pwejb,放在使用pwejb_tbs表空间中,使用UTF8编码,兼容性为B
CREATE DATABASE pwejb WITH TABLESPACE = pwejb_tbs ENCODING='UTF8';d.使用以下命令为数据库设置默认的模式搜索路径。
ALTER DATABASE pwejb SET search_path TO pa_catalog,public;
grant all privileges on database pwejb to pwejb;e.使用如下命令修改数据库表空间
ALTER DATABASE pwejb SET TABLESPACE pwejb_tbs;f.在数据库本地测试数据库连接
gsql -d pwejb -U pwejb -W '1qlIk8L2aaWW' -rg.添加客户端白名单,允许192.168.50.46远程访问磐维数据库
gs_guc reload -N all -I all -h 'host all all 192.168.50.46/24 sha256'h.通过客户端连接数据库
gsql -h 192.168.50.46 -p 17700 -d pwejb -U pwejb -r

9.修改数据库密码有效期

数据库用户的密码都有密码有效期(password_effect_time),当达到密码到期提醒天数
(password_notify_time)时,系统会在用户登录数据库时提示用户修改密码。

postgres=# show password_effect_time;password_effect_time 
----------------------90
(1 row)postgres=# show password_notify_time;password_notify_time 
----------------------7
(1 row)-- 修改用户密码有效期时间为36500(集群内所有节点执行)
alter system set password_effect_time to 36500;-- 用户密码有效期查询校验(集群内所有节点查询确认)
select b.usename,a.passwordtime,a.passwordtime+numtodsinterval(to_number((select setting from pg_settings where name='password_effect_time')),'DAY') as passwordexpiredtime  from 
(select roloid,max(passwordtime) as passwordtime from pg_catalog.pg_auth_history group by roloid) a 
right join 
(select usename,usesysid from pg_user) b 
on a.roloid=b.usesysid;usename |         passwordtime          |      passwordexpiredtime
---------+-------------------------------+-------------------------------omm     | 2025-01-24 20:53:54.357635+08 | 2124-09-22 20:53:54.357635+08pwadmin | 2025-01-24 20:53:54.381033+08 | 2124-09-22 20:53:54.381033+08pwsso   | 2025-01-24 20:53:54.404989+08 | 2124-09-22 20:53:54.404989+08pwaudit | 2025-01-24 20:53:54.427946+08 | 2124-09-22 20:53:54.427946+08pwejb   | 2025-01-26 14:51:14.469448+08 | 2124-09-24 14:51:14.469448+08
(5 rows)postgres=# 
-- 用户密码有效期查询校验(集群内所有节点查询确认)  
show password_effect_time;

10.数据库添加白名单

gs_guc reload -N all -I all -h 'host all all 192.168.50.46/24 sha256'--以上命令执行完成之后,会在3台主机的pg_hba.conf增加如下内容。[omm@pw01 data]$ cat /database/panweidb/data/pg_hba.conf|grep 230
host all all 192.168.122.230/24 sha256
[omm@pw01 data]$ 

11.查看数据库大小(降序)

select datname,pg_size_pretty(pg_database_size(datname)) as dbsize from pg_database order by 2 desc;postgres=# select datname,pg_size_pretty(pg_database_size(datname)) as dbsize from pg_database order by 2 desc;datname  | dbsize
-----------+--------postgres  | 76 MBtemplate1 | 25 MBdb01      | 25 MBtemplate0 | 25 MBpwejb     | 25 MBpanweidb  | 25 MB
(6 rows)postgres=#

13.查看表大小(降序)

select tableowner,schemaname,tablename,pg_size_pretty(pg_table_size(schemaname||'.'||tablename)) as table_size from pg_tables order by pg_table_size(schemaname||'.'||tablename) desc;escspdb=# select tableowner,schemaname,tablename,pg_size_pretty(pg_table_size(schemaname||'.'||tablename)) as table_size from pg_tables order by pg_table_size(schemaname||'.'||tablename) desc;tableowner |     schemaname     |           tablename           | table_size 
------------+--------------------+-------------------------------+------------escsp      | escsp              | operation_info                | 448 MBomm        | pg_catalog         | pg_attribute                  | 5552 kBomm        | pg_catalog         | pg_rewrite                    | 3360 kBescsp      | escsp              | cert                          | 2976 kBomm        | pg_catalog         | pg_proc                       | 2520 kB
...

14.磐维数据库集群管理组件介绍

磐维数据库作为面向OLTP业务的关系型数据库,在主备集群模式下,如何实现对节点的监控,感知故障,实现自动主备切换,保证集群的高可用,是至关重要的,相信大家也非常感兴趣,下面我们就一起来揭秘磐维数据集群管理组件Cluster Manager。

14.1 集群介绍

Cluster Manager(CM)是磐维数据库集群管理组件,是磐维数据库集群高可用的保障。CM的主要功能有:

  • 数据库主备节点状态监控,故障自动主备切换
  • 网络通信故障、文件系统故障等故障监控
  • 支持集群、节点查询、配置、操作等

此外,还支持自定义资源纳管,如分布式中间件ShardingSphere等。

14.1.1 高可用组网

CM组件包含CM Agent(CMA),CM Server(CMS),OM Monitor(CMM)三个核心模块。为保证磐维数据库节点(DN)的高可用,需要满足以下组网条件:

  • 每个节点都需要部署CMM、CMA:CMM监控本节点CMA实例;CMA监控本节点的DN、CMS实例,采集信息上报CMS主
  • CMS、DN不需要每个节点都部署
  • CMS、DN实例组成各自的集群
  • CMS集群实个数>=3,基于Quorum协议实现自仲裁,以及DN仲裁,需要保证一半以上实例存活

磐维数据库推荐的高可用部署方案为一主两备,组网如下图所示。除此之外,CM还支持双中心组网方案,并支持优先同中心选主。

14.1.2进程保活机制

CM组件包含cm_server,cm_agent,以及om_monitor三个进程,分别为CMS、CMA,以及CMM模块。磐维数据库(DN)进程为gaussdb。如下图所示:

DN、CMS保活:由CMA来负责

CMA每秒检查一次DN、CMS健康状态。若进程不存在,拉起进程;通过检查DN、CMS进程状态,以及时间阈值内多次查询检测进程是否僵死,并负责杀死僵死进程,重新拉起。

CMA保活:由CMM来负责

CMM每秒检查一次CMA健康状态。若进程不存在,拉起进程;若进程僵死,则杀死僵死进程,重新拉起。

CMM保活:由系统定时任务来兜底

系统定时任务每分钟第0秒执行一次。若进程不存在,下一轮定时任务执行时拉起进程;若进程僵死,则下一轮定时任务执行时杀死僵死进程,再下一轮重新拉起。

14.2 主要模块及功能

CM组件整体架构,以及模块核心功能如下图所示:

14.2.1 CM Agent

CM Agent在多线程模式下,实现对本地DN、CMS的看护,以及CMS与DN的交互。主要功能如下:

检查保持与CMS主的连接

CMA的ConnCmsPMain线程负责循环检查与CMS主的连接状态,检查的间隔AGENT_RECV_CYCLE为200ms。若连接不存在,则重新建立连接。

检查与所有peer DN的连接

CMA的DNConnectionStatusCheckMain线程负责循环ping所有peer DN节点,检查的间隔由agent_report_interval参数控制,默认为1s。

若与所有peer DN节点断连,且本节点为DN主,则上报CMS,并杀死本节点DN,CMS将启动DN仲裁。

检查上报DN的状态

CMA的DNStatusCheckMain线程负责循环检查DN状态,检查的间隔由agent_report_interval参数控制,默认为1s。若进程不存在,则上报CMS,并拉起进程,CMS仲裁模块将启动DN仲裁。

检查上报CMS的状态

CMA同样循环检测本节点CMS状态,每次检查的间隔为1s。若进程不存在,则上报CMS,并拉起进程,CMS HA模块将启动主备自仲裁。若进程出现T状态,则判定为进程僵死,则将僵死情况上报CMS,并杀死进程,重新拉起,CMS HA模块也将启动主备自仲裁。

检测磁盘使用率、磁盘故障

CMA通过在数据、日志路径下创建临时文件,进行读写测试(fopen,fwrite,fread),来检测DN、CMS磁盘故障,若出现失败,则将disc damage状态上报CMS。

检测CPU、MEM、磁盘IO使用率

CMA还负责检测节点cpu、mem,以及所有磁盘io使用是否达阈值。

检测进程僵死

CMA的DNPhonyDeadStatusCheckMain线程负责循环检测DN、CMS进程是否僵死,检测的间隔由agent_phony_dead_check_interval参数控制,默认为10s,其中包含检测时间。

若DN进程出现T、D、Z状态,则判定为进程僵死,将T、Z状态上报CMS,若为T状态,则将检测间隔更新为36s。若非以上状态,则连接数据库,执行查询语句,若执行失败,则判定为进程僵死。当上报次数达到阈值,CMS仲裁模块将启动僵死处理。

向CMS主上报消息

CMA的SendCmsMsgMain线程负责循环将DN、CMS状态上报CMS主,每次上报的间隔为200ms。

处理CMS主下发的命令

CMA同时负责接收并处理CMS下发的命令,根据命令类型,执行对DN的操作。

14.2.2 CM Server

CM Server通过CMA是实现与DN的交互。CMS集群基于Quorum协议,实现对DN集群的仲裁选主,以及自仲裁。核心功能如下:

处理DN节点仲裁

服务线程接收CMA定时上报的DN节点状态,感知DN异常。若为主故障,则启动仲裁,确定候选DN后,启动升主流程。若进程被判定为僵死,则进行僵死处理,若僵死进程为主节点,处理完成后,进入仲裁选主。

处理CMS节点自仲裁

服务线程接收CMA定时上报的CMS节点状态,感知CMS故障,若为主故障,则根据Quorum协议实现CMS集群选主。

处理存储达阈值、磁盘故障

服务线程接收CMA定时上报的DN数据、日志路径磁盘使用情况,循环处理,间隔由datastorage_threshold_check_interval参数控制,默认为10s,每分钟输出检测日志。

当磁盘用量超过只读阈值的80%(只读阈值由datastorage_threshold_value_check控制,默认为85%)时,发送预告警,否则清除预告警。当超过只读阈值时,则向所有DN实例发送只读命令(通过CMA),发送只读告警,否则清除所有DN实例只读命令状态(通过CMA),清除只读告警。

需要注意的是,只读状态为集群级设置,因此集群中任何一个节点磁盘使用达到阈值,集群都会被设置为只读模式,导致写请求返回失败。

15.集群维护

15.1启停数据库集群

--启停整个集群

gs_om -t start

gs_om -t stop

gs_om -t restart

或者

cm_ctl start

cm_ctl stop

--启停整个集群
gs_om -t start
gs_om -t stop
gs_om -t restart  
或者
cm_ctl start
cm_ctl stop --------------
[root@db01 bin]# su - omm
上一次登录: 日 1月 26 11:00:17 CST 2025 pts/0 上
[omm@db01 ~]$ cm_ctl stop
cm_ctl: stop cluster.
cm_ctl: stop nodeid: 1
cm_ctl: stop nodeid: 2
cm_ctl: stop nodeid: 3
............
cm_ctl: stop cluster successfully.
[omm@db01 ~]$ cm_ctl start
cm_ctl: checking cluster status.
cm_ctl: checking cluster status.
cm_ctl: checking finished in 875 ms.
cm_ctl: start cluster.
cm_ctl: start nodeid: 1
cm_ctl: start nodeid: 2
cm_ctl: start nodeid: 3
..............
cm_ctl: start cluster successfully.
[omm@db01 ~]$ gs_om -t restart
Stopping cluster.
=========================================
Successfully stopped cluster.
=========================================
End stop cluster.
Starting cluster.
======================================================================
Successfully started primary instance. Wait for standby instance.
======================================================================
.
Successfully started cluster.
======================================================================
cluster_state      : Normal
redistributing     : No
node_count         : 3
Datanode Stateprimary           : 1standby           : 2secondary         : 0cascade_standby   : 0building          : 0abnormal          : 0down              : 0Successfully started cluster.
[omm@db01 ~]$

15.2 查看数据库集群的状态

gs_om -t status --detail

或者

cm_ctl query -Cvid

gs_om -t status --detail
或者
cm_ctl query -Cvid------------------
[omm@db01 ~]$ gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Primary Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Standby Normal
3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal[omm@db01 ~]$ cm_ctl query -Cvid
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state            | node    node_ip         instance                 state            | node    node_ip         instance                 state
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Primary Normal | 2  db02 192.168.50.47   6002 /data/panweidb/data S Standby Normal | 3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal
[omm@db01 ~]$

15.3 启停单节点进程(包括cm和数据库进程)

cm_ctl start -n <nodeid>

cm_ctl stop -n <nodeid>

cm_ctl start -n <nodeid> 
cm_ctl stop -n <nodeid> ---
[omm@db01 ~]$ cm_ctl stop -n 2
cm_ctl: stop the node: 2.
cm_ctl: stop node, nodeid: 2
.........
cm_ctl: stop node successfully.
[omm@db01 ~]$  gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Down
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Degraded
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Primary Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Down    Unknown
3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal
[omm@db01 ~]$ cm_ctl start -n 2
cm_ctl: start the node:2.
..
cm_ctl: start node successfully.
[omm@db01 ~]$  gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Primary Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Standby Normal
3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal
[omm@db01 ~]$

15.4 启停单节点数据库

gs_ctl start [-D <DATADIR>]

gs_ctl stop [-D <DATADIR>]

gs_ctl restart [-D <DATADIR>]

gs_ctl start [-D <DATADIR>]
gs_ctl stop  [-D <DATADIR>]
gs_ctl restart  [-D <DATADIR>]-----
[omm@db01 ~]$ gs_ctl stop -D /data/panweidb/data
[2025-01-26 15:19:45.651][478658][][gs_ctl]: gs_ctl stopped ,数据目录是 /data/panweidb/data
等待服务进程关闭 ..... 完成
服务进程已经关闭
[omm@db01 ~]$  gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Primary Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Standby Normal
3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal

15.5 查看单节点数据库状态

gs_ctl query [-D <DATADIR>]

 gs_ctl query [-D <DATADIR>][omm@db01 ~]$ gs_ctl query -D /data/panweidb/data
[2025-01-26 15:21:35.872][479418][][gs_ctl]: gs_ctl query, 数据目录是 /data/panweidb/dataHA state:local_role                     : Primarystatic_connections             : 2db_state                       : Normaldetail_information             : NormalSenders info:sender_pid                     : 478777local_role                     : Primarypeer_role                      : Standbypeer_state                     : Normalstate                          : Streamingsender_sent_location           : 0/D7B3478sender_write_location          : 0/D7B3478sender_flush_location          : 0/D7B3478sender_replay_location         : 0/D7B3478receiver_received_location     : 0/D7B3478receiver_write_location        : 0/D7B3478receiver_flush_location        : 0/D7B3478receiver_replay_location       : 0/D7B3478sync_percent                   : 100%sync_state                     : Quorumsync_priority                  : 1sync_most_available            : Offchannel                        : 192.168.50.46:17701-->192.168.50.47:34550sender_pid                     : 478839local_role                     : Primarypeer_role                      : Standbypeer_state                     : Normalstate                          : Streamingsender_sent_location           : 0/D7B3478sender_write_location          : 0/D7B3478sender_flush_location          : 0/D7B3478sender_replay_location         : 0/D7B3478receiver_received_location     : 0/D7B3478receiver_write_location        : 0/D7B3478receiver_flush_location        : 0/D7B3478receiver_replay_location       : 0/D7B3478sync_percent                   : 100%sync_state                     : Quorumsync_priority                  : 1sync_most_available            : Offchannel                        : 192.168.50.46:17701-->192.168.50.48:52018Receiver info:
No information
[omm@db01 ~]$

15.6 查看数据库静态配置

gs_om -t view

gs_om -t view[omm@db01 ~]$ gs_om -t view
NodeHeader:
version:301
time:1737723153
nodeCount:3
node:1
============================================================
azName:AZ1
azPriority:1
node :1
nodeName:db01
ssh channel :
sshChannel 1:192.168.50.46
datanodeCount :1
datanodeInstanceType :primary
datanode 1:
datanodeLocalDataPath :/data/panweidb/data
datanodeXlogPath :
datanodeListenIP 1:192.168.50.46
datanodePort :17700
datanodeLocalHAIP 1:192.168.50.46
datanodeLocalHAPort :17701
dn_replication_num: 3
datanodePeer0DataPath :/data/panweidb/data
datanodePeer0HAIP 1:192.168.50.47
datanodePeer0HAPort :17701
datanodePeer1DataPath :/data/panweidb/data
datanodePeer1HAIP 1:192.168.50.48
datanodePeer1HAPort :17701
============================================================
azName:AZ1
azPriority:1
node :2
nodeName:db02
ssh channel :
sshChannel 1:192.168.50.47
datanodeCount :1
datanodeInstanceType :standby
datanode 1:
datanodeLocalDataPath :/data/panweidb/data
datanodeXlogPath :
datanodeListenIP 1:192.168.50.47
datanodePort :17700
datanodeLocalHAIP 1:192.168.50.47
datanodeLocalHAPort :17701
dn_replication_num: 3
datanodePeer0DataPath :/data/panweidb/data
datanodePeer0HAIP 1:192.168.50.46
datanodePeer0HAPort :17701
datanodePeer1DataPath :/data/panweidb/data
datanodePeer1HAIP 1:192.168.50.48
datanodePeer1HAPort :17701
============================================================
azName:AZ1
azPriority:1
node :3
nodeName:db03
ssh channel :
sshChannel 1:192.168.50.48
datanodeCount :1
datanodeInstanceType :standby
datanode 1:
datanodeLocalDataPath :/data/panweidb/data
datanodeXlogPath :
datanodeListenIP 1:192.168.50.48
datanodePort :17700
datanodeLocalHAIP 1:192.168.50.48
datanodeLocalHAPort :17701
dn_replication_num: 3
datanodePeer0DataPath :/data/panweidb/data
datanodePeer0HAIP 1:192.168.50.46
datanodePeer0HAPort :17701
datanodePeer1DataPath :/data/panweidb/data
datanodePeer1HAIP 1:192.168.50.47
datanodePeer1HAPort :17701
============================================================
[omm@db01 ~]$

15.7 数据库主备切换(主备机均正常时)

cm_ctl switchover -n <nodeid> -D <datadir>

cm_ctl switchover -n <nodeid> -D <datadir>
示例:cm_ctl switchover -n 2 -D /data/panweidb/data--从节点上执行,执行后,从节点变成主节点
gs_ctl switchover -D /opt/huawei/install/data/dn
注意:执行switchover或failover后,需要执行gs_om -t refreshconf 命令记录当前主备机信息。--[omm@db01 ~]$  gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : No
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Standby Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Standby Normal
3  db03 192.168.50.48   6003 /data/panweidb/data S Primary Normal
[omm@db01 ~]$ cm_ctl switchover -n 2 -D /data/panweidb/data
.....
cm_ctl: switchover successfully.
[omm@db01 ~]$  gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : No
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Standby Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Primary Normal
3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal
[omm@db01 ~]$ cm_ctl switchover -n 1 -D /data/panweidb/data
.....
cm_ctl: switchover successfully.
[omm@db01 ~]$  gs_om -t status --detail
[  CMServer State   ]node    node_ip         instance                         state
----------------------------------------------------------------
1  db01 192.168.50.46   1    /data/panweidb/cm/cm_server Standby
2  db02 192.168.50.47   2    /data/panweidb/cm/cm_server Standby
3  db03 192.168.50.48   3    /data/panweidb/cm/cm_server Primary[   Cluster State   ]cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL[  Datanode State   ]node    node_ip         instance                 state
------------------------------------------------------------------
1  db01 192.168.50.46   6001 /data/panweidb/data P Primary Normal
2  db02 192.168.50.47   6002 /data/panweidb/data S Standby Normal
3  db03 192.168.50.48   6003 /data/panweidb/data S Standby Normal
[omm@db01 ~]$

15.8 数据库主备切换(主机故障时)

主机故障后可以通过failover命令对备机进行升主。

gs_ctl failover   [-D DATADIR]

15.9 重建备库

gs_ctl build -b auto -D <datadir>

15.10 数据库节点扩缩容

详情可以参考文档:数据库节点扩缩容

gs_expansion -U omm -G dbgrp -h 192.168.100.14 -X ./clusterconfig.xml
gs_dropnode -U omm -G dbgrp -h 192.168.100.14

16.慢sql录制开启和关闭

16.1 慢SQL开启

问题现象:业务适配或者上线前期,性能压测,优化,如何记录业务慢sql。

解决方法:开启数据库慢sql录制开关。

gs_guc reload -Z coordinator -N all -I all -c "log_min_duration_statement =3000" #---- 慢sql录制

gs_guc reload -Z coordinator -N all -I all -c "track_stmt_stat_level = 'OFF,L1'" #---- 慢sql执行计划录制

gs_guc reload -Z coordinator -N all -I all -c "track_stmt_details_size = 40960"

gs_guc reload -Z coordinator -N all -I all -c "instr_unique_sql_count = 200000"

gs_guc reload -Z coordinator -N all -I all -c "track_stmt_parameter = 'on'"

开启后:在数据库中查看 select * from dbe_perf.statement_history ; --- 必须在postgres库中,使用超级用户查看。

16.2 慢SQL参数说明

参数详解:

log_min_duration_statement :记录日志的时间

参数说明:当某条语句的持续时间大于或者等于特定的毫秒数时,log_min_duration_statement参数用于控制记录每条完成语句的持续时间。

设置log_min_duration_statement可以很方便地跟踪需要优化的查询语句。对于使用扩展查询协议的客户端,语法分析、绑定、执行每一步所花时间被独立记录。

该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

enable_stmt_track:

参数说明:控制是否启用Full /Slow SQL特性。

在x86平台集中式部署下,硬件配置规格为32核CPU/256GB内存,使用Benchmark SQL 5.0工具测试性能,开关此参数性能影响约1.2%。

track_stmt_stat_level :

参数说明控制语句执行跟踪的级别。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置,不区分英文字母大小写。

取值范围:字符型

该参数分为两部分,形式为'full sql stat level, slow sql stat level'

第一部分为全量SQL跟踪级别,取值范围为OFF、L0、L1、L2

第二部分为慢SQL的跟踪级别,取值范围为OFF、L0、L1、L2

track_stmt_details_size :

参数说明设置单语句可以收集的最大的执行事件的大小(byte)。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,0 ~ 100000000

instr_unique_sql_count :

参数说明:控制系统中unique sql信息实时收集功能。配置为0表示不启用unique sql信息收集功能。

该值由大变小将会清空系统中原有的数据重新统计(备机不支持此能力);从小变大不受影响。

当系统中产生的unique sql条目数量大于instr_unique_sql_count时,若开启了unique sql自动淘汰,则系统会按unique sql的更新时间由远到近自动淘汰一定比例的条目,使得新产生的unique sql信息可以继续被统计。若没有开启自动淘汰,则系统产生的新的unique sql信息将不再被统计。

在x86平台集中式部署下,硬件配置规格为32核CPU/256GB内存,使用Benchmark SQL 5.0工具测试性能,开关此参数性能影响约3%。

track_stmt_parameter:

参数说明:开启track_stmt_parameter后,在statement_history中记录的执行语句不再进行归一化操作,可以显示完整SQL语句信息,辅助DBA进行问题定位。其中对于简单查询,显示完整语句信息;对于PBE语句,显示完整语句信息的同时,追加每个变量数值信息,格式为“query string;parameters:$1=value1,$2=value2,...”。

该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

16.3 慢SQL解除

问题来了,开启录制sql后,慢sql会逐渐累积,如何清理避免日志过大,影响数据库性能?

方法:

gs_guc reload -Z coordinator -N all -I all -c "track_stmt_retention_time= '3600,604800'" #---- 慢sql清理参数

通过此函数监控查看 statement_history 表大小,当表的增长非常大时,就需要调整track_stmt_retention_time参数,使清理频率加快。

select * from pg_catalog.pg_size_pretty(pg_catalog.pg_table_size('statement_history'));

track_stmt_retention_time

参数说明:组合参数,控制全量/慢SQL记录的保留时间。以60秒为周期读取该参数,并执行清理超过保留时间的记录,仅sysadmin用户可以访问。

该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

取值范围:字符型

该参数分为两部分,形式为'full sql retention time, slow sql retention time'

full sql retention time为全量SQL保留时间,取值范围为0 ~ 86400

slow sql retention time为慢SQL的保留时间,取值范围为0 ~ 604800

默认值:3600,604800

16.4 慢sql录制开启-执行计划

生产环境中,经常出现某些sql运行特别慢,dba获取到慢sql,单独执行非常的快,无法判断是资源异常导致,还是执行计划与手动执行不一样。

PanweiDB 数据库提供慢sql执行计划录制功能,协助dba 定位问题。

方法:

gs_guc reload -Z coordinator -N all -I all -c "track_stmt_stat_level = 'OFF,L1'" #---- 慢sql执行计划录制

track_stmt_stat_level :

参数说明控制语句执行跟踪的级别。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置,不区分英文字母大小写。

取值范围:字符型

该参数分为两部分,形式为'full sql stat level, slow sql stat level'

第一部分为全量SQL跟踪级别,取值范围为OFF、L0、L1、L2

第二部分为慢SQL的跟踪级别,取值范围为OFF、L0、L1、L2。

慢sql可通过此视图进行查询:在数据库中查看 select * from dbe_perf.statement_history ; --- 必须在postgres库中,使用超级用户查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:文件与fd(未被打开的文件)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;文件与fd&#xff08;未被打开的文件&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xf…

传输层协议TCP与UDP:深入解析与对比

传输层协议TCP与UDP&#xff1a;深入解析与对比 目录 传输层协议TCP与UDP&#xff1a;深入解析与对比引言1. 传输层协议概述2. TCP协议详解2.1 TCP的特点2.2 TCP的三次握手与四次挥手三次握手四次挥手 2.3 TCP的流量控制与拥塞控制2.4 TCP的可靠性机制 3. UDP协议详解3.1 UDP的…

自动驾驶中的多传感器时间同步

目录 前言 1.多传感器时间特点 2.统一时钟源 2.1 时钟源 2.2 PPSGPRMC 2.3 PTP 2.4 全域架构时间同步方案 3.时间戳误差 3.1 硬件同步 3.2 软件同步 3.2.3 其他方式 ① ROS 中的 message_filters 包 ② 双端队列 std::deque 参考&#xff1a; 前言 对多传感器数据…

U-Net - U型网络:用于图像分割的卷积神经网络

U-Net是一种专为图像分割任务设计的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;最初由Olaf Ronneberger等人于2015年提出。它被广泛应用于医学影像分析、遥感图像分割、自动驾驶和其他许多需要对图像进行像素级分类的任务中。U-Net具有强大的特征提取和恢复能力&…

c++小知识点

抽象类包含至少一个纯虚函数&#xff0c;不能实例化对象。派生类必须实现基类的所有纯虚函数才能成为非抽象类&#xff0c;从而可以实例化对象。可以使用抽象类的指针或引用指向派生类对象&#xff0c;实现多态性调用。抽象类虽然不能直接实例化&#xff0c;但可以拥有构造函数…

关于使用PHP时WordPress排错——“这意味着您在wp-config.php文件中指定的用户名和密码信息不正确”的解决办法

本来是看到一位好友的自己建站&#xff0c;所以突发奇想&#xff0c;在本地装个WordPress玩玩吧&#xff0c;就尝试着装了一下&#xff0c;因为之前电脑上就有MySQL&#xff0c;所以在自己使用PHP建立MySQL时报错了。 最开始是我的php启动mysql时有问题&#xff0c;也就是启动过…

写一个存储“网站”的网站前的分析

要创建一个能够存储自己网站内容的“网站”,通常意味着你希望有一个可以存储网站数据、文件、内容等信息的系统。为了实现这一目标,可以考虑构建一个内容管理系统(CMS),这个系统能够帮助你存储和管理网站上的内容。 图片仅供参考 以下是如何实现一个可以存储自己网站内容…

[STM32 标准库]定时器输出PWM配置流程 PWM模式解析

前言&#xff1a; 本文内容基本来自江协&#xff0c;整理起来方便日后开发使用。MCU&#xff1a;STM32F103C8T6。 一、配置流程 1、开启GPIO&#xff0c;TIM的时钟 /*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockC…

Vue.js组件开发-实现对视频预览

在 Vue 中实现视频文件预览 实现步骤 创建 Vue 组件&#xff1a;构建一个 Vue 组件用于处理视频文件的选择和预览。文件选择&#xff1a;添加一个文件输入框&#xff0c;允许用户选择视频文件。读取文件&#xff1a;监听文件选择事件&#xff0c;使用 FileReader API 读取所选…

深入探索 Vue 3 Markdown 编辑器:高级功能与实现

目录 1. 为什么选择 Markdown 编辑器&#xff1f;2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…

【信息系统项目管理师-选择真题】2015下半年综合知识答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…

KIMI K1.5:用大语言模型扩展强化学习(论文翻译)

文章目录 KIMI K1.5技术报告摘要 1. 引言2. 方法&#xff1a;基于大语言模型的强化学习2.1 强化学习提示集整理2.2 长思维链监督微调2.3 强化学习2.3.1 问题设定2.3.2 策略优化2.3.3 长度惩罚2.3.4 采样策略2.3.5 训练方法的更多细节 2.4 长到短&#xff1a;短思维链模型的上下…

python:taichi 高性能可视化 Demo 展览

安装 pip install taichi taichi-1.7.3-cp39-cp39-win_amd64.whl (83.1 MB) 运行 cmd where ti D:\Python39\Scripts\ti.exe #-- taichi 高性能可视化 Demo 展览 ti gallery [Taichi] version 1.7.3, llvm 15.0.1, commit 5ec301be, win, python 3.9.13********************…

API接口设计模板

API 员工登录接口设计 基本信息 Path&#xff1a; /admin/staff/login **Method&#xff1a;**POST 接口描述&#xff1a; 请求参数 Query 参数名称是否必须示例备注username是admin用户名password是mima密码 返回数据 名称类型是否必须默认值备注其他信息codeinteger必须dat…

电脑无法开机,重装系统后没有驱动且驱动安装失败

电脑无法开机&#xff0c;重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了&#xff0c;电脑卡住后&#xff0c;强制关机&#xff0c;再开机后开机马上就关机。尝试无数次开机后失败&#xff0c;进入BIOS界面&#xff0c;发现已经没有Windows系统了。重新安装系统后&…

2024年度总结——理想的风,吹进现实

2024年悄然过去&#xff0c;留下了太多美好的回忆&#xff0c;不得不感慨一声时间过得真快啊&#xff01;旧年风雪尽&#xff0c;新岁星河明。写下这篇博客&#xff0c;记录我独一无二的2024年。这一年&#xff0c;理想的风终于吹进现实&#xff01; 如果用一句话总结这一年&am…

Juc22_什么是中断、interrupt、isInterrupted、interrupted方法源码解析、如何使用中断标识停止线程

目录 ①. 什么是中断 ②. 源码解读(中断的相关API) ③. 如何使用中断标识停止线程 ①. 什么是中断 ①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了 ②. 在Java中没有办法立即停止…

《用DOTS解决实际需求》集锦

去年作者发布了一篇《DOTS-ECS系列课程》&#xff0c;深受同学们的好评&#xff01;前期课程是基于0.51版本录制的&#xff0c;DOTS升级至1.0版本后&#xff0c;同学们纷纷希望能使用DOTS 1.0版本录制实战课程。 今年作者带着DOTS 1.0版本的实战课程回来啦&#xff01;&#x…

HTTP 配置与应用(不同网段)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新校园网设计。 我是一个萌新小白&#xff0c;有误地方请大家指正&#xff0c;谢谢…

Crawl4AI 人工智能自动采集数据

文章目录 1 使用 Crawl 的步骤2 AI 智能体应用实例3 结语 Crawl是一款免费的开源工具&#xff0c;利用AI技术简化网络爬取和数据提取&#xff0c;提高信息收集与分析的效率。它智能识别网页内容&#xff0c;并将数据转换为易于处理的格式&#xff0c;功能全面且操作简便。 定位…