首页 > 数据库 >什么是 MySQL JDBC 连接池中最高效的连接检测语句?

什么是 MySQL JDBC 连接池中最高效的连接检测语句?

时间:2023-12-26 11:34:42浏览次数:40  
标签:JDBC isValid MySQL ping mysqld mysql TABLE COM 连接池

在回答这个问题之前,首先我们看看 MySQL 中有哪些常用的 JDBC 连接池:

  • c3p0
  • DBCP
  • Druid
  • Tomcat JDBC Pool
  • HikariCP

这些连接池中,这些连接池中,c3p0 是一个老牌的连接池,很多流行框架,在其老版本中,都将 c3p0 作为默认的连接池。

DBCP 和 Tomcat JDBC Pool(Tomcat 的默认连接池)是 Apache 开源的。

Druid 是阿里开源的,它不仅仅是个数据库连接池,还可以监控数据库的访问性能,支持数据库密码加密等。

HikariCP 是目前风头最劲的 JDBC 连接池,其号称性能最好。

从下图 HikariCP 官网给出的压测结果来看,也确实如此,性能上吊打 c3p0、DBCP2。

包括 SpringBoot 2.0 也将 HikariCP 作为默认的数据库连接池。

MySQL JDBC连接池中最高效的连接检测语句

实际上,对于这个问题,c3p0 的官方文档(https://www.mchange.com/projects/c3p0/)中给出了答案。

When configuring Connection testing, first try to minimize the cost of each test. If you are using a JDBC driver that you are certain supports the new(ish) jdbc4 API — and if you are using c3p0-0.9.5 or higher! — let your driver handle this for you. jdbc4 Connections include a method called isValid() that should be implemented as a fast, reliable Connection test. By default, c3p0 will use that method if it is present.

However, if your driver does not support this new-ish API, c3p0's default behavior is to test Connections by calling the getTables() method on a Connection's associated DatabaseMetaData object. This has the advantage of being very robust and working with any database, regardless of the database schema. However, a call to DatabaseMetaData.getTables() is often much slower than a simple database query, and using this test may significantly impair your pool's performance.

The simplest way to speed up Connection testing under a JDBC 3 driver (or a pre-0.9.5 version of c3p0) is to define a test query with the preferredTestQuery parameter. Be careful, however. Setting preferredTestQuery will lead to errors as Connection tests fail if the query target table does not exist in your database prior to initialization of your DataSource. Depending on your database and JDBC driver, a table-independent query like SELECT 1 may (or may not) be sufficient to verify the Connection. If a table-independent query is not sufficient, instead of preferredTestQuery, you can set the parameter automaticTestTable. Using the name you provide, c3p0 will create an empty table, and make a simple query against it to test the database.

从上面的描述中可以看到,最高效的连接检测语句是 JDBC4 中引入的isValid方法 。

其次是通过 preferredTestQuery 设置一个简单的查询操作(例如SELECT 1),最后才是默认的getTables方法。

包括 HikariCP 的文档中,也推荐使用 isValid 方法。只有当驱动比较老,不支持 isValid 方法时,才建议通过 connectionTestQuery 自定义检测语句。

标签:JDBC,isValid,MySQL,ping,mysqld,mysql,TABLE,COM,连接池
From: https://blog.51cto.com/u_15829120/8980641

相关文章

  • MySQL8.0 OCP 103
    Choosethree.Whichthreerequirementsmustbeenabledforgroupreplication?对于组复制,必须启用哪些三个要求?A)replicationfiltersB)semi-syncreplicationpluginC)slaveupdateslogging更新日志记录D)binarylogchecksumE)primarykeyorprimarykeyequ......
  • Mysql报语法错误,排查竟然花了一个钟!!!!
    背景:最近协助远程同事开发一个功能,我调用同事写的接口,发现报错,,同事正在处理其他事情,暂时无暇顾及。遂自行解决。查看日志发现,发现一个inser语句报语法错误。解决过程:1、找到报错的日志,查看sql。如果没有,打开mybatis-plus日志输出。2、将sql复制出来在mysql客户端模拟执行,发现sql......
  • MySQL查询慢,四种方案帮你解决!
    一般分页在系统中需要进行分页操作时,我们通常会使用LIMIT加上偏移量的方式实现,语法格式如下。SELECT...FROM...WHERE...ORDERBY...LIMIT...在有对应索引的情况下,这种方式一般效率还不错。但它存在一个让人头疼的问题,在偏移量非常大的时候,也就是翻页到很靠后的页面......
  • MYSQL 事务
    事务定义事务就是一组数据库操作序列(包含一个或多个sql操作命令),事务会把所有操作看作是一个不可分割的整体向数据库系统提交或撤销操作,所有操作要么都执行,要么都不执行。事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。事务适用于多用户......
  • Mysql如何查看操作记录
     分为文件记录日志和数据库记录日志两种方式,效果相同一、文件记录数据库操作日志首先进入mysql输入指令showvariableslike'gen%';general_log是开启还是关闭状态,以及这个帐号的general_log文件在哪如果没有开启,请先设置开启setglobalgeneral_log=ON;查看log:cat/目录......
  • MySQL的事务(看看也许有帮助呢)
    MySQL的事务一、事务的概念在MySQL中,只有InnoDB存储引擎才支持事务。事务的处理用来维护数据库数据的完整性,保证同一个事务里的一批SQL语句,要么全部执行,要么全部不执行。事务用来管理DDL、DML、DCL操作,比如insert、update、delete语句,默认自动提交,即执行SQL语句后会马上执行co......
  • MySql之json_extract函数处理json字段
    转自:链接:https://juejin.cn/post/7103482347894358046 MySql之json_extract函数处理json字段在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出String之后再代码中进行解析?接下来本文将介绍一下Mysql5.7+之后提供的......
  • 2数据库之Mysql基本操作
                                                                                                      数据库基本类型、基本操作一.......
  • MySQL-索引数据结构
    BTreeB-树即B树。指的是BalanceTree,也就是平衡树,平衡树是一颗查找树,并且所有叶子节点位于同一层。每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点。所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中。B+Tree是B树的一种变形,它是基于B......
  • MySQL索引-索引结构
    索引是什么索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。优缺点:优点:提高数据检索效率,降低数据库的IO成本通......