mysql实时流量降不下来

mysql实时流量降不下来,第1张

如果您的MySQL实时流量没有降下来,那么可能是由于以下几个原因:1. 您的MySQL数据库服务器的负载过高,可能是由于某些查询语句的执行时间过长,或者是由于某些 *** 作的执行时间过长;2. 您的MySQL数据库服务器的硬件资源不足,可能是由于硬件资源不足导致执行某些 *** 作时出现超时;3. 您的MySQL数据库服务器的网络环境不佳,可能是由于网络环境不佳导致MySQL数据库服务器的数据传输速度过慢;4. 您的MySQL数据库服务器的系统设置不当,可能是由于某些系统设置不当导致MySQL数据库服务器的性能不佳。建议您可以根据上述原因,进行相应的排查和调优,以解决您的MySQL实时流量没有降下来的问题。

1 读取 *** 作开始遇到的问题是当sql查询数据量比较大时候基本读不出来。开始以为是server端处理太慢。但是在控制台是可以立即返回数据的。于是在应用

这边抓包,发现也是发送sql后立即有数据返回。但是执行ResultSet的next方法确实阻塞的。查文档翻代码原来mysql驱动默认的行为是需要把整个结果全部读取到

内存中才开始允许应用读取结果。显然与期望的行为不一致,期望的行为是流的方式读取,当结果从myql服务端返回后立即还是读取处理。这样应用就不需要大量内存

来存储这个结果集。正确的流式读取方式代码示例:

PreparedStatement ps = connection.prepareStatement("select .. from ..",

ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

//forward only read only也是mysql 驱动的默认值,所以不指定也是可以的 比如: PreparedStatement ps = connection.prepareStatement("select .. from ..")

ps.setFetchSize(Integer.MIN_VALUE)//也可以修改jdbc url通过defaultFetchSize参数来设置,这样默认所以的返回结果都是通过流方式读取.

ResultSet rs = ps.executeQuery()

while (rs.next()) {

System.out.println(rs.getString("fieldName"))

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7310762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存