66

GaussDB T分布式集群数据库每日维护必做必知

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg%3D%3D&%3Bmid=2650785531&%3Bidx=1&%3Bsn=ba316936bb1b40681a5bf0caf9745fb2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

aURFJb6.gif

作者介绍

魏斌, 新炬网络资深数据库专家,长期服务于运营商、金融、制造业及政企客户。从传统商业DB到开源分布式,均有涉猎及独到见解。职业以来扎根客户一线,对于紧急故障处置及性能问题优化具有丰富经验,尤善于灾备、多中心建设及异构数据迁移。

《GaussDB T分布式集群这样安装部署不踩坑》 ,我们开始GaussDB T每日维护必做的事情。新的一天从开启主机开始,把虚拟机打开后发现上次安装的数据库没有自启动,所有节点启动的相关进程仅cm_agent进程:

这个时候我们先要拉起ETCD:

NvA3uuz.png!web

OK,ETCD成功拉起,接下来我们拉起整个集群:

UJnUJnm.png!web

集群拉起成功。

后面我们会将ETCD及集群自动拉起加入自启动,下面开始回到开篇的主题,每日维护开始。

一、集群状态检查

第一件事当然是检查集群各节点资源状态情况啦,至于看啥,我们用一张图来了解要点:

vYbaamB.png!web

vE367bb.png!web

1、查看各节点资源是否是ON LINE,其中包括CM,CN,DN,ETCD等,如果不是,需进一步核查原因了。

2、查看各节点对比昨日是否涉及节点切换情况,查看节点对应的HOST即可。如有则异常,需进一步核查原因了。

二、检查主机资源使用情况(所有主机)

1、主机目录使用率

df -h

J3UVna3.png!web

2、CPU、内存及IO使用情况

这个检查的方法很多,这里使用了vmstat,iostat,free,请重点关注以下红框标示的位置。

JVBvuma.png!web

释:id列代表的是CPU空闲率,free列代表的是空闲内存,单位为页。

6V3E7vy.png!web

释:rMB/s及wMB/s的是每秒读写情况,%util在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

释:重点关注free及available。

注:本节资源检查需与基线进行比对,如出入过大需进一步核查原因。

三、核查各节点数据库状态

确认CN及DN都处于open状态,注意备DN是mount状态。

四、表空间使用率检查

当在进行使用率检查之前,先说下表空间如何创建。

1、连接到cn

zsql omm/[email protected]:8000 –q

FfEZzq7.png!web

2、创建表空间

CREATE TABLESPACE tbs_test1 DATAFILE 'tbs_test1' size 100m SHARD;

注:创建表空间时,使用SHARD关键字则支持将创建表空间语句自动下发至CN和DN节点且仅支持使用相对路径;若不使用SHARD关键字,则可使用绝对路径,同时需要在所有CN和主DN节点上都创建这个表空间后,才能正常在这个表空间下创建表。

3、检查数据文件,我们会发现在CN及DN都创建了对应的表空间及数据文件

F3aA73I.png!web

fMVBfmn.png!web

nmuiqaA.png!web

注:连接主DN使用如下命令连接。

zsql / as sysdba -D /gaussdb/data/data_dn1 -q

4、检查表空间的使用率

set line 300

set pages 2000

set timing off

col tablespace_name for a25

col sum_GB for a15

col free_GB for a15

col use_precent for a15

select b.tablespace_name,

round(sum(b.bytes) / 1024 / 1024 / 1024, 0) sum_GB,

round(sum(nvl(a.bytes, 0)) / 1024 / 1024 / 1024, 0) free_GB,

round((sum(b.bytes) - sum(nvl(a.bytes, 0))) / sum(b.bytes), 4) * 100 use_precent,

count(*)

from (select tablespace_name, file_id, sum(bytes) bytes

from adm_free_space

group by tablespace_name, file_id) a,

adm_data_files b

where a.file_id(+) = b.file_id

and a.tablespace_name(+) = b.tablespace_name

group by b.tablespace_name

having round((sum(b.bytes) - sum(nvl(a.bytes, 0))) / sum(b.bytes), 4) * 100 >= 0

order by 4 desc;

Abau6rm.png!web

注:表空间使用率检查需在所有的主CN及主DN运行。

五、异常等待事件检查

col event form a38

select event,count(*) from DV_SESSIONS where LOCK_WAIT = 'Y' group by event order by 2 desc;

i677VfA.png!web

注:在所有主DN核查是否存在异常等待事件。

如图所示存在TX等待,我们可以通过以下SQL查看下锁源在干啥:

select SID,SERIAL#,USERNAME,CURR_SCHEMA,CLIENT_IP,CLIENT_PORT,OSUSER,MACHINE,PROGRAM,

STATUS,LOCK_WAIT,EVENT,MODULE,CURRENT_SQL from dv_sessions

where sid in (select WAIT_SID from v$session where event like '%TX%');

如发现会话状态是非活动且是应用程序连上来的,可以联系应用核查是否正常,如可以kill我们可以运行ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; 杀会话。

A3ieAnz.png!web

六、日志检查

在数据库运行过程中,会产生大量用于数据库日常维护的运行、审计、 DEBUG、告警等日志。在数据库发生故障时,可以使用这些日志进行问题定位和数据库恢复的操作。

下面就常用的日志类型做下简介:

1、运行日志

打印GaussDB T数据库运行信息,如果数据库出现故障,请查看zengine.rlog。

日志目录:默认为“ $GSDB_DATA/log/run/zengine.rlog”或参数log_home对应的路径run子目录下,如果想修改其路径重启生效。

CN节点:

32Q7Rbr.png!web

DN节点:

Mja6jum.png!web

查看运行日志如下:

3mmUFbA.png!web

2、慢查询日志

打印GaussDB 100数据库执行时间超过阈值(由LONGSQL_TIMEOUT参数控制)的SQL信息到zengine.lsql日志文件中。

日志目录:默认为“ $GSDB_DATA/log/longsql/zengine.lsql”。

3、告警日志

打印GaussDB 100数据库运行告警信息。如需了解告警信息,请查看zenith_alarm.log。

日志目录:“ $GSDB_DATA/log/zenith_alarm.log”。

4、操作日志

记录用户通过ZSQL工具对GaussDB 100数据库的操作信息。如果需要了解操作记 录,请查看zsql.olog。

日志目录:“ $GSDB_DATA/log/oper/zsql.olog”。

5、TRACE日志

记录数据库会话死锁的信息。如需查看会话死锁信息,请查看zengine_00003_xxxxxx.trc。

日志目录:“ $GSDB_DATA/trc/zengine_00003_xxxxxx.trc”。

常见错误码:

GS-00716:Found %s deadlock in session (%u)

错误原因: 不同会话中并发交叉操作了同一批数据,造成死锁。

解决办法:

  • 查看trace log 或者 run log (根据数据库版本不同,死锁日志位置不同);

  • 根据日志里记录的具体信息,包括死锁类型,SQL语句等,排查业务语句。

GS-00715:The snapshot was outdated.

错误原因:快照过旧。

解决办法:

  • 重新运行SQL;

  • 将长时间运行的高耗SQL优化或拆分。

GS-00713:No free undo page

错误原因:UNDO表空间不足。

解决办法:

  • 增大UNDO表空间大小;

  • 将大事务kill释放UNDO。

GS-00305:%s timeout

错误原因:网络api超时。

解决办法:

  • 请确保主机网络正常。

GS-00774:Failover in progress, can not be connected

错误原因:备机正在做failover时,主机的日志发送线程来连接备机。

解决办法:

  • 将主机停止掉,待备机升主后,将原主降备。

GS-00839:Flush redo file:%s, offset:%u, size:%lu failed

错误原因:写redo日志文件的时候失败了,一般是文件系统或者磁盘有问题。

解决办法:

  • 检查操作系统或磁盘。

GaussDB T数据库维护的工作很多,除了以上每日必做的事情之外,还有会话连接失败、缓冲区刷盘失败、CN/DN节点状态异常、CM Server节点状态异常、主备DN节点日志同步延迟过大等等问题核查。其中很多我们可以通过使用Database Manager分析处理告警或者使用自己开发脚本实现告警。

维护的目的是让系统更稳定,维护工作越简单,维护人员就越不容易出错。尽可能的把维护工作脚本化、工具化、自动化,将人员解放出来做更有价值的事情是我们的目标。路漫漫其修远兮,一起加油吧!

> > > >

活动推荐

2020年5月29日,北京,Gdevops全球敏捷运维峰会将 开启年度首站! 重点围绕数据库、智慧运维、Fintech金融科技领域,携手阿里、腾讯、蚂蚁金服、中国银行、平安银行、中邮消费金融、工商银行、建设银行、农业银行、民生银行、中国联通大数据、浙江移动、新炬网络等技术代表,展望云时代下数据库发展趋势、破解运维转型困局

FBvQzaJ.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK