我在预生产和生产环境中都使用 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&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 连接上设置哪个参数来提高数据库访问的性能吗?