Я использую базу данных 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&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-соединении, чтобы улучшить производительность доступа к базе данных?