【发布时间】:2013-07-01 09:27:07
【问题描述】:
我们的 Web 应用程序处于开发模式,我看到了一种模式复制。即 MySQl 程序的运行时间随着请求的数量线性增加。
我们的数据库非常小(~500mb)。打开页面时,并行调用 3 个过程(仅读取,不写入)。在正常运行中,我观察到运行过程大约需要0.5 sec。但有趣的是,当 3 个用户打开页面时:处理大约需要 3 秒(即调用 9 个过程)。
对于 5 个用户(即 15 个程序)大约需要 11 秒
对于 10 个用户(即 30个程序)约20秒
对于更多用户,它甚至增加到 40 多个。之后,即使我尝试从 mysql workbench 左右连接我的数据库,它也不会连接,直到我重新启动它。过程都是只读的。
我从Spring JDBC 给它打电话。我的config.xml:
//DBCP connection pool settings.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:initialSize="20" p:maxActive="-1" p:minIdle="5"
p:maxIdle="35" p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://10.0.1.100/warehouse?useUnicode=true&"
p:username="user" p:password="123" p:testOnBorrow="true"
p:validationQuery="SELECT 1" />
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
问题:和配置 MySQL 有关系吗?还是我的 DBCP 连接池?还有什么可能是这种行为的原因?
【问题讨论】:
-
这很可能归结为 MySQL。尝试通过在 db 访问代码周围强制执行
syncronized块来序列化对它的访问,看看它是否有所作为。 -
确实会(已经试过了)。但这又是一个瓶颈。
-
也许您正在重用与数据库的单一连接?这似乎响应时间随着请求数量的增长而成倍增加。所以吞吐量保持不变。 DB 应该更加并行。
-
不。这就是为什么我使用 DBCP 连接池来管理我的连接,没有上限。
-
@Jatin
synchronized用于诊断,而不用于修复。你不是想查明问题的根源吗?