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

openGauss数据库故障分析

原创 阎书利 2022-05-11
1551

方法一 查看日志

查看数据库日志ERROR级别以上日志

1.先查找数据目录的位置

可通过ps f -u om bm查看数据目录,或者gs_om -t status --detail查看数据目录
比如数据目录为/var/lib/opengauss/data

2.再查找数据库日志目录

cat /var/lib/opengauss/data/postgresql.conf|grep log_directory
例如默认日志目录为
log_directory = ‘pg_log’

3.从日志目录过滤ERROR级别以上日志

如果日志文件名是按yyyy-mm-dd,则可只查看当天的日志
cat /var/lib/opengauss/data/pg_log/postgresql-2021-04-08*.log |grep -E ‘ERROR|PANIC’ |more

方法二 综合诊断

1.先排查常见问题

1.1 查看集群的状态是否都为normal正常状态(是否有异常节点,比如同步节点挂了等)

gs_om -t status --detail

1.2 查看流复制延迟(是否有网络问题)

或者进入主库查看系统视图pg_stat_replication的查看sender_sent_location发送端发送日志位置与receiver_*_location接收端日志是否有延迟

select * from pg_stat_replication ;

1.3 WAL及归档状态文件及磁盘空间检查

1.4 查看连接状态,是否有长事务,活跃连接数占比

select state,count(1) from pg_stat_activity group by 1;

2.查看系统资源使用情况

2.1 使用top命令查看各节点cpu使用情况

按“1”键,可查看每个CPU核的使用率,可分别在每个节点依次查看,判断是主节点读写还是从节点读压力大。
主要关注cpu使用率。

2.2 使用top -H -p pid查找omm用户进程内占用cpu百分比比较高的线程

pid可通过ps f -u omm查看进程获取

2.3 系统级的时间消耗细分。判断是否整个系统是否存在负载,网络,IO,CPU上的瓶颈

select stat_name,value/1000 as "val(ms)" from dbe_perf.instance_time order by 2 desc;

2.4 系统级内存

select memorytype as type,memorymbytes as "val(MB)" from dbe_perf.memory_node_detail where memorymbytes>0;

2.5 共享内存使用率

select contextname ,parent,totalsize,freesize,usedsize from dbe_perf.shared_memory_detail where level=1 and totalsize>0 order by usedsize/totalsize desc;

2.6 系统级session

postgres=# \dv dbe_perf.session*
                     List of relations
  Schema  |          Name          | Type | Owner | Storage
----------+------------------------+------+-------+---------
dbe_perf | session_cpu_runtime    | view | omm   |
dbe_perf | session_memory         | view | omm   |
dbe_perf | session_memory_detail  | view | omm   |
dbe_perf | session_memory_runtime | view | omm   |
dbe_perf | session_stat           | view | omm   |
dbe_perf | session_stat_activity  | view | omm   |
dbe_perf | session_time           | view | omm   |
(7 rows)

通过上面一些session级视图可分析如下信息

  1. 会话级负载强度,逻辑/物理读写强度,排序活动等,用于甄别出负载强度高,使用资源多的会话
  2. 会话级时间细分,用于甄别出不同时间维度上session的消耗
  3. 会话级总内存和内存上下文分配/使用,可以定位单个session在特性级上的内存问题
  4. 获取实时系统活跃会话列表,包括会话基本信息,会话事务,语句,等待事件,会话状态(active,idle等),
    用于分析当前系统活跃用户的活动信息,比如从语句的开始时间判断当前会话是否一致阻塞在某一个语句,
    从等待事件可以判断某一个或者多数会话阻塞在哪个事件或者节点(分布式场景)

方式三 根据报错信息定位源码

1.进入opengauss-server源码目录

cd /opt/openGauss-server/src

2.根据报错信息关键字进行搜索

grep -r "Instance reset time is different" -w --include="*.cpp"

搜索结果如下
gausskernel/cbb/instruments/wdr/generate_report.cpp: ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg(“Instance reset time is different”)));

3.再根据源码去分析问题

最后修改时间:2022-05-11 15:35:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论