日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MySQL连接处理方式及最佳并发连接数设置

發布時間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 MySQL连接处理方式及最佳并发连接数设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL連接處理方式及最佳并發連接數設置

mysql是單進程,多線程的架構,通過創建多個線程來服務不同的用戶連接,通常情況下,隨著用戶連接數的增加,mysql內部用于處理用戶連接的線程也會同步的增長,在一定范圍內,增加用戶的并發連接,對提高系統的吞吐量有一定的幫助,然而用戶并發連接數超過某個閾值,Mysql的性能反而會降低.

mysql連接處理方式

Mysql內部處理用戶連接的方式嚴格來說有三種

單線程處理所有的用戶連接,一般在調試時使用

多線程處理用戶連接,一個線程對應一個用戶連接,也是Mysql默認連接處理方式

線程池處理用戶連接,一個線程對應多個用戶連接,比如MysqlPercona發行版提供了線程池功能

線程緩存

Mysql默認的連接處理方式,即一個線程對應一個用戶連接,在某些場景下,有一些性能問題,比如大量的短連接,短時間內大量的連接創建和銷毀,意味著Mysql內部必須要有同樣數量的線程創建和銷毀,線程的創建,銷毀以及線程上下文切換,會帶來嚴重的性能消耗,因此Mysql開發者提出了線程緩存的概念,緩存一定數量的線程來服務用戶連接,用戶連接到來,先檢查線程緩存中有沒有可用的線程,如果沒有再去創建,如果有,直接使用線程緩存中的線程,用戶連接斷開時,線程放回線程緩存中,以便后來的用戶連接重用,減少線程頻繁創建和銷毀

代表用戶連接的數據結構THD

用戶連接在MySQL實現中由一個數據結構THD表示,THD在連接建立時被創建,在連接斷開時銷毀,用戶連接與THD的關系永遠是一對一的關系,THD不能跨連接重用,THD結構大概有10K大小,它是一個C++類,在 sql_class.h文件中定義。THD用于記錄各種執行狀態,在SQL語句執行的過程中,THD會根據實際情況申請內存使用,尤其對于復雜的SQL,THD占用的內存大小會不斷增長,平均下來,一個連接大概10M左右。

設置合適的連接數

MySQL能夠處理的最大連接數量由參數 max_connections 決定,但是如何設置 max_connections 的值才是最合適的呢?一般來說需要根據具體的機器配置和業務要求。通常我們需要MySQL能夠并發處理的用戶連接數越多越好,并發用戶數增加的情況下,SQL的執行響應時間不能增長太多,同時內存占用也不能太高,因此需要在并發連接數、響應時間、內存占用等方面做出平衡,并且要能滿足業務的對SQL執行的吞吐量和響應時間要求。

如何確定MySQL的最大負載和最大并發度?通過壓測,不斷增加客戶端并發數。比如起始客戶端并發數為2,依次遞增到4,8,16,32等等,每次遞增,在沒有達到性能瓶頸前,壓測的TPS會隨著客戶端并發數的增加而增大,響應時間通常會隨著客戶端并發數的增加而增加,但是增加的幅度并不明顯。當客戶端并發數達到某個閾值時,比如128,或者256甚至更大時,TPS不再增長,反而出現下降,響應時間則會出現跳躍式的增長,此時則可以認為MySQL已經達到了當前配置的最大性能。不同的硬件配置下,MySQL最大性能的并發連接數也不相同,需要根據具體的環境測試,一般的原則是最大并發連接數等于CPU邏輯核心數的4倍。

此外,如果業務對響應時間有一定的要求,比如業務要求響應時間50ms,在低于50ms的響應時間之內,TPS越高越好。這時就需要通過壓測來確定最合適的并發連接數,在響應時間不超過50ms的前提下,不斷提高并發數,獲取最佳性能。然而不同的機器配置,不同的業務類型,可能會有不同的結果。

下圖展示了某個測試環境下,MySQL最佳性能的并發數,在并發128之前,隨著并發數的增加,TPS也相應增加,響應時間平穩,然而超過128,可以看到TPS出現下降,并且響應時間增加明顯。

簡化理解

有三種連接方式
1.單線程模式,處理所有的用戶連接
2.多線程處理,一個線程對應一個用戶(mysql默認的方式)
3.線程池處理用戶連接,一個線程池對應多個用戶連接
線程緩存

  如果短時間創建和銷毀線程(大量的短連接),會存在性能上的問題,mysql中有線程緩存的概念,緩存一定的線程來服務用戶的連接,用戶來之前,先檢查緩存線程中是否有可以使用的線程,如果沒有就再去創建,如果有,直接使用線程緩存中的線程,用戶連接斷開后,線程放回到線程緩存中,以便后來的用戶連接重用,減少了頻繁創建和銷毀

代表用戶數據結構THD

每個用戶連接在mysql中都是右一個數據結構THD表示,THD在連接建立時被創建,在連接斷開時銷毀,
用戶連接和THD是一對一的關系,THD不能跨連接重用,THD結構大約有10k左右,它是一個C++類,
THD用戶記錄各種執行狀態,在sql語句執行過程中,THD會根據實際情況申請內存使用,尤其對于復雜的sql,THD占用的內存大小會不斷增長,平均下來一個鏈接大約10M左右

清風徐來.水波不興

總結

以上是生活随笔為你收集整理的MySQL连接处理方式及最佳并发连接数设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。