首页 > 其他分享 >CPU高利用率及IO高负载故障定位分析

CPU高利用率及IO高负载故障定位分析

时间:2022-10-19 12:33:35浏览次数:77  
标签:负载 THREAD ID 线程 IO SQL PROCESSLIST OS CPU

一、系统表说明

MySQL 5.7 版本起,performance_schema.threads线程表可以查询各个线程的信息,THREAD_OS_ID值对应OS中的线程,这就为故障定位提供了便捷,SQL如下:

参数:30502为OS中的线程

select
    t.THREAD_ID,
    t.PROCESSLIST_ID,
    t.THREAD_OS_ID,
    t.PROCESSLIST_USER,
    t.PROCESSLIST_HOST,
    t.PROCESSLIST_DB,
    t.PROCESSLIST_TIME,
    t.PROCESSLIST_STATE,
    esc.SQL_TEXT
from
    performance_schema.threads t
    join performance_schema.events_statements_current esc on t.THREAD_ID = esc.THREAD_ID
where
    t.THREAD_OS_ID = 30502 \G

 

二、高CPU利用率定位分析

执行 top -H 可以开启按线程模式显示各线程的CPU利用率情况,如:

 

 

本测试用例中,只运行了一个SQL查询,所以在上图cpu利用率显示中,只显示了一个mysqld线程。在实际生产环境中,执行 top -H 可以看到无数个mysqld线程。

PID为30502的mysqld线程,CPU利用率为99.8%,下面可以在mysql中定位具体正在执行的SQL

mysql> select
    ->     t.THREAD_ID,
    ->     t.PROCESSLIST_ID,
    ->     t.THREAD_OS_ID,
    ->     t.PROCESSLIST_USER,
    ->     t.PROCESSLIST_HOST,
    ->     t.PROCESSLIST_DB,
    ->     t.PROCESSLIST_TIME,
    ->     t.PROCESSLIST_STATE,
    ->     esc.SQL_TEXT
    -> from
    ->     performance_schema.threads t
    ->     join performance_schema.events_statements_current esc on t.THREAD_ID = esc.THREAD_ID
    -> where
    ->     t.THREAD_OS_ID = 30502 \G
*************************** 1. row ***************************
        THREAD_ID: 7059
   PROCESSLIST_ID: 7034
     THREAD_OS_ID: 30502
 PROCESSLIST_USER: admin
 PROCESSLIST_HOST: 127.0.0.1
   PROCESSLIST_DB: NULL
 PROCESSLIST_TIME: 38
PROCESSLIST_STATE: Sending data
         SQL_TEXT: select * from vodb.st_stock_stream_m a join cctest.assign_bill b on a.DISTRIBUTE_NO=b.unpack_task_no
1 row in set (0.00 sec)

 

三、高IO负载故位分析

执行以下命令查看mysql用户有IO操作的线程

iotop -ou mysql

 

 

上图中IO最高的线程为760,代入查询SQL中定位当前执行的SQL

[5.7.37-log]>select
    ->     t.THREAD_ID,
    ->     t.PROCESSLIST_ID,
    ->     t.THREAD_OS_ID,
    ->     t.PROCESSLIST_USER,
    ->     t.PROCESSLIST_HOST,
    ->     t.PROCESSLIST_DB,
    ->     t.PROCESSLIST_TIME,
    ->     t.PROCESSLIST_STATE,
    ->     esc.SQL_TEXT
    -> from
    ->     performance_schema.threads t
    ->     join performance_schema.events_statements_current esc on t.THREAD_ID = esc.THREAD_ID
    -> where
    ->     t.THREAD_OS_ID = 760 \G
*************************** 1. row ***************************
        THREAD_ID: 49
   PROCESSLIST_ID: 24
     THREAD_OS_ID: 760
 PROCESSLIST_USER: root
 PROCESSLIST_HOST: localhost
   PROCESSLIST_DB: sbtest
 PROCESSLIST_TIME: 0
PROCESSLIST_STATE: update
         SQL_TEXT: INSERT INTO sbtest1(k, c, pad) VALUES(5042779, '92414202661-14291859035-18757691049-37971670709-39848532945-68164973695-93689826843-17273836296-17788170033-19574183929', '82925489196-46585790756-00581345240-37316052533-20517590705'),(5041036, '59768436110-23240951351-40223287131-23740572435-63972849623-59183147843-49098832696-40206889682-14289155558-32123313030', '82189982731-38559033588-89246968857-92972666956-33851751539'),(5048250, '95960091487-54004786710-32600387985-84029513929-67245136040-31229188369-77916894516-76888970498-81344806525-37743671127', '12881706178-74526035548-33548228051-14595138541-82928318994'),(5025715, '07539261061-81259858297-60149918396-97971301643-94310233981-09148716378-55589217946-97962328164-88674101455-82765330323', '04632441305-51989938485-52290253061-66946222871-76661974910'),(5009567, '76181600625-17957947278-91679969207-37832788082-06929514414-78894003749-15112597584-93539201611-39948365662-89932644973', '38904927900-34069635252-09973493630-25564150041-65570282520'),(501...
1 row in set (0.00 sec)

 

标签:负载,THREAD,ID,线程,IO,SQL,PROCESSLIST,OS,CPU
From: https://www.cnblogs.com/broadway/p/16805847.html

相关文章

  • FFmpeg中转场滤镜xfade的时间参数(duration和offset)与算法解读
    xfade转场滤镜小科普最近在研究音视频合成的相关功能,现已有两个视频剪辑。拼合成一个文件显然用concat可以完成,但是过渡生硬,而xfade滤镜可以很方便实现更加缓和的场景切换。......
  • 由于FFmpeg的amerge滤镜导致的iOS中无法载入视频
    amerge引发的问题一段视频,在合成后可能需要增加一段背景音乐来烘托气氛。然而在使用amerge进行混音时,如果不小心会出现问题。例如将合成好的视频通过AirDrop发送到iOS(因为......
  • Image Segmentation Using Text and Image Prompts论文阅读笔记
    ImageSegmentationUsingTextandImagePrompts论文阅读笔记摘要对于传统的分割方法,训练好后如果需要纳入新的类别,带来的成本是很高的。因此作者提出了一个系统,可以在......
  • vite..config.ts中Cannot find module 'path' or its corresponding type declaration
    ts中引入path模块出错Cannotfindmodule'path'oritscorrespondingtypedeclarations.解决方法第一步npminstall-D@types/node第二步在tsconfig.json中添加......
  • 我的Vue之旅 07 Axios + Golang + Sqlite3 实现简单评论机制
    第三期·使用Vue3.1+TailWind.CSS+Axios+Golang+Sqlite3实现简单评论机制效果图CommentArea.vue我们需要借助js的Data对象把毫秒时间戳转化成UTCStrin......
  • vue之axios
    什么是axios?Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中。特性1从浏览器中创建XMLHttpRequests2从node.js创建http请求3支持PromiseAPI4......
  • Unity IO 加载图片
    ///<summary>///以IO方式进行加载///</summary>privatevoidLoadByIo(stringurl,GameObjectImageOBJ){//创建文件读取流FileStream......
  • CPU host-passthrough技术与应用
    为了保证虚拟机在不同宿主机之间迁移的时候的兼容性,Libvirt对CPU提炼出标准的几种类型,在/usr/share/libvirt/cpu_map.xml中可以查到。cpu_map.xml不仅是CPU型号,还有生产商......
  • session
           不想用cookie的话Token+Redis自己实现springboot使用redis  请求每次要带上token  如果是浏览器访问。可以将token放到请求头  ......
  • ApplicationContextAware
    ApplicationContextAware用法当一个类实现了这个接口之后,这个类就可以方便的获得ApplicationContext对象(spring上下文),Spring发现某个Bean实现了ApplicationContextAware......