IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> java数据库连接池 -> 正文阅读

[大数据]java数据库连接池

在工作中经常要和各种连接池组件打交道,各种参数眼花撩乱,再也不想因为连接池配置光顾度娘了。今天总结的主要是几大常用的数据库连接池配置,redis连接池准备ing。内容主要来自各官方文档。

Druid

官方文档: https://github.com/alibaba/dr...
配置缺省值说明性能优化备注
namenull配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。详情-点此处。//
urlnull连接数据库的url,不同数据库不一样。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto//
usernamenull连接数据库的用户名//
passwordnull连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里//
driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName//
initialSize初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时可以配置和maxActive相同数量/
maxActive8最大连接池数量//
maxIdle8已经不再使用,配置了也没效果//
minIdlenull最小连接池数量建议配置和maxActive相同数量/
maxWaitnull获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。//
dataSouce.setUseUnfairLock(true)配置了maxWait之后,缺省启用公平锁,并发效率会有所下降//
poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。oracle下可以配置/
maxPoolPreparedStatementPerConnectionSize-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100oracle下可以配置/
validationQuerynull用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。//
validationQueryTimeoutnull单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法//
testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。不建议配置/
testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。不建议配置/
testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。建议取代testOnBorrow和testOnReturn,其会影响获取db连接时的性能配合testWhileIdle=true 和timeBetweenEvictionRunsMillis来优化,无需在每次借用和归还连接时检测连接可用性,而是定期在连接空闲时进行检测,减少性能损耗
keepAlivefalse (1.0.28)连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。//
defualtAutoCommittrue事务自动提交
timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义: 1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明//
numTestsPerEvictionRun30分钟(1.0.14)不再使用,一个DruidDataSource只支持一个EvictionRun//
minEvictableIdleTimeMillis连接保持空闲而不被驱逐的最小时间//
connectionInitSqls物理连接初始化的时候执行的sql//
exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接//
filtersnull属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall//
proxyFiltersnull类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系//

Hikari

官方文档: https://github.com/brettwoold...
配置缺省值说明性能优化
autoCommittrue自动提交从池中返回的连接/
connectionTimeout30000ms等待来自池的连接的最大毫秒数/
idleTimeout600000ms连接允许在池中闲置的最长时间【一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟】/
maxLifetime1800000ms池中连接最长生命周期/
keepaliveTime0 (disabled)控制 HikariCP 尝试保持连接活动的频率,以防止它被数据库或网络基础设施超时。该值必须小于该 maxLifetime值。“keepalive”只会发生在空闲连接上。当针对给定连接进行“保持连接”的时间到了时,该连接将从池中删除、“ping”,然后返回到池中。'ping' 是其中之一:调用 JDBC4isValid()方法,或执行 connectionTestQuery. 通常,池外的持续时间应该以个位数毫秒甚至亚毫秒为单位进行测量,因此应该几乎没有或没有明显的性能影响。最小允许值为 30000 毫秒(30 秒), 默认值:0(禁用)/
connectionTestQuerynull如果您的驱动程序支持JDBC4,我们强烈建议您不要设置此属性建议不设置
minimumIdle10池中维护的最小空闲连接数【官方推荐不设置此值,默认同最大连接数相同】官方推荐不设置此值,默认同最大连接数相同
maximumPoolSize10池中最大连接数,包括闲置和使用中的连接/
metricRegistrynull该属性允许您指定一个 Codahale / Dropwizard?MetricRegistry?的实例,供池使用以记录各种指标/
healthCheckRegistrynull该属性允许您指定池使用的Codahale / Dropwizard HealthCheckRegistry的实例来报告当前健康信息/
poolNameHikariPool-1连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置/
initializationFailTimeout1如果池无法成功初始化连接,则此属性控制池是否将?fail fast/
isolateInternalQueriesfalse是否在其自己的事务中隔离内部池查询,例如连接活动测试/
allowPoolSuspensionfalse控制池是否可以通过JMX暂停和恢复/
readOnlyfalse从池中获取的连接是否默认处于只读模式/
registerMbeansfalse是否注册JMX管理Bean(MBeans)/
catalognull为支持?catalog?概念的数据库设置默认?catalog/
connectionInitSqlnull该属性设置一个SQL语句,在将每个新连接创建后,将其添加到池中之前执行该语句。/
driverClassNamenullHikariCP将尝试通过仅基于jdbcUrl的DriverManager解析驱动程序,但对于一些较旧的驱动程序,还必须指定driverClassName/
transactionIsolationnull控制从池返回的连接的默认事务隔离级别/
validationTimeout5000连接将被测试活动的最大时间量/
leakDetectionThreshold记录消息之前连接可能离开池的时间量,表示可能的连接泄漏/
dataSourcenull这个属性允许你直接设置数据源的实例被池包装,而不是让HikariCP通过反射来构造它/
schemanull该属性为支持模式概念的数据库设置默认模式/
threadFactorynull此属性允许您设置将用于创建池使用的所有线程的java.util.concurrent.ThreadFactory的实例。/
scheduledExecutornull此属性允许您设置将用于各种内部计划任务的java.util.concurrent.ScheduledExecutorService实例/

DBCP

官方文档: https://commons.apache.org/pr...
配置缺省值说明性能优化备注
usernamenull传递给JDBC驱动的用于建立连接的用户名//
passwordnull传递给JDBC驱动的用于建立连接的密码//
urlnull传递给JDBC驱动的用于建立连接的URL//
driverClassNamenull使用的JDBC驱动的完整有效的java 类名//
connectionPropertiesnull当建立新连接时被发送给JDBC驱动的连接参数//
defaultAutoCommittrue连接池创建的连接的默认的auto-commit状态//
defaultReadOnlydriver default连接池创建的连接的默认的read-only状态. 如果没有设置则setReadOnly方法将不会被调用. (某些驱动不支持只读模式,比如:Informix)//
defaultCatalognull连接池创建的连接的默认的catalog//
defaultTransactionIsolationdriver default连接池创建的连接的默认的TransactionIsolation状态. 下面列表当中的某一个: (参考javadoc)//
initialSize0初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持//
maxActive8最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制//
maxIdle8最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制//
minIdle0最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建//
maxWait无限最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数), 超过时间则抛出异常,如果设置为-1表示无限等待//
validationQuerynullSQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录//
testOnBorrowtrue指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串//
testOnReturnfalse指明是否在归还到池中前进行检验注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串//
testWhileIdlefalse指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串建议使用此设置,代替testOnBorrow/
timeBetweenEvictionRunsMillis-1在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 如果设置为非正数,则不运行空闲连接回收器线程//
numTestsPerEvictionRun3在每次空闲连接回收器线程(如果有)运行时检查的连接数量//
minEvictableIdleTimeMillis1000 60 30连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒//
poolPreparedStatementsfalse开启池的prepared statement 池功能,当开启时, 将为每个连接创建一个statement池,并且被下面方法创建的PreparedStatements将被缓存起来://
maxOpenPreparedStatements0statement池能够同时分配的打开的statements的最大数量, 如果设置为0表示不限制//
removeAbandonedfalse标记是否删除泄露的连接,如果他们超过了removeAbandonedTimout的限制.如果设置为true, 连接被认为是被泄露并且可以被删除,如果空闲时间超过removeAbandonedTimeout.设置为true可以为写法糟糕的没有关闭连接的程序修复数据库连接./如果开启”removeAbandoned”,那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时被触发.举例当maxActive=20, 活动连接为18,空闲连接为1时可以触发”removeAbandoned”.但是活动连接只有在没有被使用的时间超过”removeAbandonedTimeout”时才被删除,默认300秒.
removeAbandonedTimeout300泄露的连接可以被删除的超时值, 单位秒//
logAbandonedfalse标记当Statement或连接被泄露时是否打印程序的stack traces日志。被泄露的Statements和连接的日志添加在每个连接打开或者生成新的Statement,因为需要生成stack trace。会导致线程爬栈/

C3P0

官方文档: https://www.mchange.com/proje...
配置缺省值说明性能优化
acquireIncrement3当连接池中的连接耗尽的时,c3p0一次同时创建的连接数/
acquireRetryAttempts30定义在从数据库获取新连接失败后重复尝试的次数/
acquireRetryDelay1000两次连接中间隔时间,单位毫秒/
autoCommitOnClosefalse连接关闭时默认将所有未提交的操作回滚/
automaticTestTablenullc3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用/
breakAfterAcquireFailurefalse获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭/
checkoutTimeout0当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待/
connectionTesterClassNamecom.mchange.v2.c3p0.impl.DefaultConnectionTester通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径/
forceIgnoreUnresolvedTransactionsfalse如果您希望 c3p0 将事务管理留给您,并且既不提交也不回滚(也不修改 Connection autoCommit的状态),您可以将forceIgnoreUnresolvedTransactions设置为 true作者强烈建议不使用的一个属性
idleConnectionTestPeriod0每xxx秒检查所有连接池中的空闲连接/
initialPoolSize3初始化池的连接数,取值应在minPoolSize与maxPoolSize之间/
maxIdleTime0最大空闲时间,xxx秒内未使用则连接被丢弃。若为0则永不丢弃/
minPoolSize3连接池中保留的最小连接数/
maxPoolSize15连接池中保留的最大连接数/
maxStatements0JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭/
maxStatementsPerConnection0maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数/
numHelperThreads3帮助配置数据源线程池的行为。默认情况下,每个数据源只有三个关联的辅助线程,负责诸如连接测试工作/
overrideDefaultUsernull当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0的数据源时/
passwordnull密码/
usernull//
preferredTestQuerynull定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:测试的表必须在初始数据源的时候就存在/
testConnectionOnCheckoutfalse因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:06:19  更:2021-12-03 13:07:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:13:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码