本篇內容介紹了“如何理解MySQL性能優(yōu)化:長連接、短連接、連接池”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
江安ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
當數(shù)據(jù)庫服務器和客戶端位于不同的主機時,就需要建立網(wǎng)絡連接來進行通信??蛻舳吮仨毷褂脭?shù)據(jù)庫連接來發(fā)送命令和接收應答、數(shù)據(jù)。通過提供給客戶端數(shù)據(jù)庫的驅動指定連接字符串后,客戶端就可以和數(shù)據(jù)庫建立連接了。可以查閱程序語言手冊來獲知通過何種方式使用短連接、長連接。
短連接是指程序和數(shù)據(jù)庫通信時需要建立連接,執(zhí)行操作后,連接關閉。短連接簡單來說就是每一次操作數(shù)據(jù)庫,都要打開和關閉數(shù)據(jù)庫連接,基本步驟是:連接→數(shù)據(jù)傳輸→關閉連接。
在慢速網(wǎng)絡下使用短連接,連接的開銷會很大;在生產繁忙的系統(tǒng)中,連接也可能會受到系統(tǒng)端口數(shù)的限制,如果要每秒建立幾千個連接,那么連接斷開后,端口不會被馬上回收利用,必須經(jīng)歷一個“FIN”階段的等待,直到可被回收利用為止,這樣就可能會導致端口資源不夠用。在Linux上,可以通過調整
/proc/sys/net/ipv4/ip_local_port_range來擴大端口的使用范圍;調整
/proc/sys/net/ipv4/tcp_fin_timeout來減少回收延期(如果想在應用服務器上調整這個參數(shù),一定要慎重!)。
另外一個辦法是主機使用多個IP地址。端口數(shù)的限制其實是基于同一個IP:PORT的,如果主機增加了IP,MySQL就可以監(jiān)聽多個IP地址,客戶端也可以選擇連接某個IP:PORT,這樣就增加了端口資源。
長連接是指程序之間的連接在建立之后,就一直打開,被后續(xù)程序重用。使用長連接的初衷是減少連接的開銷,盡管MySQL的連接比其他數(shù)據(jù)庫要快得多。
以PHP程序為例,當收到一個永久連接的請求時,PHP將檢查是否已經(jīng)存在一個(前面已經(jīng)開啟了的)相同的永久連接。如果存在,則將直接使用這個連接;如果不存在,則建立一個新的連接。所謂“相同”的連接是指用相同的用戶名和密碼到相同主機的連接。
從客戶端的角度來說,使用長連接有一個好處,可以不用每次創(chuàng)建新連接,若客戶端對MySQL服務器的連接請求很頻繁,永久連接將更加高效。對于高并發(fā)業(yè)務,如果可能會碰到連接的沖擊,推薦使用長連接或連接池。
從服務器的角度來看,情況則略有不同,它可以節(jié)省創(chuàng)建連接的開銷,但維持連接也是需要內存的。如果濫用長連接的話,可能會使用過多的MySQL服務器連接。現(xiàn)代的操作系統(tǒng)可以擁有幾千個MySQL連接,但很有可能絕大部分都是睡眠(sleep)狀態(tài)的,這樣的工作方式不夠高效,而且連接占據(jù)內存,也會導致內存的浪費。
對于擴展性好的站點來說,其實大部分的訪問并不需要連接數(shù)據(jù)庫。如果用戶需要頻繁訪問數(shù)據(jù)庫,那么可能會在流量增大的時候產生性能問題,此時長短連接都是無法解決問題的,所以應該進行合理的設計和優(yōu)化來避免性能問題。
如果客戶端和MySQL數(shù)據(jù)庫之間有連接池或Proxy代理,一般在客戶端推薦使用短連接。對于長連接的使用一定要慎重,不可濫用。如果沒有每秒幾百、上千的新連接請求,就不一定需要長連接,也無法從長連接中得到太多好處。在Java語言中,由于有連接池,如果控制得當,則不會對數(shù)據(jù)庫有較大的沖擊,但PHP的長連接可能導致數(shù)據(jù)庫的連接數(shù)超過限制,或者占用過多的內存。
對此,研發(fā)工程師、系統(tǒng)運維工程師、DBA需要保持溝通,確定合理的連接策略,千萬不要不假思索就采用長連接。
由于一些數(shù)據(jù)庫創(chuàng)建和銷毀連接的開銷很大,或者相對于所執(zhí)行的具體數(shù)據(jù)操作,連接所耗的資源過多,此時就可能需要添加連接池來改進性能。
數(shù)據(jù)庫連接池是一些網(wǎng)絡代理服務或應用服務器實現(xiàn)的特性,如J2EE服務器,它實現(xiàn)了一個持久連接的“池”,允許其他程序、客戶端來連接,這個連接池將被所有連接的客戶端共享使用,連接池可以加速連接,也可以減少數(shù)據(jù)庫連接,降低數(shù)據(jù)庫服務器的負載。
長連接是一些驅動、驅動框架、ORM工具的特性,由驅動來保持連接句柄的打開,以便后續(xù)的數(shù)據(jù)庫操作可以重用連接,從而減少數(shù)據(jù)庫的連接開銷。而連接池是應用服務器的組件,它可以通過參數(shù)來配置連接數(shù)、連接檢測、連接的生命周期等。
如果連接池或長連接使用的連接數(shù)很多,有可能會超過數(shù)據(jù)庫實例的限制,那么就需要留意連接相關的設置了,比如連接池的最小、最大連接數(shù)設置,以及php-fpm的進程個數(shù)等,否則程序將不能申請新的連接。
“如何理解MySQL性能優(yōu)化:長連接、短連接、連接池”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質量的實用文章!
網(wǎng)頁題目:如何理解MySQL性能優(yōu)化:長連接、短連接、連接池
標題URL:http://jinyejixie.com/article42/jpocec.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站導航、面包屑導航、服務器托管、微信公眾號、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)