如何快速定位當前數據庫消耗 CPU 最高的 sql 語句?

如何快速定位消耗 CPU 最高的 sql 語句,怎麼作?看看下面的介紹。mysql

概述

若是是Oracle數據庫咱們能夠很容易經過sql來定位到當前數據庫中哪些消耗CPU高的語句,而mysql數據庫能夠怎麼定位呢?這裏用一個簡單例子說明下...sql

主要是瞭解如何定位的思路,具體看官網介紹..數據庫

參考:https://www.percona.com/blog/...session

主要意思是針對定位CPU的問題,Percona增長了對經過信息的TID列將processlist ID映射到OS線程ID的支持,而MySQL在5.7版本後在PERFORMANCE\_SCHEMA.THREADS表加了一個THREAD\_OS\_ID新列來實現,如下方法適用於在其餘內核正常運行時,某個特定CPU的查詢過載的狀況。app

find out which session is using the most CPU resources in my database?優化

定位線程

pidstat -t -p <mysqld_pid> 1  5

圖片

經過該命令咱們能夠定位到80二、4445等線程消耗了大量的CPU,這裏儘可能確保在pidstat的多個樣本中驗證消耗是恆定的。根據這些信息,咱們能夠登陸到數據庫,並使用如下查詢找出哪一個MySQL線程是罪魁禍首。spa

定位問題sql

select * from performance_schema.threads where thread_os_id = xx ;
select * from information_schema.`PROCESSLIST` where  id=threads.processlist_id

圖片

根據操做系統id能夠到processlist表找到對應的會話,以下:操作系統

圖片

查看問題sql執行計劃

這裏對應看一下執行計劃基本就能夠判斷當前數據庫CPU爲何消耗這麼高了...線程

至於優化的點只須要在dock建一個索引便可,這裏就不介紹了。3d

圖片

原文:https://www.toutiao.com/i6923...

相關文章
相關標籤/搜索