網站數據庫連接池作用(yòng)及配置

2019-09-11

網站數據庫連接池作用(yòng)及配置;
連接池用(yòng)于創建和(hé)管理(lǐ)數據庫連接的(de)緩沖池技術,緩沖池中的(de)連接可(kě)以被任何需要他(tā)們的(de)線程使用(yòng)。當一個(gè)線程需要用(yòng)JDBC對(duì)一個(gè)數據庫操作時(shí),将從池中請求一個(gè)連接。當這(zhè)個(gè)連接使用(yòng)完畢後,将返回到連接池中,等待爲其他(tā)的(de)線程服務。

3a79fce373b638830bbdbef349e5230b.jpg

 連接池的(de)主要優點有以下(xià)三個(gè)方面。

  1、減少連接創建時(shí)間。連接池中的(de)連接是已準備好的(de)、可(kě)重複使用(yòng)的(de),獲取後可(kě)以直接訪問數據庫,因此減少了(le)連接創建的(de)次數和(hé)時(shí)間。

  2、簡化(huà)的(de)編程模式。當使用(yòng)連接池時(shí),每一個(gè)單獨的(de)線程能夠像創建一個(gè)自己的(de)JDBC連接一樣操作,允許用(yòng)戶直接使用(yòng)JDBC編程技術。
  3、控制資源的(de)使用(yòng)。如果不使用(yòng)連接池,每次訪問數據庫都需要創建一個(gè)連接,這(zhè)樣系統的(de)穩定性受系統連接需求影(yǐng)響很大(dà),很容易産生資源浪費和(hé)高(gāo)負載異常。連接池能夠使性能最大(dà)化(huà),将資源利用(yòng)控制在一定的(de)水(shuǐ)平之下(xià)。連接池能控制池中的(de)連接數量,增強了(le)系統在大(dà)量用(yòng)戶應用(yòng)時(shí)的(de)穩定性。

 下(xià)面,簡單的(de)闡述下(xià)連接池的(de)工作原理(lǐ)。

  連接池技術的(de)核心思想是連接複用(yòng),通(tōng)過建立一個(gè)數據庫連接池以及一套連接使用(yòng)、分(fēn)配和(hé)管理(lǐ)策略,使得(de)該連接池中的(de)連接可(kě)以得(de)到高(gāo)效、安全的(de)複用(yòng),避免了(le)數據庫連接頻(pín)繁建立、關閉的(de)開銷。
連接池的(de)工作原理(lǐ)主要由三部分(fēn)組成,分(fēn)别爲連接池的(de)建立、連接池中連接的(de)使用(yòng)管理(lǐ)、連接池的(de)關閉。

1、連接池的(de)建立。一般在系統初始化(huà)時(shí),連接池會根據系統配置建立,并在池中創建了(le)幾個(gè)連接對(duì)象,以便使用(yòng)時(shí)能從連接池中獲取。連接池中的(de)連接不能随意創建和(hé)關閉,這(zhè)樣避免了(le)連接随意建立和(hé)關閉造成的(de)系統開銷。Java中提供了(le)很多(duō)容器類可(kě)以方便的(de)構建連接池,例如Vector、Stack等。

2、連接池的(de)管理(lǐ)。連接池管理(lǐ)策略是連接池機制的(de)核心,連接池内連接的(de)分(fēn)配和(hé)釋放對(duì)系統的(de)性能有很大(dà)的(de)影(yǐng)響。
其管理(lǐ)策略是:當客戶請求數據庫連接時(shí),首先查看連接池中是否有空閑連接,如果存在空閑連接,則将連接分(fēn)配給客戶使用(yòng);如果沒有空閑連接,則查看當前所開的(de)連接數是否已經達到最大(dà)連接數,如果沒達到就重新創建一個(gè)連接給請求的(de)客戶;如果達到就按設定的(de)最大(dà)等待時(shí)間進行等待,如果超出最大(dà)等待時(shí)間,則抛出異常給客戶。
 當客戶釋放數據庫連接時(shí),先判斷該連接的(de)引用(yòng)次數是否超過了(le)規定值,如果超過就從連接池中删除該連接,否則保留爲其他(tā)客戶服務。
該策略保證了(le)數據庫連接的(de)有效複用(yòng),避免頻(pín)繁的(de)建立、釋放連接所帶來(lái)的(de)系統資源開銷。

3、連接池的(de)關閉。當應用(yòng)程序退出時(shí),關閉連接池中所有的(de)連接,釋放連接池相關的(de)資源,該過程正好與創建相反。

140528263.png

數據庫連接池的(de)作用(yòng)以及配置;
連接池是創建和(hé)管理(lǐ)多(duō)個(gè)連接的(de)一種技術,這(zhè)些連接可(kě)被需要使用(yòng)它們的(de)任何線程使用(yòng)。連接池技術基于下(xià)述事實:對(duì)于大(dà)多(duō)數應用(yòng)程序,當它們正在處理(lǐ)通(tōng)常需要數毫秒完成的(de)事務時(shí),僅需要能夠訪問JDBC連接的(de)1個(gè)線程。未處理(lǐ)事務時(shí),連接處于閑置狀态。使用(yòng)連接池,允許其他(tā)線程使用(yòng)閑置連接來(lái)執行有用(yòng)的(de)任務。
事實上,當某一線程需要用(yòng)JDBC在MySQL或其他(tā)數據庫上執行操作時(shí),需要用(yòng)到由連接池提供的(de)連接。使用(yòng)連接完成線程後,線程會将連接返回給連接池,以便該連接能夠被其他(tā)需要使用(yòng)連接的(de)線程使用(yòng)。從連接池“借出”連接時(shí),該連接僅供請求它的(de)線程使用(yòng)。從編程觀點看,其效果等同于每次需要JDBC連接時(shí)調用(yòng)DriverManager.getConnection(),但是,采用(yòng)連接池技術,可(kě)通(tōng)過使用(yòng)新的(de)或已有的(de)連接結束線程。連接池技術能顯著增加Java應用(yòng)程序的(de)性能,同時(shí)還(hái)能降低資源使用(yòng)率。

連接池技術的(de)主要優點包括:
(1) 縮短了(le)連接創建時(shí)間

創建新的(de)JDBC連接會導緻聯網操作和(hé)一定的(de)JDBC驅動開銷,如果這(zhè)類連接是“循環”使用(yòng)的(de),使用(yòng)該方式,可(kě)避免這(zhè)類不利因素。
(2)簡化(huà)的(de)編程模型
使用(yòng)連接池技術時(shí),每個(gè)單獨線程能夠像創建了(le)自己的(de)JDBC連接那樣進行操作,從而允許使用(yòng)直接的(de)JDBC編程技術。
(3)受控的(de)資源使用(yòng)
如果不使用(yòng)連接池技術,而是在每次需要時(shí)爲線程創建新的(de)連接,那麽應用(yòng)程序的(de)資源使用(yòng)将十分(fēn)浪費,而且在負載較重的(de)情況下(xià)會導緻無法預期的(de)結果。
注意,與數據庫的(de)每個(gè)連接均會在客戶端和(hé)服務器端造成一定的(de)開銷(CPU、關聯轉換等)。
每個(gè)連接均會對(duì)應用(yòng)程序和(hé)數據庫服務器的(de)可(kě)用(yòng)資源帶來(lái)一定的(de)限制。無論連接是否執行任何有用(yòng)的(de)任務,仍将使用(yòng)這(zhè)些資源中的(de)相當一部分(fēn)。
連接池能夠使性能最大(dà)化(huà),同時(shí)還(hái)能将資源利用(yòng)控制在一定的(de)水(shuǐ)平之下(xià),如果超過該水(shuǐ)平,應用(yòng)程序将崩潰而不僅僅是變慢(màn)。幸運的(de)是,Sun公司通(tōng)過JDBC-2.0“可(kě)選”接口,完成了(le)JDBC中連接池概念的(de)标準化(huà)實施,所有主要應用(yòng)服務器均實施了(le)能夠與MySQL Connector/J一起良好工作的(de)
這(zhè)類API。

通(tōng)常,你可(kě)以在應用(yòng)服務器的(de)配置文件中配置連接池,并通(tōng)過Java命名和(hé)目錄接口(JNDI)訪問它。
使用(yòng)連接池時(shí)需要牢記的(de)最重要事項是,無論在代碼中出現了(le)什(shén)麽(異常、控制流等),連接以及由連接創建的(de)任何部分(fēn)(語句、結果集等)均應被關閉,以便能再次使用(yòng)它們。如不然,它們将糾纏在一起,在最好的(de)情況下(xià),意味著(zhe)它們所代表的(de)數據庫服務器資源(緩沖區(qū)、鎖定、套接字等)可(kě)能會捆綁一段時(shí)間,在最壞的(de)情況下(xià),可(kě)能會導緻永久捆綁。
連接池的(de)最佳大(dà)小是什(shén)麽?
取決于具體情況。盡管最佳大(dà)小取決與預期的(de)負載和(hé)平均的(de)數據庫事務時(shí)間,最佳的(de)連接池大(dà)小小于你的(de)預期。
例如,如果使用(yòng)的(de)是Sun公司的(de)Java Petstore Blueprint應用(yòng)程序,對(duì)于包含15~20個(gè)連接的(de)連接池,使用(yòng)MySQL和(hé)Tomcat,在可(kě)接受的(de)相應時(shí)間下(xià),可(kě)服務于中等程度的(de)負載(600個(gè)并發用(yòng)戶)。
要想确定用(yòng)于應用(yòng)程序的(de)連接池大(dà)小,應使用(yòng)諸如Apache Jmeter或The Grinder等工具創建負載測試腳本,并對(duì)應用(yòng)程序進行負載測試。确定出
發點的(de)一種簡單方法是,将連接池的(de)最大(dà)連接數配置爲“無限”,運行負載測試,并測量最大(dà)的(de)并發連接數。随後,應進行反向操作,确定出使應
用(yòng)程序具有最佳性能的(de)連接池的(de)最小和(hé)最大(dà)值。

連接池與數據源區(qū)别?
數據庫連接池是在應用(yòng)程序啓動時(shí)建立足夠的(de)數據庫連接,并将這(zhè)些連接組
成一個(gè)連接池,由應用(yòng)程序動态地對(duì)池中的(de)連接進行申請、使用(yòng)和(hé)釋放。
對(duì)于多(duō)于連接池中連接數的(de)并發請求,應在請求隊列中排隊等待。并且應用(yòng)程序可(kě)根據池中連接的(de)使用(yòng)率,動态增加或減少池中的(de)連接數。當關閉連接操作時(shí),連接并不真正的(de)關閉,而是返回到連接池中作爲空閑連接在後面繼續使用(yòng),連接池技術解決了(le)數據庫連接頻(pín)繁打開關閉所帶來(lái)的(de)性能問題。
有了(le)連接池,我們沒必要直接找數據源打交道了(le),連接池在你的(de)程序所在的(de)機器内存,數據源不一定,并且數據源和(hé)連接池會保持一定數量
的(de)連接,這(zhè)樣我們訪問數據庫的(de)時(shí)候就不需要找數據源要連接,直接在本地内存中取得(de)連接,可(kě)以提高(gāo)程序的(de)性能。連結池的(de)存在是爲了(le)效率,因爲實例化(huà)一個(gè)連接很耗費資源,而連接又有可(kě)重用(yòng)的(de)特征,所以可(kě)以把一定數量的(de)連接放在連接池裏面以提高(gāo)效率。

責任編輯:中山網站建設
 【網訊網絡】國家高(gāo)新技術企業》十年專注軟件開發,網站建設,網頁設計,APP開發,小程序,微信公衆号開發,定制各類企業管理(lǐ)軟件(OA、CRM、ERP、訂單管理(lǐ)系統、進銷存管理(lǐ)軟件等)!服務熱(rè)線:0760-88610046、13924923903,http://www.wansion.net

您的(de)項目需求咨詢熱(rè)線:0760-88610046(國家高(gāo)新技術企業)

*請認真填寫需求,我們會在24小時(shí)内與您取得(de)聯系。