MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

2021-02-26    分類(lèi): 網(wǎng)站建設(shè)

作為一名DBA你是否遇到這種情況?當(dāng)你埋頭認(rèn)真工作之時(shí),發(fā)現(xiàn)自己操作的數(shù)據(jù)庫(kù)變得越來(lái)越慢,甚至是卡頓。如何處理?是什么原因?qū)е履愕腗ySQL運(yùn)行速度變慢呢?

下面小編將帶大家從多方面進(jìn)行分析是什么導(dǎo)致MySQL數(shù)據(jù)庫(kù)變慢~

一、 外部的硬件因素


MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

能夠直接影響MySQL服務(wù)器性能的系統(tǒng)指標(biāo)有:CPU、內(nèi)存、磁盤(pán)等的使用情況。

使用 vmstart 查看服務(wù)器資源使用情況:

MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

根據(jù)上面的反饋結(jié)果,可以看得出磁盤(pán)的數(shù)據(jù)寫(xiě)入比較大、CPU負(fù)載較高,這時(shí)需要對(duì)正在運(yùn)行的程序進(jìn)行優(yōu)化,減小資源負(fù)載。

二、 使用不恰當(dāng)?shù)腟QL語(yǔ)句

例如:

1)在第一條SQL語(yǔ)句中,where 查詢語(yǔ)句中出現(xiàn)了 null,這時(shí)數(shù)據(jù)庫(kù)的引擎不會(huì)使用索引,而是對(duì)全表進(jìn)行一次掃描,這樣的查詢將導(dǎo)致數(shù)據(jù)庫(kù)變慢。

MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

解決方法:使用0來(lái)代替null,即第二條SQL語(yǔ)句,可以加快數(shù)據(jù)庫(kù)查詢速度。

2)在查詢的數(shù)據(jù)表當(dāng)中如果使用 update、delete、insert 過(guò)于頻繁,我們可以嘗試使用optimize table 來(lái)存放,索引,存儲(chǔ)文件。

3)Select for update 如果條件的字段沒(méi)有使用索引的話,就會(huì)導(dǎo)致對(duì)全表進(jìn)行查詢,而不是對(duì)特定的行進(jìn)行查詢,需要注意。

下面第一條SQL語(yǔ)句的效率要比第二條SQL語(yǔ)句高的多。因?yàn)榈谝粭lSQL語(yǔ)句使用的索引查詢;第二條SQL語(yǔ)句是將表中所有的數(shù)據(jù)都檢索一遍,相當(dāng)于全表查詢,比較慢和消耗資源。

MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

三、 MySQL參數(shù)設(shè)置有問(wèn)題

3.1 max_connect_errors

我們知道「max_connect_errors 」正常情況下的默認(rèn)值是10,它是用來(lái)表示受信賬號(hào)錯(cuò)誤的連接次數(shù), 當(dāng)這個(gè)次數(shù)達(dá)到了10之后,MySQL服務(wù)器就會(huì)被自動(dòng)阻塞住了。 例如下圖這樣的錯(cuò)誤:

MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

解決方法:

當(dāng)出現(xiàn)這樣的錯(cuò)誤時(shí),我們需要 flush hosts 來(lái)解除錯(cuò)誤。其中,max_connect_errors 表示連接中斷重復(fù)請(qǐng)求連接的次數(shù)。

對(duì)于內(nèi)網(wǎng)而言,建議將 max_connect_errors 的數(shù)量設(shè)置大于10000,這樣就不會(huì)輕易阻塞,并且你還得定期進(jìn)行 flush hosts.

3.2 connect_timeout

「connect_timeout」表示的是MySQL等待應(yīng)答連接報(bào)文的大秒數(shù),當(dāng)超過(guò)這個(gè)時(shí)間后,表示 MySQL 連接失敗了。 這個(gè)值默認(rèn)值是5S,所以當(dāng)系統(tǒng)在處于高并發(fā)狀態(tài)下,很容易超時(shí),因此建議將 connect_timeout 設(shè)置為10-15秒為宜。

3.3. master-connect-retry

「master-connect-retry」表示的是在重新建立主從連接時(shí),出現(xiàn)連接失敗后,間隔多久可以重試上述過(guò)程。 建議將此值設(shè)置大一些。

總結(jié):

當(dāng)你的數(shù)據(jù)庫(kù)服務(wù)器變得很慢,不要驚慌,不妨試一試上述的方法,上文只是例舉一些有用的方法,如果有更好的方法補(bǔ)充,歡迎評(píng)論區(qū)留言。

在技術(shù)快速發(fā)展的當(dāng)今社會(huì),云計(jì)算已經(jīng)成為企業(yè)IT部署的選,特別是對(duì)于云資源使用的事實(shí)監(jiān)控變得尤為重要。云服務(wù)器出現(xiàn)CPU負(fù)載過(guò)高、磁盤(pán)IO讀寫(xiě)壓力過(guò)大、內(nèi)存壓力較大的情況,我們?cè)趺礃硬拍茉诘谝粫r(shí)間內(nèi)獲知呢?

在這里我們給大家安利一個(gè)運(yùn)維神器 ---王教授,通過(guò)對(duì)云資源的實(shí)時(shí)的監(jiān)控,幫我們發(fā)現(xiàn)云服務(wù)器、數(shù)據(jù)庫(kù)等資源的異常問(wèn)題,并且將存在的異常信息第一時(shí)間通知到團(tuán)隊(duì)個(gè)人,大大提升團(tuán)隊(duì)運(yùn)維效率!


MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?

CPU高負(fù)載提醒

對(duì)于使用云的用戶,只需要綁定賬號(hào)的AcessKey,即可連接使用。

網(wǎng)頁(yè)名稱(chēng):MySQL數(shù)據(jù)庫(kù)服務(wù)器越來(lái)越慢,如何分析并解決?
轉(zhuǎn)載注明:http://muchs.cn/news/103085.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、微信公眾號(hào)企業(yè)建站、網(wǎng)站維護(hù)、網(wǎng)站制作、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)