連線mysql使用長連線還是短連線的選擇

2021-08-14 16:32:50 字數 1817 閱讀 9388

近期在做db審計的時候發現乙個問題,決定寫出來讓大家參考參考。本篇文章主要是講述開發在使用資料庫的時候該如何規範的使用何種連線。

概念解釋:

長連線:長連線是相對於短連線來說的。長連線指在乙個連線上可以連續傳送多個

資料報,在連線保持期間,如果沒有資料報傳送,需要雙方發鏈路檢測包。mysql的長連線如果長期閒置,mysql會8小時後(預設時間)主動斷開該連線。

短連線:是指通訊雙方有資料互動時,就建立乙個連線,資料傳送完成後,則斷開此連線,即每次連線只完成一項業務的傳送。

連線的區別:

使用長連線,短連線各有優勢,也各有缺點。我們看看長短連線,系統是怎麼做的?

1、短連線:

客戶端連線--建立socket認證連線--維護連線--資料傳輸--關閉連線

2、長連線

客戶端連線--建立socket認證連線--維護連線--資料傳輸--維護連線--資料傳輸.....-關閉連線

2種連線方式都需要系統開銷來維護連線,哪種連線最合適並沒有準確的說法,主要還是看你客戶端的行為。

長短連線的例子

在這裡主要講乙個該使用長連線的情況下使用了短連線,本文不會從系統效能負載以及開銷去分析,重點是針對mysql的連線做審計來判斷。

某業務在審計時候發現連線數一直在直線上公升:

mysql> select count(1) from db_monitor.accesslog;

+----------+

| count(1) |

+----------+

|    16117 |

+----------+

1 row in set (0.01 sec)

mysql> select count(1) from db_monitor.accesslog;

+----------+

| count(1) |

+----------+

|    23768|

+----------+

1 row in set (0.01 sec)

...截一段連線的審計圖給看看:

檢視mysql的程序卻只有2-3個連線

但是每個連線幾乎不到1s鐘就關閉了,很典型的頻繁連線進行資料通訊。這種業務就特別的消耗系統資源和mysql的資源。這種情況業務應該使用長連線來使用資料庫服務。

更改為長連線後,審計連線使用者數就馬上正常了,保持在一定的數值。

個人總結:

長連線主要用於在少數客戶端與服務端的頻繁通訊,因為這時候如果用短連線頻繁通訊常會發生socket出錯,並且頻繁建立socket連線也是對資源的浪費。

但是對於服務端來說,長連線也會耗費一定的資源,需要專門的執行緒(unix下可以用程序管理)來負責維護連線狀態。

總之,長連線和短連線的選擇要視情況而定。

1、在頻繁的與資料庫服務通訊,並且又非高併發的情況下,使用長連線更合適;

2、太多持久連線,大部分是sleep狀態的,或者系統是高併發的,使用短連線更合適。

長連線 短連線

長連線在web中的運用 如果沒有客戶端大量的訪問,可以採用html5的serversocket長連線 例如hudson 執行時會實時的返回當前執行的結果 vmstat 監控 b 長連線 資料庫連線 短連線 http連線 b b 一 長連線與短連線 b 長連線 client方與server方先建立連線...

長連線 短連線

http協議的長連線和短連線,實質上是tcp協議的長連線和短連線。http屬於應用層協議,在傳輸層使用tcp協議,在網路層使用ip協議。ip協議主要解決網路路由和定址問題,tcp協議主要解決如何在ip層之上可靠的傳遞資料報。http是乙個無狀態的面向連線的協議,無狀態不代表http不能保持tcp連線...

長連線 短連線

參考鏈結 怎麼理解tcp的面向連線和udp的無連線 不面向連線 長連線的幾種實現方式 關於長連線和短連線的理解及使用場景 連線其實只是雙方都維護了乙個狀態,通過每一次通訊來維護狀態的變更 在 http 1.0 中 在 http 1.1 中則 可以在一次連線中處理多個請求,並且多個請求可以重疊進行,不...