数据库连接池监控
Posted 青乡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库连接池监控相关的知识,希望对你有一定的参考价值。
连接池数量到底该配置成多少?
加了数据库连接池监控之后,就可以验证连接池数量是否配置的太大,因为之前都是乱配的,配了好几百,后面发现实际的活跃连接数量只有几个,所以配置数量一般只要几十个就可以了,因为
-
1.并发请求没有那么高,可能就是个位数,高的时候是十位数,所以几十个就足够了。 -
2.如果不考虑并发数量,也只需要配置几十个,就是cpu的数量*2,20来个就可以了。
所以最终的结果是,如果没有并发,配置cpu数量*2就可以了,20个就足够了。如果有一点并发(几十个),就30到50个就够了。如果并发达到50个,就还可以再往上加到100,但是最好不要超过100,超过100就应该加机器了,因为并发太多,机器也处理不过来,会导致处理速度变慢,所以就要加机器,好比每个人要做的事情变少了,速度就变快了。
数据库连接池的连接跟线程池有关系吗?
数据库连接池的连接跟线程池有关系吗?没关系。
切换连接,是切换线程吗?不是。
一个是切换线程上下文耗资源,因为要用户态和内核态切换,一个是创建数据库连接耗资源,因为要三次握手。
所以,这两个东西没有任何关系,唯一的共同点就是复用对象,一个是线程对象,一个是数据库连接对象。
为什么要复用对象?因为这两种对象,一个是创建代价太高,一个是切换代价太高(线程数量少,切换次数就少)。
数据库连接池满了怎么办?
数据库连接池满了怎么办?阻塞。默认就是阻塞,直到连接池有新的连接可以用。举个例子,比如配置的是30,现在满了,第31个请求来了,这个时候就阻塞,直到30个连接里有一个连接已经执行完成了,现在空闲出来了,这个时候这个空闲的连接就去执行刚才的第31个请求。
数据库连接池获取连接的耗时?
一般正常情况就是几ms,但是如果是新创建的连接,就要耗时几百ms,大概是200ms左右。如果是启动的时候,即连接池初始化的时候,获取连接需要1s,即差不多1000ms。这些都是真实的监控数据,而且是生产环境的,测试环境也一样也差不多。
以上是关于数据库连接池监控的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面