連接池連接數設置為多少合適


HikariCP為這么

  1. 字節碼級別優化(很多⽅方法通過 JavaAssist ⽣生成)
  2. 大量細節優化
    1. 用 FastStatementList 代替 ArrayList
    2. 無鎖集合 ConcurrentBag
    3. 代理類的優化(⽐如,用 invokestatic 代替了 invokevirtual,減少字節碼指令行數)

配置

## 數據源配置
spring.datasource.hikari.maximumPoolSize=5
spring.datasource.hikari.minimumIdle=5
# 連接最大空閑時間,超出后連接銷毀
spring.datasource.hikari.idleTimeout=600000
# 連接超時時間
spring.datasource.hikari.connectionTimeout=30000
# 池中連接的最長使用時間,超出這個時間連接歸還后就會銷毀
spring.datasource.hikari.maxLifetime=1800000

springboot2.x默認連接池從Tomcat換成了Hikari。

使用DataSourceAutoConfiguration加載數據源配置,其中使用@Import注入數據源配置DataSourceConfiguration。

@Configuration(proxyBeanMethods = false)
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
        DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
        DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
protected static class PooledDataSourceConfiguration {

}

abstract class DataSourceConfiguration {
    
    @Configuration(proxyBeanMethods = false)
    @ConditionalOnClass(HikariDataSource.class)
    @ConditionalOnMissingBean(DataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource",
          matchIfMissing = true)
    static class Hikari {

       @Bean
       @ConfigurationProperties(prefix = "spring.datasource.hikari")
       HikariDataSource dataSource(DataSourceProperties properties) {
          HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class);
          if (StringUtils.hasText(properties.getName())) {
             dataSource.setPoolName(properties.getName());
          }
          return dataSource;
       }

    }}

Alibaba Druid

Druid連接池是阿里巴巴開源的數據庫連接池項目。 Druid連接池為監控而生,內置強大的監控功能,監控特性不影響性能。功能強大,能防SQL注入,內置Logging能診斷Hack應用行為。

實用功能:

  • 強大的監控
  • ExceptionSorter,針對主流數據庫的返回碼都有支持
  • SQL防注入
  • 數據源加密配置
  • 提供很多擴展點,方便擴展。

springboot2.x使用druid盡量剔除掉默認hikaricp連接池。

其他連接池問題

數據庫連接池的選擇

  • 首先考慮可靠性和性能
  • 功能。類似監控
  • 可運維性。例如密碼加密
  • 可擴展性。例如添加TraceId,打印sql,通過數據庫連接池更加通用。
  • 其他:社區活躍度。

數據庫連接池的最大連接數在實際項目中怎么定

數據庫連接池連接數設置

Oracle Real-World Performance 小組做過這樣的實驗:在沒有任何其他更改的情況下,僅減少連接池大小就將應用程序的響應時間從約 100 毫秒減少到約 2 毫秒——提高了 50 倍以上。

計算的基本定律是,給定單個 CPU 資源,順序執行AB總是比通過時間切片“同時”執行AB快。一旦線程數超過 CPU 內核數,添加更多線程就會變慢,而不是變快。

數據庫的主要瓶頸可以概括為三個基本類別:CPU磁盤網絡內存,與磁盤網絡相比,帶寬有幾個數量級的差異。例如,磁盤存在尋道成本和旋轉成本,在此期間(“I/O 等待”),連接/查詢/線程只是“阻塞”等待磁盤。網絡同樣容易出現阻塞。

經驗公式

連接數 = ((core_count * 2) + Effective_spindle_count)
一個硬盤的小型 4 核 i7 服務器應該運行以下連接池: 9 = ((4 * 2) + 1).

業務場景

  • 對於並發訪問,可以采用小的數據庫連接池,然后將剩下的業務線程放在隊列中等待。
  • 如果系統中混合了長事務和短事務,正確的做法應該是創建兩個連接池,一個服務於長事務,一個服務於"實時"查詢,也就是短事務。
    連接池配置原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM