使用 AWS RDS 实例/Tomcat 的 JDBC 性能

使用 AWS RDS 实例/Tomcat 的 JDBC 性能

我在预生产和生产环境中都使用 RDS MySQL 数据库,但是在使用 Tomcat 服务器(Apache Tomcat/9.0.26)通过 JDBC(db.m5.large)访问生产服务器上的 RDS 实例时遇到了性能问题。

这是我正在进行的测试:

如果我在命令行中执行查询:

mysql> explain select * from contrat;
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | contrat | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  116 |   100.00 | NULL  |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

0.00 秒内 116 行,没问题。

但如果我通过 JDBC 执行相同的查询:

Started request at: 25-02-2020 08:40:57
Ended request at: 25-02-2020 08:41:16

它花费了将近 20 秒...并且只有 116 行,这对于生产服务器来说是不可接受的。

但奇怪的是,我的预生产 RDS 数据库没有遇到同样的性能问题……JDBC 查询在一秒钟内执行,而 RDS 预生产基于较小的配置 (db.t3.micro)。配置类似,如下所示:

上下文.xml

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
           maxTotal="500" maxIdle="30" maxWaitMillis="1000"
           username="mydblogin" password="mydbpassword" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://mydb.myurlaws.rds.amazonaws.com:3306/mydb?useUnicode=yes&amp;characterEncoding=utf8"/>

网页文件

 <resource-ref>
<description>MySQL Datasource</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

值得注意的是,对于预生产和生产 RDS 实例,加密均被禁用,并且都基于 SSD 存储。

我不明白为什么我的表现如此不佳......

您能告诉我应该在 JDBC 连接上设置哪个参数来提高数据库访问的性能吗?

相关内容