0

我们的 Web 应用程序处于开发模式,我已经看到了模式复制。即 MySQl 程序的运行时间随着请求的数量线性增加。

我们的数据库非常小(~500mb)。在打开一页时,并行调用 3 个过程(只读取,不写入)。在正常运行中,我观察0.5 sec到运行一个过程需要大约 10 分钟。但有趣的是,当 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&amp;"
    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 连接池?还有什么可能是该行为的原因?

4

1 回答 1

1

问题:它与配置 MySQL 有关吗?

可能不是。

还是我的 DBCP 连接池?

可能不是。

还有什么可能是这种行为的原因?

如果数据库服务器的性能是瓶颈,这听起来会出现这种行为。这样的瓶颈可能是由于服务器受 CPU 限制或磁盘 IO 限制,或者每个查询都需要对同一个表或一组行或某事进行长时间的独占访问。

另一种可能性是问题是由于客户端的并发瓶颈。例如,如果每个请求都执行以下操作:

  synchronized (someGlobalLock) {
     // perform queries, updates
  }

那么您将有效地序列化这些请求的数据库操作的执行。当同时执行 N 个请求时,这将导致经过的时间线性增加。


但老实说,如果不详细查看 Java 代码、数据库模式和查询以及(也许)数据库配置,就很难预测原因是什么。

于 2013-07-01T09:42:12.887 回答