sql - Hibernate + SQL Server 性能变量

标签 sql performance hibernate amazon-web-services tomcat

我在我们的生产服务器上遇到了一些性能问题。

1) 主体查询一般需要 0.5 秒,但有时需要 20 秒,(然后客户端会发疯,因为它似乎崩溃了)。查询是在一个 View 上进行的,它没有附加任何急切或惰性对象,只有普通属性。查询返回 100 条分页记录(超过 65.000 条记录)

为什么变化如此之大?我该如何改进查询,因为查询在大多数情况下都运行良好?

2) 通常,Javamelody 统计显示服务器同时使用 5 到 10 个连接。但有时这会达到最大值 (100),然后服务器变得繁忙且不稳定。

我们有 1800 到 2000 个 session 在处理应用程序。

这是我的配置:

Tomcat 服务器:AWS Linux EC2 实例 t2.medium

MS SQL Server:AWS Windows EC2 Instance c4.large(它有一个 SQL Server Express,现在我们正在转向 SQL Server Web Edition 以获得更强大的功能 [也许这就是问题所在? ])

JDBC 连接池配置:

<bean class="org.apache.commons.dbcp2.BasicDataSource" id="dataSource">
   <property name="url" value="jdbc:sqlserver://url..."/>
   <property name="username" value="username..."/>
   <property name="password" value="password..."/>
   <property name="initialSize" value="10"/>
   <property name="maxTotal" value="100"/>
   <property name="maxIdle" value="50"/>
   <property name="minIdle" value="10"/>
</bean>

我应该更改连接池配置吗?我怎样才能改善这些泄漏?

谢谢,抱歉我的英语不好。

最佳答案

我确认同时使用 5 到 10 个 jdbc 连接,查询耗时约 0.5 秒很多。这清楚地表明数据库肯定负载很重,当只有 2 个 vcpu 时更是如此。

查询有时需要 20 秒而不是 0.5 秒,这恰好是数据库难以跟上负载的时候:它们被放入队列中等待。 使用的 jdbc 连接数增加到 100 时数据库就会“放弃”:想象一下同时进行 100 个查询,而它已经很难同时处理 5 到 10 个查询。

在这种情况下,应该优化sql查询或更改数据库服务器。

关于sql - Hibernate + SQL Server 性能变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228988/

相关文章:

PHP、SQL 插入无效

sql - 为什么我不能简单地添加包含所有列的索引?

c++ - 表访问性能

performance - Node.js 比 Apache 慢

java - MySQL 上的@GeneratedValue 多态抽象父类(super class)

php - 如何连接两个表以获取共同值

sql - 选择更少的 SQL 列是否会使请求更快?

Eclipse PDT 有时会卡住

java - 如何使用 Hibernate` 使用 Spring JPA 将一个表的多个列映射到另一个表的单个父列

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Table doesn't exist