GaussDB(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 原因分析
- 首先确认是否存在硬件异常,硬件故障如CE风暴、CPU故障等场景会造成单节点CPU使用率异常,线下环境需检查arm加固、第三方软件(杀毒软件等)、网卡多队列绑定等。
- 检查集群状态是否均衡,当集群出现core或节点故障发生主备切换后,集群状态不均衡会导致部分节点上主实例个数增加,CPU使用率也会增加,需要进行主备均衡操作恢复。
- 在CPU高的节点部署gs_cpuwatcher脚本,抓取CPU高的语句。
- 若由于计算倾斜导致的CPU高,可通过查杀执行时间长的语句快速恢复,事后可对相关表手动analyze观察效果。
- 若非计算倾斜导致,可能是由于DN进程残留导致,可检查是否存在进程残留,并查杀相关残留线程。
- 若节点CPU倾斜是由于CN导致的,可以检查CN上负载是否均衡,若负载差异较大,需要业务侧使用ELB防止负载不均衡导致CPU倾斜。
1.1.4 预防再次出现
- 定期对硬件巡检,并及时处理硬件告警
- 避免数据的存储倾斜,在不确定如何选择分布列的场景下,可以指定roundrobin分布方式
- 业务侧使用ELB/LVS
- 对计算倾斜的sql进行业务优化,防止计算倾斜
- 点赞
- 收藏
- 关注作者
评论(0)