對于連接池,其實你多想想就明白了。
發表時間:2023-08-18 來源:明輝站整理相關軟件相關文章人氣:
[摘要]>是否每一個用戶連接都要占用一個Connection,such as 在pool中設定最大連接數為10,比如有10個用戶同時連接時就達到pool的最大連接了呢?如果訪問量很大的門戶站點,最大連...
>是否每一個用戶連接都要占用一個Connection,such as 在pool中設定最大連接數為10,比如有10個用戶同時連接時就達到pool的最大連接了呢?如果訪問量很大的門戶站點,最大連接數是不時應該設置很大呢?
::一般來說,連接池設置的時候,是允許設置最小連接數和最大連接數的。最小連接數是用于系統空閑的時候的,這樣可以降低database的壓力。當訪問增多,所需連接數超出最小連接數時,系統會再創建連接,并放入連接池。當訪問量很大時,最大連接數當然也會相應增大。但對于設計的好的系統來說,數據庫訪問時間占總處理時間的比例不應該很高。比如可以利用cache的技術,來降低對數據庫的訪問次數。
>
>當訪問連接超過了最大連接數時,怎么處理?
>繼續為用戶創建新連接,這時保存conn的vector的size()已經超過了最大連接數,如何對超過這部分的連接進行管理,繼續把他們加入到pool中?
::如果超出了最大連接數,一般的pool manager會重試數次,做等待。而往往等一會兒就會有空閑連接了。若仍未取到連接,可以有不同的處理方法,一般是返回一個null啦。這種情況應該記錄,這可以幫助你了解最大連接數應該是多少。
>
>連接超過過期的處理,比如在一個jsp頁面中調用一個poolbean中的conn,這個bean的scope設置為什么比較好?page嗎?
>是否需要在這個jsp頁面最后把這個conn歸還給pool呢?還是留著給用戶下一個頁面使用?
>
::用完的連接當然應該立即返回,要知道從連接池取一個連接是很快的,而若你一直霸占著連接,導至池中連接不夠,再創建連接的時間是很長的。一個connection永遠只應該在一個頁面甚至一次事務的范圍內使用。
>如果不把他歸還的給pool的話,這個conn會在多久后就超時失效呢?怎么處理這種失效的connection, Hashtable他并不知道這個conn是否已經失效呢,Hashtable只是保留這個object而已?
>
::這會根據你的設置來定的。若總是不返回連接,池中連接委有快會耗盡,后臺進程就會檢查空連接的情況,并加以釋放。
事實上在poolman中,是有一個線程一直在運行的,可以設置隔多少時間就重建連接。
Hashtable當然是什么都不知道的啦。它只是一個裝東西的房間而已。另外會有一個線程來做倉庫管理員的。