目录
- 1 设置最大连接数
- 2 查看当前连接列表
- 3 关闭某个连接
- 4 JDBC连接
- 5 mybatis连接池
- 5.1 理解
- 5.2 获取释放连接流程
- 5.2.1 获取连接
- 5.2.2 配置文件
- 5.2.3 配置参考
- 6 总结
1 设置最大连接数
可以修改/etc/mysql/mysql.conf.d/mysqld.cnf
配置文件中max_connections
来设置最大连接数;
进入MySQL后可以查看最大连接数:show variables like '%max_connections%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 10 |
+-----------------+-------+
2 查看当前连接列表
show processlist;
+----+------+----------------------+----------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+----------------------+----------+---------+------+----------+------------------+
| 21 | lwj | localhost | NULL | Query | 0 | starting | show processlist |
| 24 | lwj | 222.178.10.174:59393 | datasets | Sleep | 351 | | NULL |
+----+------+----------------------+----------+---------+------+----------+------------------+
如果超过了最大连接数,客户端还请求连接数据库的话,报错(Too many connections)
3 关闭某个连接
kill thread_id;
4 JDBC连接
当执行java代码Connection conn = DriverManager.getConnection(url, name,pwd);
就获得了一个与数据库的连接;
5 mybatis连接池
5.1 理解
在mybatis工具中可以配置连接池,因为用户关心的只是向特定的数据库进行增删改查,并不关心连接,这部分应该被封装起来。这里面有两种连接,一种是连接上了但是没有执行sql语句,称之为idle空闲状态;另一种连接是正在执行sql语句的连接称之为active状态。
5.2 获取释放连接流程
5.2.1 获取连接
当需要使用SQLSession
执行sql语句时,就需要得到一个连接来执行这个sql语句,流程如下:
- 查看空闲连接集合是否有空闲连接对象,若有就返回一个,没有就执行2;
- 查看活动连接集合是否满,若没有满,则创建连接对象,放到活动连接集合,并返回它,若已经满,执行3;
- 线程阻塞等待获取连接;
使用完成之后返还连接给空连接集合;
5.2.2 配置文件
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.username}"/>
<property name="password" value="${oracle.password}"/>
<property name="poolMaximumActiveConnections" value="10"/> <!--最大活跃连接数 -->
<property name="poolMaximumIdleConnections" value="5"/> <!--最大空闲连接数-->
</dataSource>
5.2.3 配置参考
该参考配置可以和线程池的相互理解:java多线程(十四)线程池
- 最大活动连接=最大空闲连接:当执行完任务后,连接被放回到空闲连接;
- 最大空闲连接=0:连接池无法存放多余的空闲连接,每次连接执行完毕都直接释放,每次使用都创建新的连接,不推荐;
- 最大活动连接<最大空闲连接:等效于最大活动连接=最大空闲连接,因为活动连接执行完毕后,都会放回空闲连接,每次取又是从空闲连接取,所以不会多出连接;
- 最大活动连接>最大空闲连接:这是比较好的实践,当任务较轻时,保留较少部分的空闲连接,当任务较重的时,又允许产生较多的活动连接,使用完毕时候就释放一些,只保留少部分;
注意:当从数据库获取新连接的时候,mybatis
的其他活动连接不执行语句操作,所以sqlSessionFactory
的最佳实践是全局仅一个的单例模式,而且连接是懒加载的;
6 总结
连接数据库是耗时的,连接池是一个好的实践方式。