如何快速定位消耗 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
select * from performance_schema.threads where thread_os_id = xx ; select * from information_schema.`PROCESSLIST` where id=threads.processlist_id
根據操做系統id能夠到processlist表找到對應的會話,以下:操作系統
這裏對應看一下執行計劃基本就能夠判斷當前數據庫CPU爲何消耗這麼高了...線程
至於優化的點只須要在dock建一個索引便可,這裏就不介紹了。3d
原文:https://www.toutiao.com/i6923...