1、定位cpu問題所在
當(dāng)cpu飆升到100%時,先用操作系統(tǒng)命令top命令觀察是不是mysqld占用導(dǎo)致的,如果不是,找出占用高的進程,并進行相關(guān)處理。
2、查看慢查詢?nèi)罩?/h3>
進入mysql命令行
mysql -h主機地址 -u用戶名 -p用戶密碼
查看慢查詢SQL是否啟用:ON是開啟,OFF是關(guān)閉。
show variables like ‘log_slow_queries’;
開啟慢查詢?nèi)罩?br> set global log_slow_queries = on;
3、使用show processlist查看運行線程
如果是mysqld造成的,show processlist顯示用戶正在運行的線程,看看里面跑的session情況,是不是有消耗資源的sql在運行【查看Time這一列最大值】。找出消耗高的sql,看看執(zhí)行計劃是否準(zhǔn)確,index是否缺失,或者是數(shù)據(jù)量太大造成。
show processlist
注意state字段中如果包含大量的Sending data、Wating for tabls、或者各種Lock、大概率是SQL造成數(shù)據(jù)庫擁堵。優(yōu)化對應(yīng)的SQL,開啟慢查詢?nèi)罩?,分析sql語句進行優(yōu)化。
一般來說,肯定要kill掉這些線程(同時觀察cpu使用率是否下降),等進行相應(yīng)的調(diào)整(比如說加索引、改sql、改內(nèi)存參數(shù))之后,再重新跑這些SQL。
也有可能是每個sql消耗資源并不多,但是突然之間,有大量的session連進來導(dǎo)致cpu飆升,這種情況就需要跟應(yīng)用一起來分析為何連接數(shù)會激增,再做出相應(yīng)的調(diào)整,比如說限制連接數(shù)等。
阻止濫用資源的程序: 當(dāng)網(wǎng)站受到攻擊時,有可能在短時間內(nèi)建立異常高的連接數(shù)量。MySQL中的PROCESSLIST可用于檢測頂級用戶并阻止對濫用連接的訪問。
4、大量的睡眠線程導(dǎo)致CPU過高
運行show full processlist
【1】根據(jù)Command這一列發(fā)現(xiàn)大量的Sleep
【2】再根據(jù)Time這一列 查看當(dāng)前Sleep線程的sql所用的耗時
【3】根據(jù)sql睡眠線程耗時時間 配置msyql
【4】打開mysql的配置文件my.cnf文件
配置如下:
vim /etc/my.cnf
[mysqld]
wait_timeout=20 ## 大于20秒自動斷開 (根據(jù)實際情況設(shè)置)
配置完成后重啟Mysql,不重啟的話,可以設(shè)置全局的等待超時時間
mysql> set global wait_timeout=20;
mysql> show global variables like '%timeout';
5、合理優(yōu)化配置項
檢查一下MySQL設(shè)置,有助于確定內(nèi)存使用情況,從而為MySQL分配合適的值。緩存在InnoDB存儲的緩沖池中完成。緩沖池的大小對系統(tǒng)性能起著關(guān)鍵作用,并被指定為可用RAM的50%-70%之間的值。如果池大小,將導(dǎo)致頁面過度刷新,如果太大,將由于內(nèi)存競爭而導(dǎo)致交換。
innodb_buffer_pool_size
max_connections為了在任何時刻為MySQL分配盡可能多的連接數(shù),并避免單個用戶使服務(wù)器過載,需要使用max_connections。每個線程使用RAM的一部分進行緩沖區(qū)分配,因此它根據(jù)RAM的大小限制最大連接數(shù)。
max_connections = (Available RAM – Global Buffers) / Thread Buffers 最大連接數(shù) = (有效內(nèi)存 - 全局緩沖容量)/ 線程緩沖容量
當(dāng)不經(jīng)常更改且Web服務(wù)器接收許多相同查詢時,查詢高速緩存可能會很有用。查詢緩存將SELECT語句的文本與發(fā)送到客戶端的相應(yīng)結(jié)果一起存儲。
query_cache_size
因此,此參數(shù)僅用于此類應(yīng)用程序服務(wù)器,否則將被禁用,并為其他服務(wù)器設(shè)置為零。文章來源:http://www.zghlxwxcb.cn/news/detail-599180.html
為了避免資源爭用,盡管啟用了該功能,但應(yīng)將該值設(shè)置為10MB左右的最小值。文章來源地址http://www.zghlxwxcb.cn/news/detail-599180.html
到了這里,關(guān)于MySQL數(shù)據(jù)庫CPU飆升到100%解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!