c3p0 mysql 自动重连_关于C3P0容错和自动重连特性的研究

2023-11-19

转载: http://blog.csdn.net/cutesource/article/details/5422093

最近常有数据库和网络设备升级和搬迁等事情,而各个应用都是基于数据库连接池做的,大部分都是基于C3P0,数据库或网络状况的变动都会导致客户端连接池中的connection失效,如何剔除这些blocked connection就和C3P0的各个配置息息相关。这两天,搭了个实验环境,根据C3P0的配置说明 和实验结果,把C3P0关于这块的机制解析了一番。先看看我的结论:

1)C3P0容错和自动重连与以下配置参数有关:

breakAfterAcquireFailure :true表示pool向数据库请求连接失败后标记整个pool为block并close,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉。false表示不会标记 pool为block,新的请求都会尝试去数据库请求connection。默认为false。因此,如果想让数据库和网络故障恢复之后,pool能继续请求正常资源必须把此项配置设为false

idleConnectionTestPeriod :C3P0会有一个Task检测pool内的连接是否正常,此参数就是Task运行的频率。默认值为0,表示不进行检测。

testConnectionOnCheckout :true表示在每次从pool内checkout连接的时候测试其有效性,这是个同步操作,因此应用端的每次数据库调用,都会先通过测试sql测试其有效性,如果连接无效,会关闭此连接并剔除出pool,并尝试从pool内取其他连接,默认为false,此特性要慎用,会造成至少多一倍的数据库调用。

testConnectionOnCheckin :true表示每次把连接checkin到pool里的时候测试其有效性,因为是个事后操作,所以是异步的,应用端不需要等待测试结果,但同样会造成至少多一倍的数据库调用。

acquireRetryAttempts 和acquireRetryDelay :pool请求取连接失败后重试的次数和重试的频率。请求连接会发生在pool内连接少于min值或则等待请求数>池内能提供的连接数

automaticTestTable 、connectionTesterClassName 、preferredTestQuery :表示测试方式,默认是采用DatabaseMetaData.getTables()来测试connection的有效性,但可以通过以上配置来定制化测试语句,通过其名字就很好理解其含义,无需过多解释

maxIdleTime 和 maxConnectionAge :表示connection的时效性,maxIdleTime和maxConnectionAge不同之处在于, maxIdleTime表示idle状态的connection能存活的最大时间,而 maxConnectionAge表示 connection能存活的绝对时间

2)应用端getConnection抛出exception时, C3P0会测试其connection的有效性,并根据状态处理此connection,但应用端不会重调。

3)无论是网络问题还是远端数据库服务器,就算恢复正常后,客户端pool内其已存在的connection都会失效,要保证应用端调用无误,必须在checkout到应用端之前刷新这些无效connection

4)breakAfterAcquireFailure=false是关键。如果 breakAfterAcquireFailure=true ,一旦pool向数据库请求连接失败,就会标记pool block并关闭pool,这样无论数据库是否恢复正常,应用端都无法从pool拿到连接

5)要想保证网络和数据库瞬间的失效100%不会造成应用端getConnection失败必须开启testConnectionOnCheckout。但此特性的代价巨大,建议在应用端做容错。

6)推荐使用 idleConnectionTestPeriod。可以根据应用调用频率权衡一个检查pool的频率,这样可以在保证性能损耗不大情况下,尽可能的保证pool内connection的有效性

7)若嫌DatabaseMetaData.getTables()性能不好,可以尝试通过配置automaticTestTable、connectionTesterClassName、preferredTestQuery来找到一个性能最好的测试语句,只要能验证connection有效就行

综上所述,要想保证性能的前提下,本人推荐的配置组合如下:

breakAfterAcquireFailure: false

testConnectionOnCheckout: false

testConnectionOnCheckin: false

idleConnectionTestPeriod: 60

acquireRetryAttempts: 10

acquireRetryDelay: 1000

但需要注意的是以上的配置不能保证100%应用端getConnection无误,如果应用端不能发生getConnection错误,需要自行考虑容错和重试机制。

在以上配置下,当网络或数据库发生瞬间变动的情况下,会有如下事情发生:

1)自动测试idleConnection的 task轮训检测pool,对每个connction通过DatabaseMetaData.getTables()来测试有效性,并剔除无效连接。

2)根据请求情况和配置,pool向数据库请求新连接并加入池内

3)应用端getConnection->是否发生异常->如果发生异常,检验其有效性,并剔除出pool->如果没有发生异常(自动检查task之前已检测),调用成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c3p0 mysql 自动重连_关于C3P0容错和自动重连特性的研究 的相关文章

  • c++:多态案例,电脑组装

    需求 include
  • 【Ansible初识】Linux系统之Ansible的基本介绍

    Ansible初识 Linux系统之Ansible的基本介绍 一 Ansible的介绍 1 Ansible简介 2 Ansible的特点 3 Ansible的原理 二 Ansible的架构 1 Ansible的架构图 2 Ansible的核
  • oracle数据库分区的几种方式

    范围分区 每个分区都由一个分区键值范围指定 对于一个以日期列作为分区键的表 2005 年 1 月 分区包含分区键值为从 2005 年 1 月 1 日 到 2005 年 1 月 31 日 的行 列表分区 每个分区都由一个分区键值列表指定 对于
  • IOS 访问系统粘贴板

    粘贴板提供了一种核心OS特性 用于跨应用程序共享数据 用户可以跨应用来复制粘贴 也可以设置只在本应用中复制粘贴用来保护隐私 UIPasteboard类允许访问共享的设备粘贴板以及内容 下面代码返回一般的系统粘贴板 它适合大多数一般的复制粘贴
  • 百度智能云章淼:详解企业级七层负载均衡开源软件BFE

    随着云计算和云原生的发展 七层负载均衡得到了越来越多的关注 同时也出现了很多不同的解决方案 BFE是基于Go语言编写的七层负载均衡开源软件 在2020年6月被CNCF接受为 沙盒项目 成为中国第一个网络方向的CNCF开源项目 2022年7月
  • Open3D 计算模型的表面积和体积

    函数解析 def get surface area self 计算物体表面积 def get volume self 计算物体体积 完整的代码 import open3d as o3d print 绘制立方体 mesh box o3d ge
  • android解决方法数超过65536问题,(满则溢)Android AS打包提示方法数超65536的解决方法...

    满则溢 平常大家喝饮料啥的都知道一个杯子的容量 如果超出就溢出 这个时候只能在加个杯子装了 Android开发也是如此 当方法数超过65536的时候就需要分包 为啥出现 项目当中添加的依赖和架包太多了 方法数超过65536还是很正常的 所以
  • flutter可以开发HTML5,Flutter建立JsBridge用于webview与h5通信

    项目背景 随着项目的不断完善 需要做一些运营活动 通常是H5页面 在app中打开这些H5页面就需要引入WebView 有时候H5需要客户端提供一些内部的接口 这时候我们就需要建立JSBridge用于客户端与H5之间的通讯 使用 1 安装we
  • 宝可梦虚拟银行服务器连接不上,更多宝可梦!《精灵宝可梦:太阳/月亮》虚拟银行将开启...

    任天堂近日宣布3DS 精灵宝可梦 太阳 月亮 Pok mon Sun Moon 将在一月下旬开启 宝可梦虚拟银行 这个功能主要是让游戏与整个 口袋妖怪 系列进行联动 进行寄存或领出各种宝可梦 宝可梦虚拟银行 从1月下旬起对应 精灵宝可梦 太
  • 25 个 JavaScript 实用级语句 进阶

    1 复制内容到剪贴板 为了提高网站的用户体验 我们经常需要将内容复制到剪贴板 以便用户粘贴到指定的地方 const copyToClipboard content gt navigator clipboard writeText conte
  • 黑客美化版大马_2012版

  • JVM调优之GC调优——响应时间优先(三)

    GC调优之响应时间优先 上一节简单介绍了GC调优的吞吐量优先 详见 https blog csdn net Winner941112 article details 102679614 这一节将会考虑响应时长进行调优 响应时间优先 依然使用
  • Qt5学习之路(vs2012下创建一个QT应用程序)2013-10-14

    刚开始学习QT在网上找的资料基本都是使用QT Create进行开发的 VS下开发的学习资料感觉很少很难找的到 视频教程也基本没看到过貌似 因为我们研发中心是使用MFC进行开发开发工具是VS2010 使用QT开发的话基本我们不会再使用QT C
  • 2021-01-01 中国公务员级别

    中华人民共和国公务员 1 级别 一级到二十七级 27个级别 2 职务 国家级正职到乡科级副职 10级领导职务 3 职级 一级巡视员到二级科员 12个职级 根据 中华人民共和国公务员法 2018年12月29日第十三届全国人民代表大会常务委员会
  • 使用selenium自动登录淘宝并获取cookie

    http sunjun041640 blog 163 com blog static 256268322013101473549333 最近做个东西需要用程序登录淘宝然后去后台获取些东西 分析了一下登录页面 发现淘宝有用flash生成一个字
  • BLE连接、配对和绑定

    参考 一篇文章带你解读蓝牙配对绑定 参考 BLE安全之SM剖析 1 参考 BLE安全之SM剖析 2 参考 BLE安全之SM剖析 3 参考 https blog csdn net chengbaojin article details 103
  • 有趣的Hack-A-Sat黑掉卫星挑战赛——被破坏的阿波罗计算机(解法二)

    国家太空安全是国家安全在空间领域的表现 随着太空技术在政治 经济 军事 文化等各个领域的应用不断增加 太空已经成为国家赖以生存与发展的命脉之一 凝聚着巨大的国家利益 太空安全的重要性日益凸显 1 而在信息化时代 太空安全与信息安全紧密地结合
  • 时间与时间戳的转换

    什么是时间戳 时间戳是指格林威治时间自1970年1月1日 00 00 00 GTM 至当前时间的总秒数 它也被称为Unix时间戳 Unix Timestamp 时间戳是能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据 通常是一个

随机推荐

  • org.json.JSONException: No value for thumbnail_pic

    在JSON解析中会遇到一种错误 很常见的错误 是因为我们解析方法getString 是因为JSON里面不存在这个value 我们可以用另外一个方法optString 这个方法如果不存在value会返回 空字符串 不会报异常 为了安全起见我一
  • ECS突发性能型t6和轻量应用服务器区别和选择?

    这两款对比的话 个人还是首选推荐使用ECS突发性能型t6 毕竟是ecs服务器 功能上全面一些的 关于什么是阿里云ECS共享型S6 计算型 突发性能型 操作和地域镜像等系统选择 前往阿里云官网产品文档了解轻量服务器和突发型相关内容 共享型 云
  • 以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素。

    出队的时候一定要注意是不是最后一个元素出队 假设以带头结点的循环链表表示队列 并且只设一个指针指向队尾元素结点 试编写相 应的初始化 入队以及出队算法 include
  • Minio安装

    Minio安装 想要了解 Minio 直接去官网查看 官网 https min io GitHub地址 https github com minio minio minio概述文档 http docs minio org cn minio
  • 文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类“WinForm.Win.FormsBase.FormMainBase”。请确...

    出现该问题的原因 FormMain从FormMainBase继承之后 一旦修改FormMainBase就会出现这个问题 解决方案 1 4是搜索网友的 1 关闭VS所有窗口 后重启 即可返回正常 2 第一种方案不成功 关闭VS所有窗口 点击解
  • 重置计算机后无法开机,win10重置此电脑失败怎么办_win10重置此电脑失败无法开机修复方法...

    当win10系统使用时间长了 难免会有一些电脑故障的出现 这时有些用户就会选择使用重置电脑的方式来解决 但是最近有用户再给自己的win10系统进行重置时总是出现失败的情况 那么win10重置此电脑失败怎么办呢 下面就来告诉大家win10重置
  • TCP/UDP

    TCP与UDP的相关知识 TCP的三次握手具体发生在哪个函数中 补充知识 TCP的三次握手具体发生在哪个函数中 在Linux编程中 在进行TCP网络编程时 通常分为客户端和服务器端两个模块 客户端 fd socket 利用socket生成文
  • jvm原理--简单的程序加载分析

    package com bzu csh 类加载器加载 class文件 gt 初始化static声明 并不赋值 gt 调用类 gt static声明赋值由上到下 程序开始运行 首先执行main方法 执行main方法第一条语句 调用Single
  • 时序预测

    时序预测 MATLAB实现SARIMA时间序列预测 arima函数 经常还会遇到一种情况 即某些时间序列中存在明显的周期性变化 这种周期是由于季节性变化 季度 月度等 引起的 ARIMA的扩展支持SARIMA 它支持对该系列的季节性成分进行
  • 以太坊区块链学习之在私链上部署合约

    上一篇博客介绍了如何搭建私链并在私链上创建账户 挖矿 查看余额 本篇将介绍在私链上部署合约并与之交互 本篇开发环境为MacOS 10 12 建议读者使用macOS系统或者Ubuntu系统 第一步 进入geth客户端 启动私链 进入geth客
  • 网络基础-应用层协议-HTTP/HTTPS

    HTTP HTTPS HTTP 基本概念 协议格式 请求报文 请求方法 请求资源地址 协议版本 应答报文 常见Header 常见状态码与状态描述 Cookie Session http协议特点 HTTPS 基本概念 对称加密与非对称加密 数
  • magic-api简单例子

    1 magic api magic api 是一个基于Java的接口快速开发框架 通过magic api提供的UI界面完成编写接口 无需定义Controller Service Dao Mapper XML VO等Java对象即可完成常见的
  • 继承、重写、重载、 abstract 抽象、 final、向上(向下)转型、多态

    继承 父类 公共的属性和方法 子类 特有的属性和方法 重写 override 1 继承 2 子类拥有和父类的一样的方法 方法名相同 参数列表相同 返回值类型可以缩小 访问控制权限可以方法 可声明的异常 重载 overload 1个类中 方法
  • [LeetCode-01]-Two Sum(求和)

    文章目录 题目相关 Solution 1 暴力求解 2 暴力求解方法改进 3 不可行的方案 后记 每周完成一个ARTS Algorithm Review Tip Share ARTS Algorithm 每周至少做一个 leetcode 的
  • OpenLooKeng连接hive出现UnknownHostException

    背景 最近在验证一个计算的方案 使用的是华为开源的数据虚拟化引擎OpenLookeng hetu 底层基于presto引擎来提供交互式查询分析能力 先前成功部署过一套 添加hive mysql等数据源一切正常 后重新在其他环境进行部署时 连
  • 老胡的周刊(第106期)

    老胡的信息周刊 1 记录这周我看到的有价值的信息 主要针对计算机领域 内容主题极大程度被我个人喜好主导 这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享 项目 quivr 2 Quivr 是您在云中的第二个大脑 让您轻松存储和检
  • windows10-cuda10.1-cudnn7-tensorflow1.4.0配置流程

    1 下载cuda版本 cuda 10 1 105 win10 network exe 并按照流程安装 安装完后 打开cmd 输入 nvcc V 回车查看是否有版本信息 若出现版本信息 则证明nvcc安装成功 2 下载cudnn版本 cudn
  • oracle批量绑定 forall bulk collect用法以及测试案例

    一 如何使用批挷定提高性能 How Do Bulk Binds Improve Performance 在PL SQL 和SQL引擎 engines 中 太多的上下文切换 context switches 会影响性能 这个会发生在当一个循环
  • 黑丝YYDS,通过五十行代码分分钟下载上万张黑丝小姐姐纯欲高清图!(宅男福利)

    前言 夏天已经接近尾声了 虽然各种大白腿会少了很多 但是会冒出很多各种黑色的大长腿哇 尤其是黑色的 黑丝才是永远滴神 今天带你们大饱眼福一波 一 技术路线 requests 网页请求 BeautifulSoup 解析html网页 re 正则
  • c3p0 mysql 自动重连_关于C3P0容错和自动重连特性的研究

    转载 http blog csdn net cutesource article details 5422093 最近常有数据库和网络设备升级和搬迁等事情 而各个应用都是基于数据库连接池做的 大部分都是基于C3P0 数据库或网络状况的变动都