KingbaseES 数据库CPU使用率过高问题与解决
前言
本文介绍生产环境中CPU使用率高的常见原因,以及在CPU使用率高问题上的可能解决措施。
本文主要内容:
关于用于识别高CPU使用率的工具,例如kwr报告中DB CPU指标、kmonitor和sys_stat_statements。
确定CPU使用率高的根本原因。
使用 Explain Analyze查看执行计划、连接池和vacuum表解决CPU使用率过高的问题。
识别CPU使用率高的方法
1.kwr报告中DB CPU指标
DB CPU指标可作为一段时间内CPU使用率的依据。
kwr报告提供CPU使用率过高时的有关sql耗时。
2.kmonitor
kmonitor监控工具中资源使用率项可监控cpu使用率。并提供邮件、短信告警功能。
注:如果操作系统部署了nmon工具,也可以查看一段时间内cpu使用率,或在操作系统使用top命令查看cpu使用情况。
3.sys_stat_statements
sys_stat_statements扩展可识别占用cpu时间的查询。
查询sql的总cpu消耗时间
select c.rolname,b.datname,a.total_parse_time+a.total_plan_time+a.total_exec_time as total_time,a.* from sys_stat_statements a,sys_database b,sys_authid c where a.userid=c.oid and a.dbid=b.oid order by a.total_exec_time desc limit 5;
查询sql平均执行时间
SELECT userid::regrole, dbid, query, mean_exec_time
FROM sys_stat_statements
ORDER BY mean_exec_time
DESC LIMIT 5;
查询sql总执行时间
SELECT userid::regrole, dbid, query
FROM sys_stat_statements
ORDER BY total_exec_time
DESC LIMIT 5;
CPU消耗较高的原因可能有
1.长时间运行的事务
长事务可能导致CPU使用率过高。
查询运行时间最长的连接:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM sys_stat_activity
WHERE pid <> sys_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
2.数据库总连接数
数据库的大量连接也可能会导致CPU和内存使用率增加。
以下查询提供按状态排序的连接数信息:
SELECT state, count(*)
FROM sys_stat_activity
WHERE pid <> sys_backend_pid()
GROUP BY 1 ORDER BY 1;
3.低效的sql
kwr报告中 Top SQL By Elapsed Time,Top SQL By CPU Time可以查询消耗高cpu的sql语句,再通过explain analyze语法分析该sql执行计划从而优化sql。
4.硬件性能低
有的业务系统执行大批量sql导致服务器cpu使用率高有时是正常现象,并不一定都是慢sql导致,这种情况往往因为服务器硬件资源有限。
解决CPU使用率较高的问题
1.使用 Explain Analyze
使用explain语法进一步查看sql的真实执行计划并进行优化。有关explain命令的详细信息,可在ksql客户端使用\h explain查看。
2.使用连接池
如果存在大量空闲连接或大量使用CPU的连接,请考虑使用连接池程序控制总连接数和空闲连接时长。
3.终止长时间运行的事务
可以考虑和应用人员协商终止长时间运行的事务释放内存和cpu资源。
如要终止会话的PID,需要使用以下查询有关PID:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM sys_stat_activity
WHERE pid <> sys_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
获得会话的PID后,可以使用以下查询进行终止:
SELECT sys_terminate_backend(pid);
注:如果此终止方式失败,则需要在操作系统调用gdb命令终止会话连接。
4.更新表的统计信息
使表的统计信息保持最新状态有助于提高查询性能,监视是否正在执行常规vacuum。
以下查询可识别需要vacuum的表:
select schemaname,relname,n_dead_tup,n_live_tup,last_vacuum,last_analyze,last_autovacuum,last_autoanalyze
from sys_stat_all_tables where n_live_tup > 0;
其中字段last_autovacuum和last_autoanalyze提供上次自动vacuum或分析表的日期和时间,如果未定期vacuum表,请执行以下步骤来优化自动vacuum。
临时解决方案是对表执行手动vacuum
vacuum analyze <table_name>;
KingbaseES 数据库CPU使用率过高问题与解决的更多相关文章
- 服务器CPU使用率过高排查与解决思路
发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux— ...
- 《Troubleshooting SQL Server》读书笔记-CPU使用率过高(下)
<Troubleshooting SQL Server>读书笔记-CPU使用率过高(下) 第三章 High CPU Utilization. CPU使用率过高的常见原因 查询优化器会尽量从 ...
- 《Troubleshooting SQL Server》读书笔记-CPU使用率过高(上)
第三章 High CPU Utilization. CPU使用率过高问题很容易被发现,但是诊断却不是很容易.CPU使用过高很多时候会成为其它问题的替罪羊,所以在确认和故障诊断时要抽丝剥茧. 调查CPU ...
- mysql cpu使用率过高解决方法
mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...
- Oracle查询语句导致CPU使用率过高问题处理
解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...
- Java程序CPU使用率过高
Java程序CPU使用率过高 通过top命令找到使用率过高的java进程PID 根据进程号查找线程TID:ps -mp PID -o THREAD,tid,time 将TID转换成16进制:print ...
- 记录一次mysql查询速度慢造成CPU使用率很高情况
1.某日zabbix告警,某台机器CPU使用率过高. 查看慢查询日志,看到很多sql语句都超过10秒 把sql语句拿出来放在查询窗口执行.前面加上explain就可以查看详细查询信息 playcode ...
- CPU使用率过高分析方法
项目过程中发现,应用服务器经常会出现CPU使用率较高的情况,需要定位出具体代码问题. 1.用top命令,根据CPU使用率排序,找出消耗cpu最高的进程 2.找出该进程下消耗CPU最高的线程(命令:to ...
- 空循环导致CPU使用率很高
业务背景 业务背景就是需要将多张业务表中的数据增量同步到一张大宽表中,后台系统基于这张大宽表开展业务,所以就开发了一个数据同步工具,由中间件采集binlog消息到kafka里,然后我去消费,实现增量同 ...
- 线上cpu使用率过高解决方案
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 下面我们将一步步定位问题,详尽的介绍每一步骤的相关知识. 一.通过top命令定位占用cpu高的进程 执行top命令得到 ...
随机推荐
- 【framework】Task简介
1 前言 Task 即任务,一个 Task 对应一个 Activity,其父容器为 TaskStack,子容器为 AppWindowToken. 关于其父类及祖父类的介绍,见 → Window ...
- Redhat7更改网易yum源
说明 之前写了一篇关于Redhat6更换Yum源的文章,时隔已久很多包都变了,正好最近搭建环境需要用到Redhat7.3所以就再记录一下如何更换为国内最新最常用的yum源. 操作步骤 1.卸载系统自带 ...
- Servlet实现导出下载csv文件
工作上遇到的场景,需要将客户列表数据导出成csv文件.测试了一个最简单版本,记录一下. 订单实体类: package entity; /** * 订单信息实体 * Created by dylan-p ...
- win32 - EnumDisplayDevices和EnumDisplayMonitors的使用
EnumDisplayDevices枚举适配器 EnumDisplayMonitors枚举监视器 #pragma comment(lib, "dxva2.lib") #includ ...
- SpringBoot使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流
令牌桶 在高并发的情况下,限流是后端常用的手段之一,可以对系统限流.接口限流.用户限流等,本文就使用令牌桶算法+拦截器+自定义注解+自定义异常实现限流的demo. 令牌桶思想 大小固定的令牌桶可自行以 ...
- Qt+QtWebApp开发笔记(二):http服务器日志系统介绍、添加日志系统至Demo测试
前言 上一篇使用QtWebApp的基于Qt的轻量级http服务器实现了一个静态网页返回的Demo,网页服务器很重要的就是日志,因为在服务器类上并没有直接返回,所以,本篇先把日志加上. Demo ...
- DataGear 制作自定义柱状图条目颜色的数据可视化看板
DataGear 看板提供了dg-chart-options图表选项配置功能,可自定义样式.位置.显示内容等图表选项,其中的processUpdateOptions回调函数配置项,可以在图表更新数据前 ...
- 【Azure 应用服务】能否通过 Authentication 模块配置 Azure AD 保护 API 应用?
问题描述 在App Service Authentication 中配置 Azure AD 注册的应用信息后,根据官方文档,可以让前端应用实现用户 AAD 登录,然后通过前端应用获取的Token,来访 ...
- redis 安装的参考文章
redis 安装 : https://www.runoob.com/redis/redis-install.html
- C++11的类型转换
//C类型转换 /* C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 显式类型转化:需要用户自己处理. 隐式类型:界定:相关类型,相近类型,意义相似的类 ...