當前位置:首頁 » 數據倉庫 » 監控資料庫連接池
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

監控資料庫連接池

發布時間: 2023-06-05 07:16:45

1. 什麼是資料庫連接池

資料庫連接池,簡稱dbcp database connection pool

存在意義:
資料庫的連接是非常耗費系統資源的,一個應用通常都是需要與資料庫打交道,也就需要經常連接資料庫,這樣導致浪費大量系統資源;

連接池的原理就是:我事先創建好幾個資料庫連接放著,當我的系統需要操作資料庫時就從連接池裡直接拿連接,並將這個連接標記為 忙 ;用完後在放會池中,標記為 空閑;;;
當連接池裡的連接都在被使用,如果此時還要連接,連接池就會在創建連接放到池裡,,這些連接的數量,都是在配置文件里由你控制的

2. 資料庫連接池的連接池是什麼啊

資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
連接池基本的思想是在系統初始化的時候,將資料庫連接作為對象存儲在內存中,當用戶需要訪問資料庫時,並非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢後,用戶也並非將連接關閉,而是將連接放回連接池中,以供下一個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。同時,還可以通過設置連接池的參數來控制連接池中的初始連接數、連接的上下限數以及每個連接的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視資料庫連接的數量、使用情況等。

資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大資料庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。資料庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1. 最小連接數
是連接池一直保持的資料庫連接,所以如果應用程序對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;
2.最大連接數
是連接池能申請的最大連接數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
3).最小連接數與最大連接數相差太大
那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的資料庫連接。不過,這些大於最小連接數的資料庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時後被釋放。

3. 如何對資料庫的連接數量進行監控

其實資料庫、伺服器有異常,現在的系統都能做到發郵件、發簡訊的方式提供報警的。
LZ也可以藉助一些網路軟體 也可以用一些硬體設備來監控。

4. dbcp怎麼監控程序使用資料庫連接池

1.創建DbcpTest.java單元測試類

2.拷入所需jar包commons-dbcp-1.4.jar commons-pool-1.5.5.jar

3.創建如下代碼,注意我們創建的是BasicDataSource 對象

4.測試結果

5.DBCP連接池還有一些屬性可以設置,常用的如下:

6.以上算是一個DBCP的基本結構,

而常用的創建數據連接池是通過他的連接工廠類BasicDataSourceFactory 的createDataSource() 方法,它需要讀取一個配置文件

7.新建dbcp.properties文件

8.添加如下代碼,注意:配置文件中的鍵需要來自BasicDataSource的屬性

9.測試結果如下:

10.總結步驟:
步驟閱讀

5. 為什麼說Druid是「最好的資料庫連接池」

1、可以監控資料庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計sql的執行性能,這對於線上分析資料庫訪問性能有幫助。

2、資料庫密碼加密。直接把資料庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。

3、SQL執行日誌,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。

4、擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。

6. 什麼是Java web開發中資料庫的連接池技術,它的原理大致是什麼

什麼是連接池
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而不是再重新建立一個。
為什麼要使用連接池
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。 一個資料庫連接對象均對應一個物理資料庫連接,每次操作都打開一個物理連接,使用完都關閉連接,這樣造成系統的 性能低下。 資料庫連接池的解決方案是在應用程序啟動時建立足夠的資料庫連接,並講這些連接組成一個連接池(簡單說:在一個「池」里放了好多半成品的資料庫聯接對象),由應用程序動態地對池中的連接進行申請、使用和釋放。對於多於連接池中連接數的並發請求,應該在請求隊列中排隊等待。並且應用程序可以根據池中連接的使用率,動態增加或減少池中的連接數。 連接池技術盡可能多地重用了消耗內存地資源,大大節省了內存,提高了伺服器地服務效率,能夠支持更多的客戶服務。通過使用連接池,將大大提高程序運行效率,同時,我們可以通過其自身的管理機制來監視資料庫連接的數量、使用情況等。

7. spring連接池配置詳解

資料庫連接池概述

資料庫連接是一種關鍵的有限的昂貴的資源 這一點在多用戶的網頁應用程序中體現得尤為突出 對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性 影響到程序的性能指標 資料庫連接池正是針對這個問題提出來的

資料庫連接池負責分配 管理和釋放資料庫或碰毀連接 它允許應用程序重復使用一個現有的資料庫連接 而再不是重新建立一個 釋放空閑時間超過最大空閑時間的資料庫連吵返接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏 這項技術能明顯提高對資料庫操作的性能

資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中 這些資料庫連接的數量是由最小資料庫連接數來設定的 無論這些資料庫連接是否被使用 連接池都將一直保證至少擁有這么多的連接數量 連接池的最大資料庫連接數量限定了這個連接池能佔有的最大連接數 當應用程序向連接池請求的連接數超過最大連接數量時 這些請求將被加入到等待隊列中 資料庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素

) 最小連接數是連接池一直保持的資料庫連接 所以如果應用程序對資料庫連接的使用量不大 將會有大量的資料庫連接資源被浪費

) 最大連接數是連接池能申請的最大連接數 如果資料庫連接請求超過此數 後面的資料庫連接請求將被加入到等待隊列中 這會影響之後的資料庫操作

) 如果最小連接數與最大連接數相差太大 那麼最先的連接請求將會獲利 之後超過最小連接數量的連接請求等價於建立一個新的資料庫連接 不過 這些大於最小連接數的資料庫連接在使用完不會馬上被釋放 它將被放到連接池中等待重復使用或是空閑超時後被釋放

目前常用的連接池有 C P DBCP Proxool

網上的評價是

C P 比較耗費資源 效率方面可能要低一點

DBCP在實踐中存在BUG 在某些種情會產生很多空連接不能釋放 Hibernate 已經放棄了對其的支持

Proxool的負面評價較少 現在比較推薦它 而且它還提供即時監控連接池狀態的功能 便於發現連接泄漏的情況

配置如下

在spring配置文件中 一般在applicationContext xml中

<bean id= DataSource class= logicalcobwebs proxool ProxoolDataSource destroy method= shutdown >

<衫備property name= driver >

<value>oracle jdbc driver OracleDriver</value>

</property>

<property name= driverUrl >

<value>jdbc:oracle:thin:xxxx/xxxx@ XX: :server</value>

</property>

<property name= user >

<value>xxxx</value>

</property>

<property name= password >

<value>xxxx</value>

</property>

<property name= alias >

<value>server</value>

</property>

<property name= houseKeepingSleepTime >

<value> </value>

</property>

<property name= houseKeepingTestSql >

<value>select from al</value>

</property>

<property name= testBeforeUse >

<value>true</value>

</property>

<property name= testAfterUse >

<value>true</value>

</property>

<property name= prototypeCount >

<value> </value>

</property>

<property name= maximumConnectionCount >

<value> </value>

</property>

<property name= minimumConnectionCount >

<value> </value>

</property>

<property name= statistics >

<value> m m d</value>

</property>

<property name= statisticsLogLevel >

<value>ERROR</value>

</property>

<property name= trace >

<value>true</value>

</property>

<property name= verbose >

<value>false</value>

</property>

<property name= simultaneousBuildThrottle >

<value> </value>

</property>

<property name= maximumActiveTime >

<value> </value>

</property>

<property name= jmx >

<value>false</value>

</property>

</bean>

然後注入到sessionFactory中

<bean id= sessionFactory class= springframework orm hibernate LocalSessionFactoryBean >

<property name= dataSource ref= DataSource />

</bean>

屬性列表說明:

fatal sql exception: 它是一個逗號分割的信息片段 當一個SQL異常發生時 他的異常信息將與這個信息片段進行比較 如果在片段中存在 那麼這個異常將被認為是個致命錯誤(Fatal SQL Exception ) 這種情況下 資料庫連接將要被放棄 無論發生什麼 這個異常將會被重擲以提供給消費者 用戶最好自己配置一個不同的異常來拋出

fatal sql exception wrapper class:正如上面所說 你最好配置一個不同的異常來重擲 利用這個屬性 用戶可以包裝SQLException 使他變成另外一個異常 這個異常或者繼承QLException或者繼承字RuntimeException proxool自帶了 個實現: logicalcobwebs proxool FatalSQLException 和 logicalcobwebs proxool FatalRuntimeException 後者更合適

house keeping sleep time: house keeper 保留線程處於睡眠狀態的最長時間 house keeper 的職責就是檢查各個連接的狀態 並判斷是否需要銷毀或者創建

house keeping test sql: 如果發現了空閑的資料庫連接 house keeper 將會用這個語句來測試 這個語句最好非常快的被執行 如果沒有定義 測試過程將會被忽略

injectable connection interface: 允許proxool實現被代理的connection對象的方法

injectable statement interface: 允許proxool實現被代理的Statement 對象方法

injectable prepared statement interface: 允許proxool實現被代理的PreparedStatement 對象方法

injectable callable statement interface: 允許proxool實現被代理的CallableStatement 對象方法

jmx: 如果屬性為true 就會注冊一個消息Bean到jms服務 消息Bean對象名: Proxool:type=Pool name=<alias> 默認值為false

jmx agent id: 一個逗號分隔的JMX代理列表(如使用MBeanServerFactory findMBeanServer(String agentId)注冊的連接池 )這個屬性是僅當 jmx 屬性設置為 true 才有效 所有注冊jmx伺服器使用這個屬性是不確定的

jndi name: 數據源的名稱

maximum active time: 如果housekeeper 檢測到某個線程的活動時間大於這個數值 它將會殺掉這個線程 所以確認一下你的伺服器的帶寬 然後定一個合適的值 默認是 分鍾

maximum connection count: 最大的資料庫連接數

maximum connection lifetime: 一個線程的最大壽命

minimum connection count: 最小的資料庫連接數

overload without refusal lifetime: 這可以幫助我們確定連接池的狀態 如果我們已經拒絕了一個連接在這個設定值(毫秒) 然後被認為是超載 默認為 秒

prototype count: 連接池中可用的連接數量 如果當前的連接池中的連接少於這個數值 新的連接將被建立(假設沒有超過最大可用數) 例如 我們有 個活動連接 個可用連接 而我們的prototype count是 那麼資料庫連接池將試圖建立另外 個連接 這和 minimum connection count不同 minimum connection count把活動的連接也計算在內 prototype count 是spare connections 的數量

recently started threshold: 這可以幫助我們確定連接池的狀態 連接數少還是多或超載 只要至少有一個連接已開始在此值(毫秒)內 或者有一些多餘的可用連接 那麼我們假設連接池是開啟的 默認為 秒

simultaneous build throttle: 這是我們可一次建立的最大連接數 那就是新增的連接請求 但還沒有可供使用的連接 由於連接可以使用多線程 在有限的時間之間建立聯系從而帶來可用連接 但是我們需要通過一些方式確認一些線程並不是立即響應連接請求的 默認是

statistics: 連接池使用狀況統計 參數 s m d

statistics log level: 日誌統計跟蹤類型 參數 ERROR 或 INFO

test before use: 如果為true 在每個連接被測試前都會服務這個連接 如果一個連接失敗 那麼將被丟棄 另一個連接將會被處理 如果所有連接都失敗 一個新的連接將會被建立 否則將會拋出一個SQLException異常

test after use: 如果為true 在每個連接被測試後都會服務這個連接 使其回到連接池中 如果連接失敗 那麼將被廢棄

trace: 如果為true 那麼每個被執行的SQL語句將會在執行期被log記錄(DEBUG LEVEL) 你也可以注冊一個ConnectionListener (參看ProxoolFacade)得到這些信息

lishixin/Article/program/Java/ky/201311/28572