一个生产库的JBOSS连接池调整优化及分析

[复制链接]
查看11 | 回复0 | 2010-3-1 11:19:06 | 显示全部楼层 |阅读模式
文章链接:http://www.dbafree.net/?p=150
今天和一个同事一起分析了下线上某个生产库(记为库A)的监控日志,发现一个有趣的现象,不管是在业务低峰还是高峰,数据库的logon指标(即新创建的数据库连接)一直保持在10个/10秒左右。数据库Logon不可避免,但是合理的情况应该和业务的增长有一定关系。之所以会出现这种情况,可能有些地方的配置不是很合理。我们首先想到的是,JBOSS连接池中的min值可能配置过高了,即应用连接过剩了。
这个数据库作过优化,在优化之前,应用集群B查询DB的次数约为每秒3000次左右,数据库连接池配置的是9-15个;经过优化之后,目前查询量已经下降到每秒300次左右。查询量下降了近10倍,,但是jboss连接池还是配置的9-15个,显而易见,这里是有调整的空间的。
我们统计了一下大约一周时间内,应用集群B中单个应用连接数据库的连接情况。
不出所料,在这7天内,各应用连接始终保持在9个,非常稳定,因此基本上可以确认是jboss的连接池配置过大了。

JBOSS的原理补充:
问:JBOSS中配置了9-15个的连接池区间,并设置应用连接的超时时间为30分钟。
假设应用服务器A在当前连接池中的连接数是9个,并且有3个连接的空闲时间已经超过了30分钟,JBOSS会如何处理呢?
答案1: 虽然有3个连接空闲超过了30分钟,但是JBOSS发现当前连接池中的连接数已经是min值了,所以,作为智能的应用容器,它不会进行任何处理。
答案2: JBOSS发现有3个连接的空闲时间超过30分钟,虽然当前连接池中的连接数已经是min值(9个),但是JBOSS不管三七二十一,还是继续将连接free。紧接着,在某个时候,JBOSS又发现当前连接只有6个了,小于min值,于是又创建了3个连接,从而使连接池中的连接数始终保持在min值以上。

同事读过部分的JBOSS源代码,告诉我它选择的处理方式是答案2。显然,JBOSS在处理这个问题上,处理的方式不是很友好(也许有它自己的考虑),。
结合上面的分析,我们大概明白,为什么连接数已经是min值了,但是依然会有大量的LOGON产生。

LOGON(大量新建连接)的产生有什么危害呢?
1.LOGON的产生,会影响数据库的资源,创建连接对数据库来说是资源消耗很大的一个操作。首先,创建一个连接大概需要100MS左右,一个CPU 1秒内能够支持的新建连接数在7-10个,另外还涉及到数据库内存的分配,数据库LATCH申请及数据字典更新,SOCKET建立等等。
2.JBOSS的工作也变多了,对应用也会有一定的影响。
3.MIN值太高,显然会多占一些数据库资源。仅从内存上来看,在专用服务器连接模式下,一个连接会多占数据库5MB的内存。

那么我们需要怎么样来合理的设置连接数呢,下面是分析的过程。

我们有一些统计信息表,其中有一个表C用于收集单个应用连接数据库的信息,主要是连接数,收集频率为5分钟/1次,。可以发现,基本所有的应用,连接数在这7天里始终保持在9个。
SQL>select CONNCOUNT, count(*)2 from C3where INSTANCE_NAME = ‘user’
4and username = ‘XXX’
5and machine like ‘%xxx%’
6group by CONNCOUNT;

CONNCOUNT COUNT(*)
———- ———-
4
1
5
4
6 16
7 31
8 32
9 238487
6 rows selected.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行