【发布时间】:2021-01-19 13:17:14
【问题描述】:
我有访问 MySQL (5.7) 数据库的 Wicket (8.6) 应用程序。在spring-context.xml中建立mysql连接如下:
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
destroy-method="close">
<property name="dataSourceClassName" value="com.mysql.cj.jdbc.MysqlDataSource" />
<property name="maximumPoolSize" value="5" />
<property name="maxLifetime" value="90000" />
<property name="idleTimeout" value="90000" />
<property name="connectionTimeout" value="90000" />
<property name="dataSourceProperties">
<props>
<prop key="url">jdbc:mysql://${db.url}/${db.name}?useGmtMillisForDatetimes=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8</prop>
<prop key="user">${db.username}</prop>
<prop key="password">${db.password}</prop>
<prop key="prepStmtCacheSize">250</prop>
<prop key="prepStmtCacheSqlLimit">2048</prop>
<prop key="cachePrepStmts">true</prop>
<prop key="useServerPrepStmts">true</prop>
</props>
</property>
</bean>
我有一个问题,我需要执行一个很长的 SQL 查询,根据所选的时间范围,这很容易需要几分钟。我已经体验到,在执行查询时,整个检票口应用程序减慢到一定程度,不再执行其他查询。顺便说一句:长查询只是一个阅读查询。所以它不应该锁定一个表。
如果有人可以帮助我改善 wicket 和 mysql 之间的连接,我将不胜感激,以便在执行长查询时我仍然可以运行多个查询。 MySQL的配置我不是很熟悉
以下是 my.cnf 文件中的一些设置:
skip-external-locking
innodb_file_per_table = 1
innodb_file_format = Barracuda
internal_tmp_disk_storage_engine=MyISAM
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
【问题讨论】:
-
创建另一个到 mysql 的连接并将其用于短期运行的 sql 语句。
-
附加信息请求。 RAM 大小、# 核心、MySQL 主机服务器上的任何 SSD 或 NVME 设备?在 pastebin.com 上发布并分享链接。从您的 SSH 登录根目录中,文本结果为:B) SHOW GLOBAL STATUS;至少 24 小时正常运行时间后 C) 显示全局变量; D) 显示完整的处理程序; E) 状态;和 可选的非常有用的信息,如果可用,包括 - htop 或 top 用于大多数活动应用程序,ulimit -a 用于 Linux/Unix 限制列表,iostat -xm 5 3 用于按设备和核心/cpu 计数的 IOPS,用于服务器工作负载调整分析提供建议。