數(shù)據(jù)庫(kù)MySQL性能優(yōu)化

當(dāng)數(shù)據(jù)庫(kù)服務(wù)器和客戶(hù)端位于不同的主機(jī)時(shí),就需要建立網(wǎng)絡(luò)連接來(lái)進(jìn)行通信宿稀。客戶(hù)端必須使用數(shù)據(jù)庫(kù)連接來(lái)發(fā)送命令和接收應(yīng)答赖捌、數(shù)據(jù)祝沸。通過(guò)提供給客戶(hù)端數(shù)據(jù)庫(kù)的驅(qū)動(dòng)指定連接字符串后,客戶(hù)端就可以和數(shù)據(jù)庫(kù)建立連接了越庇≌秩瘢可以查閱程序語(yǔ)言手冊(cè)來(lái)獲知通過(guò)何種方式使用短連接、長(zhǎng)連接卤唉。

1. 短連接

短連接是指程序和數(shù)據(jù)庫(kù)通信時(shí)需要建立連接涩惑,執(zhí)行操作后,連接關(guān)閉桑驱。短連接簡(jiǎn)單來(lái)說(shuō)就是每一次操作數(shù)據(jù)庫(kù)竭恬,都要打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接,基本步驟是:連接→數(shù)據(jù)傳輸→關(guān)閉連接熬的。

在慢速網(wǎng)絡(luò)下使用短連接痊硕,連接的開(kāi)銷(xiāo)會(huì)很大;在生產(chǎn)繁忙的系統(tǒng)中押框,連接也可能會(huì)受到系統(tǒng)端口數(shù)的限制岔绸,如果要每秒建立幾千個(gè)連接,那么連接斷開(kāi)后橡伞,端口不會(huì)被馬上回收利用盒揉,必須經(jīng)歷一個(gè)“FIN”階段的等待,直到可被回收利用為止兑徘,這樣就可能會(huì)導(dǎo)致端口資源不夠用刚盈。在Linux上,可以通過(guò)調(diào)整/proc/sys/net/ipv4/ip_local_port_range來(lái)擴(kuò)大端口的使用范圍挂脑;調(diào)整/proc/sys/net/ipv4/tcp_fin_timeout來(lái)減少回收延期(如果想在應(yīng)用服務(wù)器上調(diào)整這個(gè)參數(shù)藕漱,一定要慎重!)最域。

另外一個(gè)辦法是主機(jī)使用多個(gè)IP地址谴分。端口數(shù)的限制其實(shí)是基于同一個(gè)IP:PORT的,如果主機(jī)增加了IP镀脂,MySQL就可以監(jiān)聽(tīng)多個(gè)IP地址牺蹄,客戶(hù)端也可以選擇連接某個(gè)IP:PORT,這樣就增加了端口資源薄翅。

2. 長(zhǎng)連接

長(zhǎng)連接是指程序之間的連接在建立之后沙兰,就一直打開(kāi)氓奈,被后續(xù)程序重用。使用長(zhǎng)連接的初衷是減少連接的開(kāi)銷(xiāo)鼎天,盡管MySQL的連接比其他數(shù)據(jù)庫(kù)要快得多舀奶。

以PHP程序?yàn)槔?dāng)收到一個(gè)永久連接的請(qǐng)求時(shí)斋射,PHP將檢查是否已經(jīng)存在一個(gè)(前面已經(jīng)開(kāi)啟了的)相同的永久連接育勺。如果存在,則將直接使用這個(gè)連接罗岖;如果不存在涧至,則建立一個(gè)新的連接。所謂“相同”的連接是指用相同的用戶(hù)名和密碼到相同主機(jī)的連接桑包。

從客戶(hù)端的角度來(lái)說(shuō)南蓬,使用長(zhǎng)連接有一個(gè)好處,可以不用每次創(chuàng)建新連接哑了,若客戶(hù)端對(duì)MySQL服務(wù)器的連接請(qǐng)求很頻繁赘方,永久連接將更加高效。對(duì)于高并發(fā)業(yè)務(wù)弱左,如果可能會(huì)碰到連接的沖擊窄陡,推薦使用長(zhǎng)連接或連接池。

從服務(wù)器的角度來(lái)看科贬,情況則略有不同泳梆,它可以節(jié)省創(chuàng)建連接的開(kāi)銷(xiāo)鳖悠,但維持連接也是需要內(nèi)存的榜掌。如果濫用長(zhǎng)連接的話,可能會(huì)使用過(guò)多的MySQL服務(wù)器連接〕俗郏現(xiàn)代的操作系統(tǒng)可以擁有幾千個(gè)MySQL連接憎账,但很有可能絕大部分都是睡眠(sleep)狀態(tài)的,這樣的工作方式不夠高效卡辰,而且連接占據(jù)內(nèi)存胞皱,也會(huì)導(dǎo)致內(nèi)存的浪費(fèi)。

對(duì)于擴(kuò)展性好的站點(diǎn)來(lái)說(shuō)九妈,其實(shí)大部分的訪問(wèn)并不需要連接數(shù)據(jù)庫(kù)反砌。如果用戶(hù)需要頻繁訪問(wèn)數(shù)據(jù)庫(kù),那么可能會(huì)在流量增大的時(shí)候產(chǎn)生性能問(wèn)題萌朱,此時(shí)長(zhǎng)短連接都是無(wú)法解決問(wèn)題的宴树,所以應(yīng)該進(jìn)行合理的設(shè)計(jì)和優(yōu)化來(lái)避免性能問(wèn)題。

如果客戶(hù)端和MySQL數(shù)據(jù)庫(kù)之間有連接池或Proxy代理晶疼,一般在客戶(hù)端推薦使用短連接酒贬。對(duì)于長(zhǎng)連接的使用一定要慎重,不可濫用。如果沒(méi)有每秒幾百献酗、上千的新連接請(qǐng)求傲醉,就不一定需要長(zhǎng)連接,也無(wú)法從長(zhǎng)連接中得到太多好處零如。在Java語(yǔ)言中躏将,由于有連接池,如果控制得當(dāng)考蕾,則不會(huì)對(duì)數(shù)據(jù)庫(kù)有較大的沖擊耸携,但PHP的長(zhǎng)連接可能導(dǎo)致數(shù)據(jù)庫(kù)的連接數(shù)超過(guò)限制,或者占用過(guò)多的內(nèi)存辕翰。

對(duì)此夺衍,研發(fā)工程師、系統(tǒng)運(yùn)維工程師喜命、DBA需要保持溝通沟沙,確定合理的連接策略,千萬(wàn)不要不假思索就采用長(zhǎng)連接壁榕。

3. 連接池

由于一些數(shù)據(jù)庫(kù)創(chuàng)建和銷(xiāo)毀連接的開(kāi)銷(xiāo)很大矛紫,或者相對(duì)于所執(zhí)行的具體數(shù)據(jù)操作,連接所耗的資源過(guò)多牌里,此時(shí)就可能需要添加連接池來(lái)改進(jìn)性能颊咬。

數(shù)據(jù)庫(kù)連接池是一些網(wǎng)絡(luò)代理服務(wù)或應(yīng)用服務(wù)器實(shí)現(xiàn)的特性,如J2EE服務(wù)器牡辽,它實(shí)現(xiàn)了一個(gè)持久連接的“池”喳篇,允許其他程序、客戶(hù)端來(lái)連接态辛,這個(gè)連接池將被所有連接的客戶(hù)端共享使用麸澜,連接池可以加速連接,也可以減少數(shù)據(jù)庫(kù)連接奏黑,降低數(shù)據(jù)庫(kù)服務(wù)器的負(fù)載炊邦。

4. 持久連接和連接池的區(qū)別

長(zhǎng)連接是一些驅(qū)動(dòng)、驅(qū)動(dòng)框架熟史、ORM工具的特性馁害,由驅(qū)動(dòng)來(lái)保持連接句柄的打開(kāi),以便后續(xù)的數(shù)據(jù)庫(kù)操作可以重用連接蹂匹,從而減少數(shù)據(jù)庫(kù)的連接開(kāi)銷(xiāo)碘菜。而連接池是應(yīng)用服務(wù)器的組件,它可以通過(guò)參數(shù)來(lái)配置連接數(shù)、連接檢測(cè)炉媒、連接的生命周期等踪区。

如果連接池或長(zhǎng)連接使用的連接數(shù)很多,有可能會(huì)超過(guò)數(shù)據(jù)庫(kù)實(shí)例的限制吊骤,那么就需要留意連接相關(guān)的設(shè)置了缎岗,比如連接池的最小、最大連接數(shù)設(shè)置白粉,以及php-fpm的進(jìn)程個(gè)數(shù)等传泊,否則程序?qū)⒉荒苌暾?qǐng)新的連接。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸭巴,一起剝皮案震驚了整個(gè)濱河市眷细,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹃祖,老刑警劉巖溪椎,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恬口,居然都是意外死亡校读,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)祖能,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)歉秫,“玉大人,你說(shuō)我怎么就攤上這事养铸⊙丬剑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵钞螟,是天一觀的道長(zhǎng)兔甘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)筛圆,這世上最難降的妖魔是什么裂明? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任椿浓,我火速辦了婚禮太援,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扳碍。我一直安慰自己提岔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布笋敞。 她就那樣靜靜地躺著碱蒙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赛惩,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天哀墓,我揣著相機(jī)與錄音,去河邊找鬼喷兼。 笑死篮绰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的季惯。 我是一名探鬼主播吠各,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼勉抓!你這毒婦竟也來(lái)了贾漏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤藕筋,失蹤者是張志新(化名)和其女友劉穎纵散,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體隐圾,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡困食,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翎承。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硕盹。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叨咖,靈堂內(nèi)的尸體忽然破棺而出瘩例,到底是詐尸還是另有隱情,我是刑警寧澤甸各,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布垛贤,位于F島的核電站,受9級(jí)特大地震影響趣倾,放射性物質(zhì)發(fā)生泄漏聘惦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一儒恋、第九天 我趴在偏房一處隱蔽的房頂上張望善绎。 院中可真熱鬧,春花似錦诫尽、人聲如沸禀酱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)剂跟。三九已至减途,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間曹洽,已是汗流浹背鳍置。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留送淆,地道東北人墓捻。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像坊夫,于是被迫代替她去往敵國(guó)和親砖第。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容