一次Mysql訪問(wèn)慢故障排查案例

背景
某企業(yè)開(kāi)發(fā)環(huán)境用戶反應(yīng),在相同的機(jī)房,相同網(wǎng)段,不同IP地址的mysql服務(wù)器,相同訪問(wèn),一個(gè)響應(yīng)很快,一個(gè)明顯的慢。
納悶之余,網(wǎng)深科技工程師幫其分析了原因。
分析之前,先約定一下,以下對(duì)響應(yīng)快的簡(jiǎn)稱“很快”,響應(yīng)慢的簡(jiǎn)稱“很慢”吧。

故障復(fù)現(xiàn)
在查看了用戶使用mysql連接測(cè)試這一操作的演示,的確存在諸如用戶的描述的現(xiàn)象。如下:

從用戶操作層面,的確存在明顯快慢差別,后者讓人無(wú)法接收,“很慢”的確很慢。

問(wèn)題分析
接下來(lái), 進(jìn)入信息采集,偵察分析階段。
客戶端抓包分析
在客戶端電腦,分別采集了很快和很慢以上操作的報(bào)文信息。結(jié)論如下。
我是很快客戶端的報(bào)文
從很快客戶端數(shù)據(jù)看,三步握手后,服務(wù)器更新了一下窗口,然后在0.05秒后返回了數(shù)據(jù)庫(kù)版本信息。繼而后續(xù)交換較快,整個(gè)連接持續(xù)1.2秒時(shí)長(zhǎng)。

???我是很慢客戶端的報(bào)文
下面看一下很慢同學(xué)的表現(xiàn)。
同樣,三步握手后,服務(wù)器更新了一下窗口信息。
接下來(lái)發(fā)生了一個(gè)異?,F(xiàn)象,服務(wù)器在22秒后,才發(fā)送過(guò)來(lái)版本信息。
整個(gè)連接時(shí)長(zhǎng)約27秒。

通過(guò)比較看到,很慢同學(xué)的確很慢。相同操作一個(gè)是1.2秒,一個(gè)是27秒。
服務(wù)器端抓包分析
從上述分析看到,很慢同學(xué)網(wǎng)絡(luò)連接建立時(shí)間很快,慢的主要原因是服務(wù)器響應(yīng)回來(lái)的信息時(shí)間太長(zhǎng)。
那么,站著服務(wù)器角度,比較分析一下,是否可能由于某些網(wǎng)絡(luò)因素導(dǎo)致了很慢的存在。
我是很快服務(wù)器的報(bào)文
在很快服務(wù)器上采集數(shù)據(jù),從下圖看到,第四個(gè)未攜帶數(shù)據(jù)的ack更新窗口包和第五個(gè)payload報(bào)文(數(shù)據(jù)庫(kù)版本信息)之間時(shí)間差約0.008秒。

??????我是很慢服務(wù)器的報(bào)文
同樣,在很慢服務(wù)器上,更新窗口包和數(shù)據(jù)庫(kù)版本包之間,時(shí)間差約22秒。的確很慢。

???? ??抓包分析結(jié)論
通過(guò)上述在客戶端和服務(wù)器端的對(duì)比分析看到,很慢同學(xué)慢的原因是,服務(wù)器本身發(fā)出報(bào)文的時(shí)間很長(zhǎng),約22秒。
因此,通過(guò)抓包分析的結(jié)論是,很慢的原因是服務(wù)器的原因,與網(wǎng)絡(luò)無(wú)關(guān)。

進(jìn)一步問(wèn)題分析
一般情況下,如果是網(wǎng)絡(luò)運(yùn)維部門(mén),問(wèn)題分析到這里,基本就可以停止了,然后理直氣壯的把球踢給系統(tǒng)部門(mén),哼,這問(wèn)題不是我的原因。
而網(wǎng)深科技的技術(shù)人員,為了表現(xiàn)出自己的真才實(shí)學(xué),帶著打破砂鍋問(wèn)到底精神,還想進(jìn)一步探索,為什么會(huì)有這種現(xiàn)象出現(xiàn)?
于是,有了進(jìn)一步問(wèn)題分析的環(huán)節(jié)。
細(xì)節(jié)決定成敗。
在前面服務(wù)器抓包分析中,從服務(wù)器本身抓包信息來(lái)看,服務(wù)器本身的IP地址并沒(méi)有顯示為數(shù)字格式。與mysql通訊的地址顯示如下。
很快:demo.cloudinside.com.cn.mysql
很慢:Dev1.NAPM.mysql
既然發(fā)現(xiàn)了2者的不同之處,先使用簡(jiǎn)單的ping命令,嘗試一下,看看返回結(jié)果。
從最簡(jiǎn)單的ping著手,以下是在2臺(tái)服務(wù)器內(nèi)部ping的結(jié)果。
我是很快服務(wù)器的ping
很快同學(xué)ping結(jié)果很快出現(xiàn),名稱解析失敗,結(jié)果是Unknown host,如下圖。

??????我是很慢服務(wù)器的ping
很慢同學(xué)ping結(jié)果很慢出現(xiàn),約20秒。結(jié)果是Host name lookup failure,主機(jī)名解析失敗。

??????從DNS配置信息入手,下面檢查2臺(tái)服務(wù)器DNS配置信息。
我是很快服務(wù)器的DNS
查看很快服務(wù)器DNS,顯示有多個(gè)namesever。

???? ?我是很慢服務(wù)器的DNS
但很慢服務(wù)器的DNS卻沒(méi)有配置,如下。


解決問(wèn)題
通過(guò)上述分析,已找到很快和很慢兩者的差異。下一步,嘗試解決問(wèn)題,通過(guò)給很慢配置DNS信息,再做一下ping操作,看看結(jié)果。
很慢服務(wù)器配置DNS
為很慢服務(wù)器配置DNS信息,內(nèi)容與很快服務(wù)器一樣。
如下圖。

????? 很慢服務(wù)器ping操作
接下來(lái),再操作一次ping命令。
發(fā)現(xiàn)很快返回信息,結(jié)果和很快服務(wù)器一樣,為Unknow host。

????? 問(wèn)題驗(yàn)證
通過(guò)上述分析和配置后,再次對(duì)很慢同學(xué)進(jìn)行mysql連接測(cè)試,速度颼颼的,它終于不再飽受埋怨了。
以下是很慢成為了很快的見(jiàn)證。
整個(gè)連接時(shí)長(zhǎng)1.13秒。

問(wèn)題解決。
