GaussDB(DWS)应急预案(四):CPU使用率倾斜

举报
Arrow0lf 发表于 2023/12/27 19:49:31 2023/12/27
【摘要】 DWS CPU使用率倾斜场景下应急预案

1.1 CPU倾斜(预计10min)

1.1.1 应急步骤

  • 对硬件进行巡检,排查是否存在硬件故障(硬件告警、CE风暴、CPU故障等)
  • 检查集群状态是否均衡,若非均衡,需要进行主备均衡操作

cm_ctl switchover -a

  • 同时,在CPU倾斜的节点上部署gs_cpuwatcher脚本
  • 查杀当前执行时间长的语句,得到拼接的查杀命令如下:

select 'execute direct on(' || coorname || ') ''select pg_cancel_backend(' || pid || ')'';', sysdate - query_start as dur, state, query_id, enqueue, query from pgxc_stat_activity where state <> 'idle' and usename <> 'omm' and usename <> 'Ruby' order by dur desc limit 100;

  • 查杀CPU倾斜的语句,得到拼接的查杀命令如下:

select 'execute direct on(' || nodename || ') ''select pg_cancel_backend(' || pid || ')'';' , cpu_skew_percent, username, substr(query,1,100),duration from pgxc_wlm_session_statistics order by cpu_skew_percent desc;

  • 检查是否存在线程残留:连接CN,执行:

select 'execute direct on(' || node_name || ') ''select pg_cancel_backend(' || tid || ')'';' , node_name,tid,query_id from pgxc_thread_wait_status b where not exists (select query_id from  pgxc_thread_wait_status a where a.node_name like 'c%' and a.query_id=b.query_id) and b.node_name like 'd%' and b.wait_status not in ('wait cmd') and b.tid <> pg_backend_pid();

  • 若残留语句不响应信号,可应急kill该实例快速恢复。
  • 根据gs_cpuwatcher结果,查杀cpu占用高的语句。该脚本会在当前目录会生成log的日志,输出日志内容如下:


  • 使用对应语句的pid,查杀该语句:

execute direct on(node_name) 'select pg_cancel_backend(pid)';

  • 如果是CN节点CPU倾斜,查看各CN均衡情况:

select coorname,count(1) from pgxc_stat_activity where usename != 'Ruby' and state = 'active' group by coorname order by 2 desc;

  • 若存在各CN负载不均衡,需要使用ELB负载均衡。
  • 若通过上述手段仍无法恢复,应急kill CPU高的实例快速恢复。
  • kill实例重新拉起或主备切换后,仍存在该实例CPU倾斜的情况,说明当前计算倾斜的语句在持续下发,通过gs_cpuwatcher的结果找到CPU使用率高的语句,对涉及的表手动analyze,或将相关用户应急锁定。

alter user usename account lock;

1.1.2 恢复确认

确认CPU使用率是否相对均衡。

1.1.3 原因分析

  1. 首先确认是否存在硬件异常,硬件故障如CE风暴、CPU故障等场景会造成单节点CPU使用率异常,线下环境需检查arm加固、第三方软件(杀毒软件等)、网卡多队列绑定等。
  2. 检查集群状态是否均衡,当集群出现core或节点故障发生主备切换后,集群状态不均衡会导致部分节点上主实例个数增加,CPU使用率也会增加,需要进行主备均衡操作恢复。
  3. CPU高的节点部署gs_cpuwatcher脚本,抓取CPU高的语句。
  4. 若由于计算倾斜导致的CPU高,可通过查杀执行时间长的语句快速恢复,事后可对相关表手动analyze观察效果。
  5. 若非计算倾斜导致,可能是由于DN进程残留导致,可检查是否存在进程残留,并查杀相关残留线程。
  6. 若节点CPU倾斜是由于CN导致的,可以检查CN上负载是否均衡,若负载差异较大,需要业务侧使用ELB防止负载不均衡导致CPU倾斜。

1.1.4 预防再次出现

  • 定期对硬件巡检,并及时处理硬件告警
  • 避免数据的存储倾斜,在不确定如何选择分布列的场景下,可以指定roundrobin分布方式
  • 业务侧使用ELB/LVS
  • 对计算倾斜的sql进行业务优化,防止计算倾斜
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。