簡體   English   中英

Hibernate C3P0池機制

[英]Hibernate C3P0 pool mechanism

我在Web應用程序中使用了Hibernate。

並使用了C3P0連接池機制。

我的配置如下所示,要檢查其是否正常工作,我將max_size和min_size設置為0。理想情況下,我認為如果它為0,則它​​不應給我任何連接,並且應該引發錯誤/異常。 但是它沒有做任何這樣的事情。 它正常工作。

因此,如何確定給定的C3P0相關配置是完美的配置?

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/reg</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="connection.autocommit">false</property> 

<!-- Connection pooling configuration -->
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">1</property> <!-- seconds --> 
<property name="c3p0.max_size">0</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">0</property> 
<property name="c3p0.timeout">200</property> <!-- seconds --> 


<property name="hibernate.show_sql">false</property>

這取決於您正在構建的應用程序。

使用數據庫連接池的原因如下:

  • 獲取數據庫連接是一項昂貴的操作。
  • 您的資源有限,因此一次只能打開有限數量的數據庫連接。
  • 並非服務器正在處理的所有用戶請求都在執行數據庫操作,因此您可以在請求之間重用數據庫連接。

由於獲取新連接的成本很高,因此應將min_size保持為非零。 根據輕度使用應用程序期間的負載,您可以在此處進行合理的猜測。 通常,在大多數示例中指定5。

acquisition_increment取決於使用您的應用的用戶數量增長的速度。 因此,想象一下,如果您每次需要一個額外的連接時都要求一個新的連接,則您的應用程序可能會運行不佳。 因此,在預期用戶數量激增的情況下,您可能希望增加更大的塊,例如5或10或更多。

通常,最大 您擁有的數據庫連接數可以少於使用您的應用程序的並發用戶數。 但是,如果您的應用程序占用大量數據庫資源,則可能必須配置max_size來匹配您擁有的並發用戶數。

有時候,即使將max_size設置得很高,您也可能無法處理這么多用戶。 到那時,您將不得不考慮重新設計應用程序以避免數據庫負載。 通常,這是通過將讀取操作卸載到僅提供讀取操作的備用數據庫實例來完成的。 同樣,人們采用這種數據的緩存,這種數據不經常改變但是經常被讀取。

類似的理由也可以應用於其他領域

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM