南大通用GBase 8c主备式场景性能故障归因分析

原文链接:https://www.gbase.cn/community/post/4440
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

关系型数据库在运行时可能出现卡住的状态,导致系统无法稳定运行。常见的故障处理流程:识别现象、收集信息、定位原因、制定方案、执行解决、验证测试并记录总结。本文将围绕南大通用GBase 8c主备式场景下可能出现的性能故障,进行归因分析,主要包括以下几种情况:

一、分析SQL语句运行状态

问题现象

部分SQL语句运行时间过长,需要分析查询语句的运行状态。

问题处理:

1.使用管理员账号(gbase)登录数据库

[gbase@gbase01 ~]$ gsql  -d postgres -p 15432

2.查询当前正在执行的SQL语句

postgres=# SELECT datname, usename, state, query FROM pg_stat_activity;

如果state的结果是idle,则表示此连接处于空闲状态,等待用户输入新的命令。如果只需要查看非空闲的查询语句,则使用该命令查看;

postgres=# SELECT datname, usename, state, query FROM pg_stat_activity WHERE state != 'idle';

分析查询语句是否处于阻塞状态,可以通过以下命令查看处于阻塞状态的SQL语句

postgres=# SELECT datname, usename, state, query FROM pg_stat_activity WHERE waiting = true;

二、结束指定会话

问题现象

在某些情况下,为了使系统继续提供服务,需要强制结束指定的会话。

问题处理:

1.使用管理员账号(gbase)登录数据库

[gbase@gbase01 ~]$ gsql  -d postgres -p 15432

2.从当前活跃的会话视图找到有问题的会话id

postgres=# SELECT datid, pid, state, query FROM pg_stat_activity;

其中pid的值则为该会话的线程ID

3.根据线程ID结束会话

postgres=# SELECT pg_terminate_backend(139834762094352);

三、查找长时间运行的SQL

问题现象

SQL运行时间长或SQL语句执行不能结束。

问题原因

SQL语句复杂,或者查询语句被阻塞引起的SQL语句长时间运行。

问题处理:

1.使用管理员账号(gbase)登录数据库

[gbase@gbase01 ~]$ gsql  -d postgres -p 15432

2.执行SQL语句查找运行时间长的语句

SELECT EXTRACT(DAY FROM (current_timestamp - query_start)) * 24 * 60 + EXTRACT(HOUR FROM (current_timestamp - query_start)) * 60 + EXTRACT(MINUTE FROM (current_timestamp - query_start)) AS runtime, datname, usename, query FROM pg_stat_activity WHERE state != 'idle' ORDER BY 1 desc;

查询会返回按照执行时间长短从大到小排列查询语句列表,第一给条结果就是当前系统中执行时间最长的SQL。

四、SQL语句优化分析

针对SQL创建合适的索引索引,改写等方式优化。分析SQL语句是否被卡住。

问题现象

在某些业务场景下,查询语句会被阻塞,导致语句运行时间过长。

问题原因

SQL语句需要加锁的方式来保护访问的对象,当要对访问对象进行加锁的时候发现需要访问的对象被其他会话加锁,则SQL语句被阻塞,需要等待其他会话完成相关操作并释放资源。

问题处理:

1.使用管理员账号(gbase)登录数据库

[gbase@gbase01 ~]$ gsql  -d postgres -p 15432

2.从当前活跃会话视图查找问题会话的线程ID

SELECT w.query AS waiting_query, w.pid AS w_pid, w.usename AS w_user, l.query AS locking_query, l.pid AS l_pid, l.usename AS l_user, t.schemaname || '.' || t.relname AS tablename FROM pg_stat_activity w JOIN pg_locks l1 ON w.pid = l1.pid AND NOT l1.granted JOIN pg_locks l2 ON l1.relation = l2.relation AND l2.granted JOIN pg_stat_activity l ON l2.pid = l.pid JOIN pg_stat_user_tables t ON l1.relation = t.relid WHERE w.waiting = true;

3.SQL语句的分析,结束会话

SELECT pg_terminate_backend(139834762094352);

五、锁等待超时错误

问题现象

在业务执行过程中会遇到锁等待超时的错误,错误如:

ERROR:  Lock wait timeout: thread 140533638080272 waiting for ShareLock on relation 16409 of database 13218 after 1200000.122 ms ERROR:  Lock wait timeout: thread 140533638080272 waiting for AccessExclusiveLock on relation 16409 of database 13218 after 1200000.193 ms

问题原因

SQL语句需要加锁的方式来保护访问的对象,当要对访问对象进行加锁的时候发现需要访问的对象被其他会话加锁,则SQL语句被阻塞,需要等待其他会话完成相关操作并释放资源,如果等待时间超过2min则会报锁等待超时的错误。

问题处理:

该问题可以参考分析SQL语句是否被卡住,已经查找超时间运行SQL,若发现长事务没有提交或未完成SQL语句,可以结束掉有问题的SQL语句。

六、日志说明

数据库服务的运行状态受多种因素影响,数据库发生异常后主要通过日志来判断遗产原因,该部分主要介绍GBase 8c主备式日志文件大致位置。

(1)GBase架构和组成

单机/主备形态的GBase 8c数据库,业务数据存储在单个物理节点上,主备节点之间通过同步或异步的方式进行高可用和扩展能力。

  • HA Center高可用模块:HA Center是GBase 8c的高可用模块,负责在故障情况下判断节点状态并进行状态切换。
  • GBase 8c主(备):负责存储业务数据(支持行存、列存、内存表存储)、执行数据查询及向客户端驱动返回执行结果。
  • Storage:服务器的本地存储资源,负责持久化存储数据。

GBase大致分为高可用和数据节点组成,同事数据节点包括了用户监听数据库实例运行状态的agent和数据库运行实例。

(2)主要服务日志的查看

数据库服务器的系统日志,改是指包含数据库服务运行过程中系统级别日志:

/var/log/messages

查看服务器节点有那些服务

[gbase@gbase01 ~]$ sudo systemctl list-units | grep gbase
datanode_gbase_dn1_1.service                                                                                     loaded active running   gha_agent deamon
server_gbase_gha_server1.service                                                                                 loaded active running   gha_server deamon

查看高可用server节点日志(montor all执行的主节点查询即可)

[gbase@gbase01 ~]$ sudo systemctl status server_gbase_gha_server1
[gbase@gbase01 ~]$ sudo journalctl -u  server_gbase_gha_server1

该两个条语句主要是查看高可用服务的相关日志,数据库服务相关问题可以通过该日志查找问题。

查看高可用数据节点日志(查看有问题节点)

[gbase@gbase01 ~]$ sudo systemctl status datanode_gbase_dn1_1
[gbase@gbase01 ~]$ sudo journalctl -u  datanode_gbase_dn1_1

该两个条语句主要查看的是数据库的数据节点相关日志,如节点发生重启等服务级别的日志可以通过该日志进行查询。

数据节点运行日志

[gbase@gbase01 dn1_1]$ cd $GAUSSLOG/pg_log
[gbase@gbase01 dn1_1]$ cd dn1_1

该目录下的以postgresql开头日志是数据库运行日志,记载实例的运行相关日志,包括登录报错,权限不足,SQL异常等日志,主要是应用级别日志。

除性能故障外,GBase 8c也可能面临环境配置、安装部署、运行时故障等其他方面的问题。在处理故障时,仔细查看错误信息,检查系统配置和依赖,应重视系统日志分析,来定位和解决问题。

原文链接:https://www.gbase.cn/community/post/4440
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值