欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySql CPU激增原因小結(jié)

 更新時間:2024年11月20日 10:23:51   作者:ManchiBB  
本文主要介紹了MySQL CPU激增的原因和解決方法,包括QPS激增、慢SQL和大量空閑連接導(dǎo)致的CPU升高,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

QPS激增會導(dǎo)致CPU占用升高

分析

可以使用監(jiān)控工具,查看CPU利用率曲線圖和QPS曲線圖進(jìn)行對比。如果CPU曲線圖波動情況跟QPS曲線圖波動情況基本保持一致,可以明確明確CPU升高時QPS上升導(dǎo)致。反之,CPU曲線圖對比QPS曲線圖有不同步的峰值抖動,則說明在QPS未明顯激增的情況下,CPU占用過高,則大概率跟慢SQL相關(guān),可進(jìn)行后續(xù)慢SQL的排查。

備注:如果沒有監(jiān)控工具協(xié)助分析的情況下,可以使用show global status like ‘Questions’ 和show global status like 'Uptime’查詢,將兩者相除得到就是QPS值。

show global status like 'Questions';
show global status like 'Uptime';

解決QPS激增:

  • 判斷是否為實際業(yè)務(wù)激增導(dǎo)致,如果是實際業(yè)務(wù)激增導(dǎo)致,則可以通過資源擴(kuò)充,滿足業(yè)務(wù)激增的業(yè)務(wù)需求;
  • 找到具體激增的查詢所對應(yīng)的應(yīng)用系統(tǒng)的接口,進(jìn)行限流控制,以保護(hù)數(shù)據(jù)庫并發(fā)訪問量;
  • 應(yīng)用采用讀寫分離,降低單點(diǎn)訪問壓力;
  • 查看sql是否存在循環(huán)插入或者更新的情況,改為批量操作,減少執(zhí)行次數(shù)。

慢SQL會導(dǎo)致CPU升高

分析

通過show processlist查看當(dāng)前MySQL線程運(yùn)行情況,主要通過 Time 連接時間和State當(dāng)前SQL所處的狀態(tài)來分析慢SQL,一般情況下如果存在Sending data說明該查詢較慢,可以將info中的SQL復(fù)制出來通過explain查看詳細(xì)的執(zhí)行計劃進(jìn)行分析。

show processlist;

可通過MySql自帶的慢SQL日志功能分析:

通過root登錄數(shù)據(jù)庫開啟慢SQL查詢?nèi)罩?,set global slow_query_log = ‘ON’,并設(shè)置慢SQL過濾時間set global long_query_time = 1(超過1秒視為慢SQL),指定慢SQL日志文件存放路徑set global slow_query_log_file = ‘/var/lib/mysql/test_1116.log’。通過持續(xù)觀察該慢SQL記錄日志文件,查找出具體的慢SQL復(fù)制出來通過explain查看詳細(xì)的執(zhí)行計劃進(jìn)行分析。

解決慢SQL:

  • 緊急處理可以先通過殺死對應(yīng)線程(kill process id),緩解問題;
  • 無索引或者索引失效情況下,新建有效索引或者優(yōu)化SQL語句;
  • SQL中有大量聚合操作:簡化SQL,將邏輯提煉到業(yè)務(wù)代碼中;聚合操作異步或者預(yù)處理;
  • SQL返回的數(shù)據(jù)過多,改為分頁查詢;
  • 讀寫較多鎖競爭激烈,分庫分表或讀寫分離。

大量空閑連接會導(dǎo)致CPU升高

 show full processlist;

分析        

通過 show full processlist 查看Comand 有大量的Sleep,再根據(jù)Time查看裝填時間是否很長,如果存在大量長時間睡眠線程占用數(shù)據(jù)庫連接,會導(dǎo)致數(shù)據(jù)庫的吞吐量下降,進(jìn)而導(dǎo)致阻塞也會引發(fā)CPU飄高的現(xiàn)象。

解決:

  • 修改MySql配置文件中的 wait_timeout 空閑等待時間,值越小則相對空閑線程就會越少,不過需要重啟MySql才會生效;
  • 通過 set global wait_timeout = XX 方式熱修改該參數(shù)。

MySql 問題排查常用命令

Sql執(zhí)行計劃,進(jìn)行sql執(zhí)行分析

explain + sql;

explain select * from user;

查看數(shù)據(jù)庫當(dāng)前執(zhí)行線程狀態(tài)

show full processlist;

其中重點(diǎn)字段包括Comand 、Time 、State、Info,可以查看當(dāng)前所有連接線程中命令、持續(xù)時間、狀態(tài)、對應(yīng)的SQL信息。

查詢當(dāng)前運(yùn)行的所有事物

select * from information_schema.INNODB_TRX ;

在執(zhí)行結(jié)果中可以看到是否有表鎖等待或者死鎖,如果有死鎖發(fā)生,可以通過下面的命令來殺掉當(dāng)前運(yùn)行的事務(wù):KILL trx_mysql_thread_id 。

查看當(dāng)前出現(xiàn)的鎖

select * from information_schema.INNODB_LOCKS;

在改結(jié)果中可以看到鎖的類型、所屬事務(wù)ID、鎖級別、鎖模式等信息。

查看死鎖

SELECT
	b.trx_state,
	e.state,
	e.time,
	d.state AS block_state,
	d.time AS block_time,
	a.requesting_trx_id,
	a.requested_lock_id,
	b.trx_query,
	b.trx_mysql_thread_id,
	a.blocking_trx_id,
	a.blocking_lock_id,
	c.trx_query AS block_trx_query,
	c.trx_mysql_thread_id AS block_trx_mysql_tread_id 
FROM
	information_schema.INNODB_LOCK_WAITS a
	LEFT JOIN information_schema.INNODB_TRX b ON a.requesting_trx_id = b.trx_id
	LEFT JOIN information_schema.INNODB_TRX c ON a.blocking_trx_id = c.trx_id
	LEFT JOIN information_schema.PROCESSLIST d ON c.trx_mysql_thread_id = d.id
	LEFT JOIN information_schema.PROCESSLIST e ON b.trx_mysql_thread_id = e.id 
ORDER BY
	a.requesting_trx_id;

查看InnoDB狀態(tài)

SHOW ENGINE INNODB STATUS;

到此這篇關(guān)于MySql CPU激增原因小結(jié)的文章就介紹到這了,更多相關(guān)MySql CPU激增原因內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中使用游標(biāo)觸發(fā)器的方法

    MySQL中使用游標(biāo)觸發(fā)器的方法

    這篇文章主要介紹了MySQL中使用游標(biāo)-觸發(fā)器的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • MySQL修改字符集的實戰(zhàn)教程

    MySQL修改字符集的實戰(zhàn)教程

    這篇文章主要介紹了MySQL修改字符集的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01
  • windows下mysql 8.0.12安裝步驟及基本使用教程

    windows下mysql 8.0.12安裝步驟及基本使用教程

    這篇文章主要為大家詳細(xì)介紹了windows下mysql 8.0.12安裝步驟及基本使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • MySQL因大事務(wù)導(dǎo)致的Insert慢實例分析

    MySQL因大事務(wù)導(dǎo)致的Insert慢實例分析

    這篇文章主要給大家介紹了關(guān)于MySQL因大事務(wù)導(dǎo)致Insert慢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • SQL實現(xiàn)LeetCode(185.系里前三高薪水)

    SQL實現(xiàn)LeetCode(185.系里前三高薪水)

    這篇文章主要介紹了SQL實現(xiàn)LeetCode(185.系里前三高薪水),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • MySQL報錯Failed to open the referenced table XXX問題

    MySQL報錯Failed to open the referenced&nbs

    在數(shù)據(jù)庫操作中,嘗試刪除外鍵約束表'master_role'時遇到錯誤碼3730,因其被'user_role'表中的外鍵'fk_user_role'引用,解決方法包括關(guān)閉外鍵檢查和刪除外鍵,阿里巴巴開發(fā)手冊和知乎回答指出,外鍵雖能維護(hù)數(shù)據(jù)一致性
    2024-11-11
  • CentOS 7.2 Yum編譯安裝MySQL 5.6

    CentOS 7.2 Yum編譯安裝MySQL 5.6

    這篇文章主要為大家介紹了CentOS 7.2 Yum編譯安裝MySQL 5.6詳細(xì)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • MySQL 搭建雙主復(fù)制服務(wù)并通過 HAProxy 負(fù)載均衡的過程詳解

    MySQL 搭建雙主復(fù)制服務(wù)并通過 HAProxy 負(fù)載均衡的過程詳解

    在數(shù)據(jù)庫管理中,數(shù)據(jù)的備份和同步是至關(guān)重要的環(huán)節(jié),而雙主復(fù)制(Dual Master Replication)作為一種高可用性和數(shù)據(jù)同步的解決方案,本文將介紹MySQL雙主復(fù)制的配置過程并通過 HAProxy 負(fù)載均衡,感興趣的朋友一起看看吧
    2024-03-03
  • iOS開發(fā)runloop運(yùn)行循環(huán)機(jī)制學(xué)習(xí)

    iOS開發(fā)runloop運(yùn)行循環(huán)機(jī)制學(xué)習(xí)

    這篇文章主要為大家介紹了iOS開發(fā)runloop運(yùn)行循環(huán)的機(jī)制學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • ERROR 1406 : Data too long for column 解決辦法

    ERROR 1406 : Data too long for column 解決辦法

    導(dǎo)入數(shù)據(jù)的時候,mysql報錯 ERROR 1406 : Data too long for column Data too long for column
    2011-04-04

最新評論