Назад | Перейти на главную страницу

Производительность JDBC с использованием экземпляра AWS RDS / Tomcat

Я использую базу данных RDS MySQL как для предварительной, так и для производственной среды, но у меня возникают проблемы с производительностью на производственном сервере при доступе к экземпляру RDS через JDBC (db.m5.large) с сервером Tomcat (Apache Tomcat / 9.0.26).

Вот тест, который я выполняю:

Если я выполняю запрос в командной строке:

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)

116 строк за 0,00 сек, без проблем.

но если я выполняю тот же запрос через 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). Конфигурация аналогичная, вот она:

context.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"/>

web.xml

 <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>

Важно отметить, что как для preprod, так и для prod экземпляров RDS шифрование отключено, и оба основаны на хранилище SSD.

Не понимаю, почему у меня такая низкая производительность ...

Не могли бы вы сказать мне, какой параметр я должен установить в моем JDBC-соединении, чтобы улучшить производительность доступа к базе данных?