暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一文快速上手运维openGauss

Gauss松鼠会 2025-04-17
26


快速安装openGauss

本文基于centOS7.6环境,目的是简单快速安装openGauss企业版本,官方安装文档有更加详细步骤和说明 。

官方安装文档地址https://docs.opengauss.org/zh/docs/6.0.0/docs/InstallationGuide

安装前准备

关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
关闭SELINUX
vim etc/selinux/config
SELINUX=disabled 修改“SELINUX”的值“disabled
reboot


复制

(1)安装依赖包

yum install openssl* -y
yum install python3* -y
yum install libaio-devel readline-devel expect -y

复制

(2)下载和解压安装包 

登录https://opengauss.org/zh/download/ 下载企业版

mkdir -p opt/software/openguass      上传到此目录
解压
tar -xzvf openGauss-All-6.0.1-CentOS7-x86_64.tar.gz
tar -xzvf openGauss openGauss-OM-6.0.1-CentOS7-x86_64.tar.gz 



复制

(3)修改主机名

hostnamectl set-hostname node1
vi etc/hosts
{ip}  node1

复制

(4)配置库环境变量

export LD_LIBRARY_PATH=/opt/software/openGauss/script/gspylib/clib:$LD_LIBRARY_PATH


复制

(5)编辑配置文件

clusterconfig.xml文件包含部署openGauss的服务器信息、安装路径、IP地址以及端口号等。用于告知openGauss如何部署。 用户需根据不同场景配置对应的XML文件。

vi opt/software/openguass/clusterconfig.xml
需要修改的地方只有nodeNames的值,改为第3步的主机名,还有修改为自己的主机IP地址<?xml version="1.0" encoding="UTF-8"?><ROOT>    <!-- openGauss整体信息 -->    <CLUSTER>        <!-- 数据库名称 -->        <PARAM name="clusterName" value="dbCluster" />        <!-- 数据库节点名称(hostname) -->        <PARAM name="nodeNames" value="node1" />        <!-- 数据库安装目录-->        <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" />        <!-- 日志目录-->        <PARAM name="gaussdbLogPath" value="/var/log/omm" />        <!-- 临时文件目录-->        <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" />        <!-- 数据库工具目录-->        <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />        <!-- 数据库core文件目录-->        <PARAM name="corePath" value="/opt/huawei/corefile" />        <!-- 节点IP,与数据库节点名称列表一一对应 -->        <!-- 如果用ipv6 替换ipv4地址即可 如:<PARAM name="backIp1s" value="2407:xxxx:xxxx:xxxx:xxxx:xxxx:caa:2335"/> -->        <PARAM name="backIp1s" value="10.1.20.8"/>     </CLUSTER>    <!-- 每台服务器上的节点部署信息 -->    <DEVICELIST>        <!-- 节点1上的部署信息 -->        <DEVICE sn="node1">            <!-- 节点1的主机名称 -->            <PARAM name="name" value="node1"/>            <!-- 节点1所在的AZ及AZ优先级 -->            <PARAM name="azName" value="AZ1"/>            <PARAM name="azPriority" value="1"/>            <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->            <!-- 用ipv6安装部署时 换上ipv6地址即可,后面xml文件示例也是同样操作 -->            <PARAM name="backIp1" value="10.1.20.8"/>            <PARAM name="sshIp1" value="10.1.20.8"/>                    <!--dbnode-->     <PARAM name="dataNum" value="1"/>     <PARAM name="dataPortBase" value="26000"/>     <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/>            <PARAM name="dataNode1_syncNum" value="0"/>        </DEVICE>    </DEVICELIST></ROOT>


复制

(6)初始化安装环境 

该步骤用root用户执行

cd /opt/software/openGauss/script
./gs_preinstall -U omm -G dbgrp -X opt/software/openGauss/clusterconfig.xml

这步会创建omm用户,需要设置omm密码

复制

(7)使用gs_install安装openGauss

chmod -R 755 opt/software/openGauss/script/
chown -R omm:dbgrp opt/software/openGauss/script/
cp ../clusterconfig.xml .
gs_install -X opt/software/openGauss/script/clusterconfig.xml

需要设置密码 aaAA11__

Successfully started cluster.
Successfully installed application.
end deploy..


复制

(8)登录

gsql -d postgres -p 26000 -r
openGauss=

复制

openGauss内存结构

ff411f98a47f41968d2e8835e3da4a23.png

本地内存区

maintenance_work_mem:维护操作 vacuum,reindex使用

temp_buffers:临时表使用

work_mem:order by 和distinct 操作对元组进行排序,通过merge-join 和hash join 操作对表进行连接时使用

复制

共享内存区

shared_buffers:控制行存缓冲区大小
建议设置为内存的25~40%(没有单位以块为单位)

cstore_buffers:控制列存缓冲区大小
建议设置为内存/节点个数*0.4*0.25

wal_buffers:wal log数据的缓冲区
设置为-1 为自动调节大小 

MOT buffer:全局内存,是一个长期内存池,包含MOT的数据和索引。平均分布在NUMA节点,由所有CPU核共享。


复制

openGauss线程结构

5901ee4441de4aed830a53dc24126cc2.png

postmaster进程

1.数据库初始化时,为后端线程设置共享内存结构;
2.数据库的启停;
3.监听客户端连接,为每个客户端连接调用单独的服务线程;
4.管理与数据库运行相关的辅助线程;
5.线程垃圾回收,当后端服务线程紧急退出或者内核dump时,清理后端线程;
6.错误报告;



复制

BgWriter

把共享内存中的脏页写到磁盘上的线程。
正常状态下,bgwriter在刷新完缓存后,会等待时长bgwriter_delay(默认10秒)。当连续两次都没有要刷新的缓存,那么就会进入冬眠状态,等待时长变为50*bgwriter_delay。

复制

PageWriter

负责将脏页数据拷贝至双写(double-writer)区域并落盘,然后将脏页转发给bgwriter子线程进行数据落盘操作。

复制

autovacuum launcher 和 autovacuum worker

自动清理回收垃圾进程
autovacuum_vacuum_threshold = 50           
autovacuum_vacuum_scale_factor = 0.2  

• 触发vacuum-->
表上新增变化(update,delete) >= autovacuum_vacuum_scale_factor* reltuples(表上记录数) + autovacuum_vacuum_threshold
     
• 触发vacuum analyze-->
表上新增(insert,update,delte) >= autovacuum_analyze_scale_factor* reltuples(表上记录数) + autovacuum_analyze_threshold

 • 触发vacuum freeze-->
指定表上事务的最大年龄配置参数autovacuum_freeze_max_age,默认为2亿,达到这个阀值将触发
autovacuum进程,从而避免wraparound


复制

wal writer

定期将wal_buffers缓冲区的日志写入磁盘
延迟写入,最多是wal_writer_delay周期时间的三倍。

复制

checkpointer

数据库采用wal机制,日志落盘,内存数据异步落盘,数据库重启时,内存还没落盘导致数据丢失,所以需要重放wal日志恢复内存中的数据,不过wal日志会累计变大,导致恢复时间很长,用checkpoint机制,定期将缓存刷新到磁盘。数据的恢复只需要从刷新点开始重放wal日志。

触发条件
1.时间触发:距离上次执行时间间隔超过指定值(checkpoint_timeout)
2.wal日志:当最新的wal日志和上次checkpoint的刷新点的距离大于指定值checkpoint_complete_target 
3.手动触发
4.数据库关闭
5.基础备份
6.数据库崩溃修复


复制

其他线程

archiver
将wal日志拷贝备份目录

StatCollector
统计信息收集线程

SysLogger
日志线程,将消息或错误信息写入日志

auditor
审计线程

复制

openGauss存储结构

安装后目录

根据配置文件中的内容,主要目录如下 

openGauss安装目录  /opt/huawei/install/app 

openGauss数据目录  /opt/huawei/install/data/dn

openGauss日志目录  /var/log/omm/用户名

openGauss系统工具目录  /opt/huawei/install/om 

openGauss临时文件目录 opt/huawei/tmp

/opt/huawei/install/data/dn/ 

global    元数据、数据字典 存放目录 

base      默认表空间

pg_tblspc 用户指定表空间

oid和relfilenode

oid不变,relfilenode会变

openGauss=# select oid,relfilenode from pg_class where relname='t1';
  oid  | relfilenode -------+------------- 16384 |       16384(1 row)oopenGauss=# select pg_relation_filepath('t1'::regclass); pg_relation_filepath ---------------------- base/15741/16384(1 row)create tablespace test_tbs relative location 'tablespace/testtbs01';select oid,* from pg_tablespace;16390create table t2 (id number) tablespace test_tbs;openGauss=# select oid,relfilenode from pg_class where relname='t2';  oid  | relfilenode -------+------------- 16391 |       16391(1 row)openGauss=# select pg_relation_filepath('t2'::regclass);                 pg_relation_filepath                 ------------------------------------------------------ pg_tblspc/16390/PG_9.2_201611171_dn_6001/15741/16391(1 row)openGauss=# truncate table t2;TRUNCATE TABLEopenGauss=# select oid,relfilenode from pg_class where relname='t2';  oid  | relfilenode -------+------------- 16391 |       16397(1 row)

复制

t1表没有指定表空间,所以创建在base目录下,t2表指定了表空间,所以在pg_tblspc目录下,对表t2进行truncate操作后,relfilenode变化。

oid 类似身份证号,relfilenode 户口本上的户号。地址变了,户号就会变。 truncate,vacuum full ,删除重建表都会导致relfilenode 变化。

日志和文件

告警日志位置(结合配置文件看)
 /var/log/omm/omm/pg_log/dn_6001操作系统日志 vim var/log/messages日志收集gs_collector --begin-time="20250320 01:01" --end-time="20250320 11:11"解压tar -xzvf collector_20250320_111114.tar.gz控制文件/opt/huawei/install/data/dn/pg_controlpg_controldata opt/huawei/install/data/dn/访问控制文件pg_hba.conf 

复制

openGauss日常运维

数据库启停

查看服务状态
ps -ef |grep gaussgs_om -t status --detailgs_ctl status -D opt/huawei/install/data/dn启动gs_om -t startgs_ctl start -D opt/huawei/install/data/dn停止gs_om -t stop gs_ctl stop -D opt/huawei/install/data/dn -m f 一致性gs_ctl stop -D opt/huawei/install/data/dn -m i 非一致性

复制

vacuum操作

表膨胀

有效数据量不变,表越来越大,扫描的效率变低。是因为opengauss的MVCC机制问题,在写数据时,旧数据不删除,把新数据插入,将旧数据标记为无效,清理之前一直占用空间。执行update的话就是insert+delete的原理,依然会导致表膨胀。vacuum的作用磁盘清理dead tuple ;更新统计信息;重组数据;解决事务ID回卷问题。vacuum : 不要求获得排它锁,找到那些旧的“死”数据,标记为可用状态,不进行空间合并vacuum full: 就是除了vacuum,进行空间合并,它需要lock tablevacuum analyze: 更新统计信息,使得优化器能够选择更好的方案执行sqlvacuum freeze: 表记录冻结,可解决事务id回卷的问题vacuum做了什么1、清除update或delete 操作后留下的死元组2、跟踪表块中可用空间,更新free space map3、更新visibility map,index only scan 以及后续vacuum都会利用到4、冻结表中的行,防止事务ID回卷5、配合analyze ,定期更新统计信息FSM简单来说,就是vacuum只是清理死元组,利用FSM可以高效的将空间管理起来,方便查找和重新使用。visibility mapall_visible为t表示全部可见,不包含死元组,作用是加快vacuum,进行vacuum时,当扫描到all_visible为t时,则直接跳过。


复制

检查openGauss状态

 检查实例状态
 gs_check -U omm -i CheckClusterState

复制

检查锁信息

锁机制是数据库保证数据一致性的重要手段,检查相关信息可以检查数据库的事务和运行状况。

查询数据库中的锁信息
openGauss=# SELECT * FROM pg_locks;

查询等待锁的线程状态信息
openGauss=# SELECT * FROM pg_thread_wait_status WHERE wait_status = 'acquire lock';



复制

统计事件数据

SQL语句长时间运行会占用大量系统资源,用户可以通过查看事件发生的时间,占用内存大小来了解现在数据库运行状态。

查询事件的线程启动时间、事务启动时间、SQL启动时间以及状态变更时间。
openGauss=# SELECT backend_start,xact_start,query_start,state_change FROM pg_stat_activity;

查询当前服务器的会话计数信息
openGauss=# SELECT count(*) FROM pg_stat_activity;

查询当前使用内存最多的会话信息。
openGauss=# SELECT * FROM pv_session_memory_detail() ORDER BY usedsize desc limit 10;

复制

对象检查

表、索引、分区、约束等是数据库的核心存储对象

查看表的详细信息  openGauss=# \d+ table_name 查询表统计信息  openGauss=# SELECT * FROM pg_statistic;查看索引的详细信息  openGauss=# \d+ index_name查询分区表信息  openGauss=# SELECT * FROM pg_partition;查询约束信息  openGauss=# SELECT * FROM pg_constraint;

复制

备份

指定用户导出数据库
  gs_dump dbname -p port -f out.sql -U user_name -W password


导出schema
  gs_dump dbname -p port -n schema_name -f out.sql


导出table
  gs_dump dbname -p port -t table_name -f out.sql

复制

检查数据库性能

1. 以操作系统用户omm登录数据库主节点。
2. 执行如下命令对openGauss数据库进行性能检查。gs_checkperf[omm@node1 15741]$ gs_checkperfCluster statistics information:    Host CPU busy time ratio                     :    2.92       %    MPPDB CPU time % in busy time                :    57.95      %    Shared Buffer Hit ratio                      :    60.06      %    In-memory sort ratio                         :    0    Physical Reads                               :    530109    Physical Writes                              :    16200    DB size                                      :    67         MB    Total Physical writes                        :    16200    Active SQL count                             :    4    Session count             

复制

kill空闲连接

执行如下SQL语句,查看state字段等于idle,且state_change字段长时间没有更新过的连接信息。

openGauss=# SELECT * FROM pg_stat_activity where state='idle' order by state_change;

释放空闲的连接数。
查看每个连接,并与此连接的使用者确认是否可以断开连接,或执行如下SQL语句释放连接。其中,pid为上一步查询中空闲连接所对应的pid字段值。

openGauss=# SELECT pg_terminate_backend(140390132872976);


复制

重建索引

如果数据发生大量删除后,索引页面上的索引键将被删除,但索引页面并不会直接删除,即索引页面数量并不会减少,因此会造成索引膨胀。重建索引可回收浪费的空间。
新建的索引中逻辑结构相邻的页面,通常在物理结构中也是相邻的,所以一个新建的索引比更新了多次的索引访问速度要快。
重建索引有以下两种方式:

- 先运行DROP INDEX语句删除索引,再运行CREATE INDEX语句创建索引。
  在删除索引过程中,会在父表上增加一个短暂的排他锁,阻止相关读写操作。在创建索引过程中,会锁住写操作但是不会锁住读操作,此时读操作只能使用顺序扫描。

- 使用REINDEX语句重建索引。
  - 使用REINDEX TABLE语句重建索引,会在重建过程中增加排他锁,阻止相关读写操作。
  - 使用REINDEX INTERNAL TABLE语句重建desc表(包括列存表的cudesc表)的索引,会在重建过程中增加排他锁,阻止相关读写操作。
  

复制

END



Gauss松鼠会
汇集数据库从业人员及爱好者
互助解决问题 共建数据库技术交流圈


文章转载自Gauss松鼠会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论