操作系统资源使用类问题 本页介绍天翼云TeleDB数据库 操作系统资源使用类问题。 CPU使用率高的问题 问题描述 操作系统的CPU频繁达到70%或以上,操作系统响应慢或无响应,导致数据库运行异常,如活跃连接数增加,大量SQL处理active或Lock状态,SQL执行变慢或长时间执行中。 可能影响 操作系统响应慢或无响应; 数据库运行异常,如活跃连接数增加,大量SQL处理active或Lock状态,SQL执行变慢或长时间执行中。 解决步骤 1. 操作系统层面检查cpu使用情况,如执行top命令,观察CPU整体情况; %Cpu(s): 0.8 us, 0.8 sy, 0.0 ni, 98.1 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st CPU属性值说明: %user:CPU处在用户模式下的时间百分比。 %nice:CPU处在带NICE值的用户模式下的时间百分比。 %system:CPU处在系统模式下的时间百分比。 %iowait:CPU等待输入输出完成时间的百分比。 %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。 %idle:CPU空闲时间百分比。 说明 如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。 您也可以使用perf,通过sudo perf top s comm,可以查看当前系统运行进程占比。 这里不像top一样区分idle、system、user,这里的占比是各个进程在总运行时间里面占比。 通过sudo perf record记录采样信息,然后通过sudo perf report s comm。 通过perf 可以从总体上查看CPU使用占比,结合数据库源码分析问题瓶颈。 2. 如上一步骤中,top查看到的都是postgres的进程,那么可以确定是由数据库引起的cpu问题,如果是其它进程,则需要确认进程对应的具体应用,另做分析,此处不再展示; 3. 对于由于大量postgres进程占用CPU导致的问题,可以通过postgres进程的pid找到对应哪个实例节点,进一步连接节点,通过查询会话表,查看运行的SQL情况。 如,查询运行时长超过10秒的SQL: SELECT now() querystart as "runtime", usename,applicationname, clienthostname, datname, state, query FROM pgstatactivity WHERE now() querystart > '10 seconds'::interval and state!'idle' ORDER BY runtime DESC; 查询花费时间最多的SQL TOP10: SELECT round(totaltime1000)/1000 AS totaltime,query FROM pgstatstatements ORDER BY totaltime DESC limit 10; 查看锁阻塞情况: select pid, usename, pgblockingpids(pid) as blockedby, query as blockedquery from pgstatactivity where cardinality(pgblockingpids(pid)) > 0; 根据收集到慢SQL或阻塞会话,进一步进行分析优化,通常策略有 1)优化SQL语句,尤其是并发量大、高频的SQL语句,通常通过创建索引减少大表全表扫描,改写SQL关联逻辑等方式优化; 2)根据业务需要,评估是否可降低并发量; 3)根据瓶颈,横向扩容节点组,调大节点资源配置; 4)提高硬件配置,提升CPU、磁盘性能;
来自: