基本运维动作
常用运维命令:
- 查看集群状态或单个主机的状态:cm_ctl query -Cv;Normal:表示集群可用,主备关系正常;Degraded:表示集群可用,但是数据没有冗余备份;Unavailable:表示集群不可用;Catchup:表示集群的DN备实例正在追赶主实例的日志信息。
- 切换集群主备实例、实现AZ之间的相互切换:cm_ctl switchover -a
- 启停实例:
- 注意事项
- 适用场景:主机发生故障状态异常,需要停止所有实例;或单台服务器、硬盘故障,需要停止对应的实例进行检修更换等
- 前提条件:停止节点/实例后,需要保证集群内至少有一个正常的CN节点、cm_server节点、gtm节点;涉及cn节点、实例后,如果没有负载均衡,需要将业务迁移至其他CN;若集群磁盘水位处于75%以上,停止节点、实例后需要重点关注磁盘水位变化;停止实例前,需要检查集群状态,保证对应实例状态正常,无catchup;停止实例前,连接集群执行checkpoint ;启停集群服务、单个主机上的所有实例或者单独启停某个实例进程
- 停止模式有如下几种:
- smart: 等待用户业务结束后,集群退出
- fash:不等待用户业务结束,集群退出
- immediate: 不等待用户业务结束,强制集群退出。
- 修复节点:
- 修复前提:适用场景:DN异常、cn处于delete或者down状态
- 前提条件:集群安装成功,并且处于已启动状态;DN环只能损坏一个实例;集群内CMServer、CMAgent、Coordinator至少存在一个正常实例;GTM故障时,另一个GTM必须处于最高可用状态
- 注意实现:正常节点执行修复操作;修复涉及cn需要保障被修复的cn没有ddl业务将发生故障的主机(实例)替换为正常主机(实例)
- 注意事项
常用运维SQL:
- 活跃作业语句查询,使用场景:查询此时在数据库运行的作业信息,用于确定当前作业运行的SQL、耗时、运行状态,排队状态和等待状态等信息,pgxc_stat_activity视图
- 作业等待查询,使用场景:查询此时在数据库运行作业的等待信息,用于确定当前作业运行过程中,在各个DN实例等待事件和阻塞状态,是在等待IO还是在等待锁等,pgxc_thread_wait_status视图
- 锁等待查询,使用场景:查询此时在数据库运行的作业中等锁的信息,包括等锁的语句、用户和持有锁的语句、用户,用于确定当前作业系统中调度不合理的场景,比如当一个表在进行增加表字段时,其他插入或者查询作业会阻塞。pgxc_lock_conflicts视图。
- 单表倾斜:通过查看表数据在各个dn的分布情况判断是否存在数据倾斜。
- 倾斜表重分布处理步骤:
- 创建一张新的表,并选取合适的分布列,判断一列是否可以作为分布列,可通过下面的语句查询该列的值分布情况:
bash select attr, cont(*) from schema.table group by atttr; - 将数据从旧表导入到新表:
bash insert into new_table select * from old_table; - 删除旧表:
bash drop table old_table; - 将新表重命名为旧表:
bash alter table new_table rename to old_table;
- 创建一张新的表,并选取合适的分布列,判断一列是否可以作为分布列,可通过下面的语句查询该列的值分布情况:
- 倾斜表重分布处理步骤:
- 全库查倾斜表:查询全库数据表的倾斜情况,在集群表较多时可以指定条件统计倾斜率超过10%和表大小大于100G的表倾斜信息,针对每个倾斜大表,需要按照单表的倾斜处理办法进行处理。运维建议:针对业务表建议每周例行全库运维处理倾斜表,各个节点磁盘使用率差别不超过5%。
- 判断需要analyze的表:识别从未做过analyze的表;识别insert、update/delete总量超过上次统计数据量20%的表。需要固化到业务中,立即做analyze的场景:每次truncate表后执行insert数据的场景。每天插入新数据后并且业务立即只查询刚插入的数据场景。
- 脏页回收:
- dws用户表数据在经过频繁插入、更新、删除后,会产生脏页,脏页会占用空间。在脏页率达到一定程度时需要使用vacuum full analyze命令清理,建议每月进行一次维护
- 使用方法:登录需要统计的数据库,执行上面的SQL语句,找到需要进行清理的表。执行SQL命令;vacuum full analyze 业务表:
- 调优建议:当脏页率>30%或者脏数据行数>1w时,对表做脏页回收。
- 内存使用:查询当前数据库节点的内存使用情况,单位MB.查询当前节点内存使用情况:
bash select * from pv_total_memory_detail;
运维日志:
- 数据库日志:数据库日志记录了DWS数据库服务端启动,运行或停止时出现的问题,当数据库在启动,运行或者停止的过程中出现问题时,数据库用户可以通过运行日志,快速分析问题的产生原因。
- 管控面日志
- 操作系统日志:操作系统日志可以记录系统的运行状态和异常情况,并且用于故障排除和性能分析。
产品架构形态:dws数据库主要有如下部署方式:线下物理机部署ESL和云化部署HCS
- 线下部署:
- DWS的ESL版本使用fusioninsight manager管理平台提供集群状态监控,告警管理,监控采集等功能。集群安装完成后,登录管理平台即可查看集群的状态监控指标.
- 数据库级别的监控指标:服务对于CPU、内存,物理读写与IO等资源的消耗趋势,反应了数据库的业务压力,需要指出的是这里的内存使用大小指的时候各个数据库实例在监控时间点消耗的内存总量。
- 节点级别的监控指标:提供主机级别的CPU/内存以及磁盘使用情况的趋势图。
- 登录节点执行运维命令均需要在“omm”用户下执行,并且需要source环境变量。
- 云化部署:
- DWS的HCS形态完成集群创建后,即可在集群管理页面看到创建的集群信息,选择集群操作选项中的监控面板功能,查看监控信息。
- 节点级别监控:CPU/IO/磁盘使用率,内存,网络等;
- 集群概览:集群状态,整体资源消耗利率,实例状态
- 实时查询:活跃会话数,活跃应用数,活跃查询数。
- 线下部署:
巡检工具及运维工具
- 巡检工具:
- 不同巡检任务:
- 日常巡检:
- 使用场景:用于集群日常维护,获取集群的健康状态,发现集群的潜在风险问题。
- TOP巡检项:集群状态,负载均衡状态,CPU使用率,磁盘性能和使用率,日志空间大小,内存泄露,数据倾斜,透明大页,周期性备份等
- 使用规范:每单周或双周执行一次
- 升级前巡检:
- 使用场景:用于集群版本升级前,提前发现可能会影响集群升级的问题。
- TOP巡检项:集群状态,文件系统占用率,磁盘空间空间,防火墙关闭,xid回卷,系统表是否损坏。
- 使用规范:升级版本前5天内执行
- 扩容前巡检:
- 使用场景:用于扩容操作前,提交发现可能会影响集群扩容的风险问题。
- TOP巡检项:集群状态,节点间互信,磁盘使用率,磁盘的inodes使用率,数据倾斜,SCTP模块是否安装等。
- 使用规范:扩容操作前5天内执行
- 温备前巡检(仅HCS形态支持):
- 使用场景:用于温备操作前,提交发现可能会影响温备操作的风险问题
- TOP巡检项:全部11项
- 使用规范:温备操作前5天内执行
- 深度巡检:
- 使用场景:用于GaussDB集群日常维护,获取集群更深度的健康状态,发现集群的潜在风险,深度巡检必须停止业务后执行。
- TOP巡检项:磁盘使用率,僵尸进程,内存泄露,残留临时表,是否有psort索引,负载均衡状态,分布键顺序,开启analyze,guc参数符合调优条件等
- 使用规范:每年执行一次。
- ESL形态巡检工具:
- 工具介绍:FusionInsight Tool DWS Prober是为工程师提供的一套健康检查工具,能够检查集群相关节点,服务的健康状态,提前发现集群中潜在的问题,并生成健康检查报告。由两部分组成:FusionCare和SysChecker。其中FusionCare提供对租户面节点巡检功能,SysChecker提供对管控面FusionInsight的巡检功能。
- 适用场景:适用于集群安装后,对集群的服务状态,节点硬件状态,操作系统配置等进行检查。
- 常用巡检功能:日常巡检、升级前巡检、扩容前巡检、深度巡检
- HCS形态巡检工具:
- 工具介绍:Inspect插件,是为了技术支持和维护工程师提供的HCS集群界面化健康检查工具,能够检查集群相关节点,服务的健康状态,提前发现集群中的潜在问题,并生成健康检查报告。同时该插件与集群版本解耦,使用前可直接升级到最新版本。
- 使用场景:适合工程师在集群日常维护、升级、扩容、温备等操作前快速对集群软件、硬件、配置等进行健康检查。
- 日常巡检功能: 日常巡检、升级前巡检、扩容前巡检、温备前巡检、深度巡检。
- 运维工具:概述:DWS提供运维工具包,针对现网高频问题和应急场景,汇总成工具包,目标是通过工具一键收集定位定界信息,用于加快问题处理和提升运维效率。
- gs_dbmonitor:
- 功能描述:周期采集集群SQL级的运行状态:DDL探针,活跃语句,SQL排队,作业等待,内存使用,主备同步等信息
- 使用场景:实时监控系统运行状态:实时查询集群的SQL作业运行情况,实时查看异常指标,便于进一步分析集群运行情况盘点:汇总历史变化信息并转化为图表形式来分析业务和负载变化趋势,可用于系统健康度评估和业务变化分析
- gs_ccnqueue:
- 功能描述:排查ccn排队作业是否有异常,输出结果包括排队的作业数,可用内存数,剩余内存数,正在执行的作业的估算内存大小,执行时间,执行用户,执行的SQL等信息
- 使用场景:有大量的作业在waiting in ccn queue, 查看正在运行的作业和排队作业的资源消耗情况
- gs_cpuwatcher:
- 功能描述:查找集群中引起cpu高的业务SQL
- 使用场景:系统CPU使用率高,使用本工具抓取占用cpu高的业务SQL
- gs_memwatcher:
- 功能描述:对集群内的CN/DN的实例,进行单实例的内存监控
- 使用场景:系统内存/动态内存使用率高,使用本工具抓取占用内存高的业务SQL报内存错误memory is temporarily unavailable时排查内存占用情况。监控运行过程中的内存使用率。
- gs_iowatcher:
- 功能描述:监控单CN/DN上业务SQL的IO使用情况,如果需要监控多个,可以起多个线程。
- 使用场景:系统IO使用率高,使用本工具抓取占用IO高的业务SQL
- gsar:
- 功能描述:对指定网卡流量,重传,丢包等指标监测,以便快速定位网络问题。
- 使用场景:通过报错等问题,定位到可能有网络故障时,使用此工具对网络进行排查。
- gs_oscoreconfig,gs_coreanalyze
- 功能描述:单节点配置os core,关闭Bbox core;解析gaussdb产生的core文件,并打印出语句,执行用户等相关信息;展示当前目录下的所有已解析的core文件结果;压缩存放解析结果的core文件夹。
- 使用场景:当集群内gaussdb进程产生core文件后,使用该工具分析core文件堆栈,用于分析进程异常退出的原因
- gs_diskusedcheck
- 功能描述:对集群内所有磁盘的使用率进行筛选,识别超过阈值的磁盘。对单DN或单磁盘下所有DN进行磁盘使用率检查,覆盖以下场景:专有目录的大小,大文件检测
- 使用场景:磁盘告警或集群只读时,可使用此工具进行排查。当磁盘使用率出现倾斜时,可使用此工具进行排查。业务和负载变化,可用于系统健康度评估的参考。
- gs_tablescan:
- 功能描述:快速校验集群内表文件是否有损坏或者表查询异常。
- 使用场景:发现存在表数据文件损坏后,使用此工具进行全库排查(磁盘故障,全局排查,数据校验)
- gs_dbmonitor:
- TOPSQL:
- 概述:TopSQL是DWS数据库内置的一款功能十分强大的性能分析工具。在生产环境中,难免会出现一些突发情况,导致查询语句出现异常中断、阻塞时间长等情况,如果当时没能记录下来,那么事后就要投入更多的人力以及时间成本,去对错位进行定位和解决,有时还往往定位不到错误的地方。为了解决这样的窘迫的情况,DWS开发了TopSQL功能,对运行中的语句记录(实时TopSQL),对运行完成的语句进行记录(历史TopSQL)
- 实时TopSQL:
- 前提条件:
- guc参数enable_resource_track为on(默认为on)
- guc参数resource_track_level为query/perf或者operator(默认为query)
- 监控作业的类型为:优化估算的执行代价大于或等于resource_track_cost取值的作业。
- Cgroups功能正常加载,可通过gs_cgroup -P查看控制组信息。
- GUC参数enable_track_record_subsql控制是否记录存储过程、匿名块内部语句。
- 在上述条件中,enable_resource_track为系统级参数,用于设置是否开启资源监控功能。resource_track_level为session级参数,可以对某个session的资源监控级别进行灵活设置。
- 前提条件:
- 实时TopSQL常用视图:
- gs_session_cpu_statistics:查询实时CPU信息
- gs_session_memory_statistics:查询实时memory信息
- gs_wlm_session_statistics:查询当前cn的实时资源
- pgxc_wlm_session_statistics:查询所有cn的实时资源
- gs_wlm_operator_statistics:查询当前CN作业算子执行实时资源信息
- pgxc_wlm_operator_statistics:查询所有CN作业算子执行实时资源信息
- pg_session_wlmstat:查询当前用户执行作业正在运行时的负载管理信息。
- pgxc_wlm_workload_records:动态负载功能开启,enable_dynamic_workload 为on时,该视图有效,查询当前用户在每个CN上,作业执行时的状态信息。
- 历史TopSQL:
- 前提条件:
- guc参数enable_resource_track为on(默认为on)
- guc参数resource_track_level为query,perf或operator(默认为query)
- guc参数enable_resource_record为on(默认为on)
- guc参数resource_track_duration小于作业执行时间(默认为60s)
- guc参数enable_track_record_subsql控制是否记录存储过程、匿名块内部语句(默认为on)
- guc参数resource_track_subsql_duration小于存储过程中内部语句的执行时间(默认为180s)
- 监控作业类型为:资源监控实时视图中,记录的作业结束时的执行时间大于或等于resource_track_duration的作业
- Cgroups功能正常加载,可通过gs_cgroup -P查看控制组的信息。
- 前提条件:
- 历史TopSQL常用视图:
- gs_wlm_session_history:查询当前cn最近执行作业结束后的负载记录
- pgxc_wlm_session_history:查询所有cn最近执行作业结束后的负载记录
- gs_wlm_session_info:数据表,查询当前cn作业执行结束后的负载记录。要查到历史记录,必须保证enable_resouce_record为on
- pgxc_get_wlm_session_info_bytime:函数,对视图pgxc_wlm_session_info进行筛选查询,要查到历史记录,必须保证enable_resouce_record为on。在统计数据量很大的场景中,建议使用该函数进行查询。
- gs_wlm_operator_histroy:查询当前cn作业算子最近执行资源信息。要查到记录,必须保证resource_track_level 为operator
- pgxc_wlm_operator_history:查询所有cn作业算子最近执行资源信息。要查到记录,必须保证resouce_track_level为operator
- gs_wlm_operator_info:数据表,查询当前cn作业算子历史执行资源信息。要查到记录,必须保证resource_track_level为operator和enable_resource_record为on
- pgxc_wlm_operator_info:查询所有CN作业算子历史执行资源信息。要查到记录,必须保证resource_track_level为operator和enable_resource_record为on。
运维监控
- 华为云stack DWS 微服务组件:
- Controller:整个DWS的后台组件
- Monitor:ECF公共组件,主要功能:集群实例的状态监控,告警/事件上报
- Event:ECF公共组件,主要功能:ECF事件/告警管理中心,支持向SMN,OC,CTS发送事件和告警。
- ECFAgent:部署在集群节点上的代理,主要功能:接收告警和事件,监控集群状态
- DMSAgent:部署在集群节点上的代理,主要功能:采集数据库的资源监控信息和数据库所在节点的系统资源信息。
- 告警:
- 告警配置:DWS提供告警配置功能,用于提前发现集群潜在问题和故障,告警内容涵盖集群故障、资源过载、性能降级等多种故障场景,建议客户根据业务场景配置合理的告警阈值和规则,建议对紧急告警,进行短信和电话配置,便于及时关注集群告警。
- 监控:
- 监控上报:集群侧节点上有定时任务采集,数据仓库服务节点监控信息每隔1分钟采集一次,数据仓库整集群监控信息每隔4分钟采集一次,会在目录/uploadtocessrc下生成*.json文件,上报成功后会将监控文件存放到uploadtocesbak进行备份,文件备份周期为2天。
- 异步的数据XX进程,会将数据给ces服务,OC运维监控平台从ces上获取数据进行处理展示。
- 监控主要用于性能问题维护,异步上报监控,监控超过阈值会上报告警,通过监控趋势提前了解集群是否需要扩容,以及潜在的性能问题风险,当前DWS已有的性能监控指标粒度比较粗,无法精确到节点上具体的性能指标监控详情,新开发的DMS功能会有比较细粒度的监控后续的监控功能会以新开发的DMS为主,会进一步完善和丰富DMS的监控功能,DWS在630就已有的性能监控会保持现状,不会有大的需求改动。
业务应急
- 常见故障场景和应急手段:
- 整体性能慢:通过应急“三板斧”,快速恢复集群性能
- CPU使用率高:找到CPU占比高的语句,对相关业务进行应急查杀或者资源限制,事后进行SQL优化。
- IO使用率高:找到IO占比高的语句,对相关业务进行应急查杀,事后进行SQL优化
- 内存报错:找到内存占比高的语句,对相关业务进行应急查杀或资源限制
- 锁冲突报错:找到持锁语句,应急查杀并将锁冲突业务,错峰执行。
- 集群只读:找到空间占比高的表或者语句,清理空间。
- 整体性能慢:
- 概念:数据库系统的性能管理在整个业务系统中起着很重要的作用,集群性能管理不当或在硬件、OS等故障后,容易出现集群性能降级,需要及时介入处理避免长时间对业务造成影响
- 问题现象:集群整体出现卡慢,业务常规查询,建表等语句劣化,性能探针出现劣化
- 问题影响:集群整体性能降级,造成跑批延迟,影响业务时效性
- 处理套路:判断性能瓶颈点(硬件/资源/内部等待事件等),针对性能瓶颈点快速恢复。
- CPU使用率高:
- 概念:CPU指标表示当前集群计算资源的使用情况,一般建议CPU使用率维持在60%以下,防止在主备切换后出现CPU瓶颈;当CPU使用率超过80%后,不同业务之间会有比较严重的CPU争抢,此时建议通过错峰或扩容等手段降低CPU负载。当出现CPU使用率异常突增时,会导致集群整体性能劣化,需要及时处理。
- 问题现象:集群CPU使用率突增,或CPU水位长期维持在80%以上,出现CPU过载
- 问题影响:集群整体性能降级,造成跑批延迟,影响业务时效性
- 处理套路:找到占用CPU高的语句或用户,针对该语句或用户处理。
- IO使用率高:
- 概念:IO指标表示当前集群读写性能,对于机械硬盘应重点关注该指标,当机械盘IO使用率超过90%后,业务可能会有大量wait io出现,频繁IO等待导致集群整体性能降级。
- 问题现象:集群IO使用率突增,或IO使用率长期在90%以上,出现IO过载
- 问题影响:集群整体性能降级,造成跑批延迟,影响业务时效性
- 处理套路:找到占用IO高的语句或用户,同步排查硬件故障情况,针对IO占用高的语句或用户进行处理
- 内存报错:
- 概念:业务语句在执行过程中,大部分操作都是在动态内存中完成的,当SQL中间结果集过大或当前并发过高时,会导致集群动态可用内存不足,出现memory is temporarily unavailable报错
- 问题现象:集群动态内存使用率突增,出现动态内存不足告警,部分业务出现内存不足报错。
- 问题影响:部分业务报错
- 处理套路:找到占用内存占用高的语句或用户,针对内存占用高的语句或用户进行处理。
- 锁冲突报错:
- 概念:当对表进行查询/DDL/DML等任何操作时,数据库会对表进行加锁操作,在事务结束时释放。常规锁按照粒度可以分为8个等级,各个操作对应不同的锁级别,级别不同,阻塞程度不同。当互相冲突的语句执行时,后执行的语句会进入锁等待队列,表现为语句被阻塞。例如,对表进行长查询时,truncate语句会被阻塞,进入锁等待队列,表现为truncate语句执行卡住。
- 问题现象:表相关的业务阻塞,执行慢或出现锁等待超时报错
- 问题影响:部分业务报错或该表相关的业务被阻塞
- 处理套路:找到持锁语句,应急查杀或停用持锁业务。
- 集群只读:
- 概念:当集群某个磁盘完全写满,达到100%时,此时该盘对应的实例进程无法进行数据写入和xlog日志写入,并且可能导致对应的备机实例也写满,此时集群会出现不可用状态。为了避免集群不可用,当集群磁盘使用率到达90%时,会触发集群只读保护,此时只能进行查询,无法进行写入,这种情况下需要及时清理磁盘空间,将磁盘空间使用率降低到安全水位(建议80%)以下
- 问题现象:集群进入只读模式,写入相关的业务出现read only报错
- 问题影响:增删改业务报错
- 处理套路:找到触发只读的目录,根据对应的目录内容,找到大表或触发语句。