最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql占用過(guò)高CPU時(shí)的優(yōu)化手段(必看)

 更新時(shí)間:2017年03月22日 11:19:15   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇Mysql占用過(guò)高CPU時(shí)的優(yōu)化手段(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Mysql占用CPU過(guò)高的時(shí)候,該從哪些方面下手進(jìn)行優(yōu)化?

占用CPU過(guò)高,可以做如下考慮:

1)一般來(lái)講,排除高并發(fā)的因素,還是要找到導(dǎo)致你CPU過(guò)高的哪幾條在執(zhí)行的SQL,show processlist語(yǔ)句,查找負(fù)荷最重的SQL語(yǔ)句,優(yōu)化該SQL,比如適當(dāng)建立某字段的索引;

2)打開(kāi)慢查詢?nèi)罩?,將那些?zhí)行時(shí)間過(guò)長(zhǎng)且占用資源過(guò)多的SQL拿來(lái)進(jìn)行explain分析,導(dǎo)致CPU過(guò)高,多數(shù)是GroupBy、OrderBy排序問(wèn)題所導(dǎo)致,然后慢慢進(jìn)行優(yōu)化改進(jìn)。比如優(yōu)化insert語(yǔ)句、優(yōu)化group by語(yǔ)句、優(yōu)化order by語(yǔ)句、優(yōu)化join語(yǔ)句等等;

3)考慮定時(shí)優(yōu)化文件及索引;

4)定期分析表,使用optimize table;

5)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象;

6)考慮是否是鎖問(wèn)題;

7)調(diào)整一些MySQL Server參數(shù),比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;

8)如果數(shù)據(jù)量過(guò)大,可以考慮使用MySQL集群或者搭建高可用環(huán)境。

9)可能由于內(nèi)存latch(泄露)導(dǎo)致數(shù)據(jù)庫(kù)CPU高

10)在多用戶高并發(fā)的情況下,任何系統(tǒng)都會(huì)hold不住的,所以,使用緩存是必須的,使用memcached或者redis緩存都可以;

11)看看tmp_table_size大小是否偏小,如果允許,適當(dāng)?shù)脑龃笠稽c(diǎn);

12)如果max_heap_table_size配置的過(guò)小,增大一點(diǎn);

13)mysql的sql語(yǔ)句睡眠連接超時(shí)時(shí)間設(shè)置問(wèn)題(wait_timeout)

14)使用show processlist查看mysql連接數(shù),看看是否超過(guò)了mysql設(shè)置的連接數(shù)

下面分享一例遇到過(guò)的案例:

網(wǎng)站在高峰時(shí)段訪問(wèn),點(diǎn)擊頁(yè)面有點(diǎn)卡。登陸服務(wù)器,發(fā)現(xiàn)機(jī)器負(fù)載有點(diǎn)高,并且mysql占用了很高的CPU資源,如下圖:

MySQL負(fù)載居高不下,如果打開(kāi)了慢查詢?nèi)罩竟δ?,最好的辦法就是針對(duì)慢查詢?nèi)罩纠飯?zhí)行慢的sql語(yǔ)句進(jìn)行優(yōu)化,如果sql語(yǔ)句用了大量的group by等語(yǔ)句,union聯(lián)合查詢等肯定會(huì)將mysql的占用率提高。所以就需要優(yōu)化sql語(yǔ)句

除了優(yōu)化sql語(yǔ)句外,也可以做一些配置上的優(yōu)化。在mysql中運(yùn)行show proceslist;出現(xiàn)下面回顯結(jié)果:

1.查詢有大量的Copying to tmp table on disk狀態(tài)

明顯是由于臨時(shí)表過(guò)大導(dǎo)致mysql將臨時(shí)表寫(xiě)入硬盤(pán)影響了整體性能。

Mysql中tmp_table_size的默認(rèn)值僅為16MB,在當(dāng)前的情況下顯然是不夠用的。
mysql> show variables like "%tmp%";
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| max_tmp_tables | 32 |
| slave_load_tmpdir | /tmp |
| tmp_table_size | 16777216 |
| tmpdir | /tmp |
+-------------------+----------+
4 rows in set (0.00 sec)

解決辦法:調(diào)整臨時(shí)表大小

1)進(jìn)mysql終端命令修改,加上global,下次進(jìn)mysql就會(huì)生效

mysql> set global tmp_table_size=33554432;
Query OK, 0 rows affected (0.00 sec)

再次登陸mysql
mysql> show variables like "%tmp%";
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| max_tmp_tables | 32 |
| slave_load_tmpdir | /tmp |
| tmp_table_size | 33554432 |
| tmpdir | /tmp |
+-------------------+----------+
4 rows in set (0.01 sec)

2)my.cnf配置文件修改

[root@www ~]# vim my.cnf
.....
tmp_table_size = 32M

重啟mysql
[root@www ~]# /etc/init.d/mysqld restart

2.show processlist;命令的輸出結(jié)果顯示了有哪些線程在運(yùn)行,可以幫助識(shí)別出有問(wèn)題的查詢語(yǔ)句。比如下面結(jié)果:

Id User Host db Command Time State Info
207 root 192.168.1.25:51718 mytest Sleep 5 NULL
先簡(jiǎn)單說(shuō)一下各列的含義和用途,第一列,id,不用說(shuō)了吧,一個(gè)標(biāo)識(shí),你要kill一個(gè)語(yǔ)句的時(shí)候很有用。user列,顯示單前用戶,如果不是root,這個(gè)命令就只顯示你權(quán)限范圍內(nèi)的sql語(yǔ)句。host列,顯示這個(gè)語(yǔ)句是從哪個(gè)ip的哪個(gè)端口上發(fā)出的。呵呵,可以用來(lái)追蹤出問(wèn)題語(yǔ)句的用戶。db列,顯示這個(gè)進(jìn)程目前連接的是哪個(gè)數(shù)據(jù)庫(kù) 。command列,顯示當(dāng)前連接的執(zhí)行的命令,一般就是休眠(sleep),查詢(query),連接(connect)。time列,此這個(gè)狀態(tài)持續(xù)的時(shí)間,單位是秒。state列,顯示使用當(dāng)前連接的sql語(yǔ)句的狀態(tài),很重要的列,后續(xù)會(huì)有所有的狀態(tài)的描述,請(qǐng)注意,state只是語(yǔ)句執(zhí)行中的某一個(gè)狀態(tài),一個(gè)sql語(yǔ)句,已查詢?yōu)槔赡苄枰?jīng)過(guò)copying to tmp table,Sorting result,Sending data等狀態(tài)才可以完成,info列,顯示這個(gè)sql語(yǔ)句,因?yàn)殚L(zhǎng)度有限,所以長(zhǎng)的sql語(yǔ)句就顯示不全,但是一個(gè)判斷問(wèn)題語(yǔ)句的重要依據(jù)。

常見(jiàn)問(wèn)題:

一般是睡眠連接過(guò)多,嚴(yán)重消耗mysql服務(wù)器資源(主要是cpu, 內(nèi)存),并可能導(dǎo)致mysql崩潰。

解決辦法 :

在mysql的配置my.cnf文件中,有一項(xiàng)wait_timeout參數(shù)設(shè)置.即可設(shè)置睡眠連接超時(shí)秒數(shù),如果某個(gè)連接超時(shí),會(huì)被mysql自然終止。
wait_timeout過(guò)大有弊端,其體現(xiàn)就是MySQL里大量的SLEEP進(jìn)程無(wú)法及時(shí)釋放,拖累系統(tǒng)性能,不過(guò)也不能把這個(gè)指設(shè)置的過(guò)小,否則你可能會(huì)遭遇到“MySQL has gone away”之類的問(wèn)題。
通常來(lái)說(shuō),把wait_timeout設(shè)置為10小時(shí)是個(gè)不錯(cuò)的選擇,但某些情況下可能也會(huì)出問(wèn)題,比如說(shuō)有一個(gè)CRON腳本,其中兩次SQL查詢的間隔時(shí)間大于10秒的話,那么這個(gè)設(shè)置就有問(wèn)題了(當(dāng)然,這也不是不能解決的問(wèn)題,你可以在程序里時(shí)不時(shí)mysql_ping一下,以便服務(wù)器知道你還活著,重新計(jì)算wait_timeout時(shí)間):

MySQL服務(wù)器默認(rèn)的“wait_timeout”是28800秒即8小時(shí),意味著如果一個(gè)連接的空閑時(shí)間超過(guò)8個(gè)小時(shí),MySQL將自動(dòng)斷開(kāi)該連接。

然而連接池卻認(rèn)為該連接還是有效的(因?yàn)椴⑽葱r?yàn)連接的有效性),當(dāng)應(yīng)用申請(qǐng)使用該連接時(shí),就會(huì)導(dǎo)致下面的報(bào)錯(cuò):

The last packet successfully received from the server was 596,688 milliseconds ago.
mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

28800seconds,也就是8小時(shí)。

如果在wait_timeout秒期間內(nèi),數(shù)據(jù)庫(kù)連接(java.sql.Connection)一直處于等待狀態(tài),mysql就將該連接關(guān)閉。這時(shí),你的Java應(yīng)用的連接池仍然合法地持有該連接的引用。當(dāng)用該連接來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),就碰到上述錯(cuò)誤。
可以將mysql全局變量wait_timeout的缺省值改大。

查看mysql手冊(cè),發(fā)現(xiàn)對(duì)wait_timeout的最大值分別是24天/365天(windows/linux)。

比如將其改成30天

mysql> set global wait_timeout=124800;
Query OK, 0 rows affected (0.00 sec)

以上這篇Mysql占用過(guò)高CPU時(shí)的優(yōu)化手段(必看)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL數(shù)據(jù)庫(kù)創(chuàng)建新用戶及授予權(quán)限的完整流程

    MySQL數(shù)據(jù)庫(kù)創(chuàng)建新用戶及授予權(quán)限的完整流程

    這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫(kù)創(chuàng)建新用戶及授予權(quán)限的完整流程,通過(guò)這些步驟,管理員可以有效管理數(shù)據(jù)庫(kù)用戶,確保數(shù)據(jù)庫(kù)的安全性和高效運(yùn)行,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • linux CentOS6.5 yum安裝mysql5.6

    linux CentOS6.5 yum安裝mysql5.6

    這篇文章主要為大家詳細(xì)介紹了linux CentOS6.5 yum安裝mysql5.6的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • mysql如何定時(shí)自動(dòng)新增分區(qū)

    mysql如何定時(shí)自動(dòng)新增分區(qū)

    這篇文章主要介紹了mysql如何定時(shí)自動(dòng)新增分區(qū)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Linux MYSQL5.7.23 rpm安裝(附帶安裝包)教程

    Linux MYSQL5.7.23 rpm安裝(附帶安裝包)教程

    RPM是一種軟件包管理系統(tǒng),常用于基于Red Hat的Linux發(fā)行版,如Fedora和CentOS,它允許用戶通過(guò)預(yù)編譯的二進(jìn)制包快速安裝和管理軟件,這篇文章給大家介紹Linux mysql5.7.23 rpm安裝(附帶安裝包)教程,感興趣的朋友一起看看吧
    2023-12-12
  • MySQL存儲(chǔ)引擎MyISAM與InnoDB的9點(diǎn)區(qū)別

    MySQL存儲(chǔ)引擎MyISAM與InnoDB的9點(diǎn)區(qū)別

    這篇文章主要介紹了MySQL存儲(chǔ)引擎MyISAM與InnoDB的9點(diǎn)區(qū)別,寫(xiě)給有選擇困難癥的同學(xué),需要的朋友可以參考下
    2014-08-08
  • MySQL批量更新的四種方式總結(jié)

    MySQL批量更新的四種方式總結(jié)

    最近需要批量更新大量數(shù)據(jù),習(xí)慣了寫(xiě)sql,所以還是用sql來(lái)實(shí)現(xiàn),下面這篇文章主要給大家總結(jié)介紹了關(guān)于MySQL批量更新的四種方式,需要的朋友可以參考下
    2023-01-01
  • MySQL免密登錄的幾種配置方式小結(jié)

    MySQL免密登錄的幾種配置方式小結(jié)

    在日常運(yùn)維中,為了簡(jiǎn)化登錄操作或提高自動(dòng)化腳本執(zhí)行的效率,我們經(jīng)常需要配置 MySQL 免密登錄,MySQL 支持通過(guò)多種方式實(shí)現(xiàn)免密登錄,這樣我們就可以避免每次輸入密碼,本文給大家介紹了MySQL免密登錄的幾種配置方式,需要的朋友可以參考下
    2024-10-10
  • 帶你一文理清MySQL的各種鎖

    帶你一文理清MySQL的各種鎖

    MySQL?作為一種常用的關(guān)系型數(shù)據(jù)庫(kù),也提供了多種鎖類型,這篇文章主要給大家介紹了關(guān)于MySQL各種鎖的相關(guān)資料,文中通過(guò)代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • mysql中窗口函數(shù)lag()用法小結(jié)

    mysql中窗口函數(shù)lag()用法小結(jié)

    LAG()函數(shù)在MySQL中用于訪問(wèn)當(dāng)前行前一行或多行的數(shù)據(jù),它包括偏移量、默認(rèn)值、分區(qū)和排序子句,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 一文弄懂MySQL自增主鍵

    一文弄懂MySQL自增主鍵

    這篇文章主要介紹了MySQL自增主鍵,MySQL的自增主鍵并不一定是連續(xù)的,自增值的保存位置和修改機(jī)制決定了一種自增值不連續(xù)的場(chǎng)景,下面就來(lái)具體介紹一下,感興趣的可以了解一下
    2025-01-01

最新評(píng)論

石阡县| 普兰店市| 日照市| 上林县| 镇赉县| 德令哈市| 大厂| 台安县| 左云县| 襄汾县| 许昌县| 东源县| 扬州市| 保亭| 连南| 永顺县| 恭城| 乡城县| 衡山县| 利辛县| 客服| 休宁县| 巴林右旗| 花莲县| 宜兰市| 勐海县| 涞水县| 三河市| 江西省| 葵青区| 广德县| 文化| 界首市| 双城市| 监利县| 长白| 奉新县| 江都市| 巫溪县| 泰宁县| 张家川|