前段时间作系统压测,发现DB的CPU使用率飙升很严重,排查后发现是一个配置testOnBorrow由false修改成true致使。怎么对性能影响这么大?须要好好了解一下。sql
testOnBorrow:若是为true(默认为false),当应用向链接池申请链接时,链接池会判断这条链接是不是可用的。数据库
假如链接池中的链接被数据库关闭了,应用经过链接池ge tConnection时,均可能获取到这些不可用的链接,且这些链接若是不被其余线程回收的话;它们不会被链接池废除,也不会从新被建立,占用了链接池的名额,项目若是是服务端,数据库连接被关闭,客户端调用服务端就会出现大量的timeout,客户端设置了超时时间,会主动断开,服务端就会出现close_wait。并发
1.testOnBorrow可以确保咱们每次都能获取到可用的链接,可是若是设置为true,则每次获取链接时候都要到数据库验证链接有效性,这在高并发的时候会形成性能降低,能够将testOnBorrow设置成false,testWhileIdle设置成true这样能得到比较好的性能。高并发
2.testOnBorrow和testOnReturn在生产环境通常是不开启的,主要是性能考虑。失效链接主要经过testWhileIdle保证,若是获取到了不可用的数据库链接,通常由应用处理异常。性能