關於資料庫連線池的一些思考

2021-08-31 13:58:11 字數 789 閱讀 8460

我們都知道資料庫連線池的作用,初始時它首先向資料庫申請多個連線,然後由它負責分配,管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,而不是重新建立乙個。

雖然知道了連線池的作用,但是更重要的一點是我們該如何配置,使得連線池的效能最優。而這裡最為顯著的問題就是如何設定連線池的連線數。

假設某**併發訪問量為80000+,你覺得該設定多少合適呢?

10000嗎?1000?100?no,no,no,*****

實際上連線數的設定和使用者的併發量完全沒有關係,它僅僅依賴於如下幾個方面的影響:伺服器本身cpu的核數》資料庫讀寫磁碟的效能》網路遲延

下面我們從作業系統和硬體的層面來進行理解:

即使是單核cpu的計算機也能「同時」執行數百個執行緒。但我們都[應該]知道這只不過是作業系統用時間分片玩的乙個小把戲。一顆cpu核心同一時刻只能執行乙個執行緒,然後作業系統切換上下文,核心開始執行另乙個執行緒的**,以此類推。給定一顆cpu核心,其順序執行a和b永遠比通過時間分片「同時」執行a和b要快,這是一條電腦科學的基本法則。一旦執行緒的數量超過了cpu核心的數量,再增加執行緒數系統就只會更慢,而不是更快。

下面給出乙個postgresql提供的經驗計算公式:連線數 = cpu核心數 * 2+ 有效磁碟數

這一公式其實不僅適用於資料庫連線池的計算,大部分涉及計算和i/o的程式,執行緒數的設定都可以參考這一公式。

實際上當併發量很高時,我們只需要維護乙個較小的連線池,和乙個充滿了等待連線的執行緒的佇列。

關於資料庫連線池

連線池一般比直接連線更有優越性因為它提高了效能的同時還儲存了寶貴的資源。開啟資料庫連線時cpu和網路的重要任務因此,在整個應用程式的使用過程當中重複的開啟直接連線將導致效能的下降。而池連線只在伺服器啟動時開啟一次,從而消除了這種效能問題。另外,因為連線只用於很短的時間,所以,連線可以被有效共享,而且...

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

資料庫連線池

實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...