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命令得到 ...
随机推荐
- 【Unity3D】碰撞体组件Collider
1 前言 Unity3D 中碰撞体(Collider)组件用于检测运动的物体之间是否发生碰撞,也可以作为触发器使用.产生碰撞的条件是: 2 个游戏对象都有 Collider 至少有一个游戏对象有 ...
- CSS实现渐隐渐现效果
CSS实现渐隐渐现效果 实现渐隐渐现效果是比较常见的一种交互方式,通常的做法是控制display属性值在none和其它值之间切换,虽说功能可以实现,但是效果略显生硬,所以会有这样的需求--希望元素消失 ...
- js常用知识点整理
说明:以下内容都是我工作中实际碰到的js知识点. 后面还会碰到其他知识点或对原来解决方案的改进,都会在本篇中持续不断的维护,希望给刚参加工作或初学的朋友一些参考. 1.给元素添加事件 $(" ...
- 【Azure Service Fabric】关于Service Fabric的相关问题
问题一:Service Fabric 是否支持Private Link? 在Azure Private Endpoint文档中,罗列出了 Azure 上支持 Private Link 的服务.Serv ...
- 【Azure 存储服务】Azure Storage Account 下的 Table 查询的性能调优
问题描述 Azure Storage Account 下的 Table 查询的性能调优? 问题解答 因为Azure Storage Table服务(表服务) 与常规的关系型数据库不一样(例如:MySQ ...
- 【Azure Developer】使用 Powershell az account get-access-token 命令获取Access Token (使用用户名+密码)
问题描述 在上篇的文章中,我们使用了JAVA SDK,根据用户名和密码来获取Azure AD的Access Token,这节,我们将使用Powershell az 命令来获取Access Token. ...
- 开源.NET8.0小项目伪微服务框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)
1.前言 为什么说是伪微服务框架,常见微服务框架可能还包括服务容错.服务间的通信.服务追踪和监控.服务注册和发现等等,而我这里为了在使用中的更简单,将很多东西进行了简化或者省略了. 年前到现在在开发一 ...
- maven打包出现 ����applets.user.service.UserService����-2022新项目
一.问题由来 新项目的框架刚搭建好,还不能正常的运行,我们这边就开始写代码,因为项目还在设计阶段,很多东西比如说需求 都还在讨论之中.分层架构采用的是cola4.0的架构,具体的代码由我们自己来进行实 ...
- 提升地理空间分析效率,火山引擎ByteHouse上线GIS能力
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在数字化时代,地理空间分析(Geospatial Analytics)成为辅助企业市场策略洞察的重要手段.无论是广 ...
- C++实现一个简单的生产者-消费者队列
本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下: 设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量 可能第一次生成的不一定合适,多刷新几次. 生 ...