【问题标题】:Hibernate + SQL Server Performance variableHibernate + SQL Server 性能变量
【发布时间】:2016-08-30 13:33:47
【问题描述】:

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

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

为什么这么多变?我该如何改进查询,因为查询在大多数情况下都可以正常工作?

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

我们有 1800 到 2000 个会话在使用该应用程序。

这是我的配置:

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

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

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>

我应该更改连接池配置吗?如何改善这些漏洞?

谢谢你,对不起我的英语。

【问题讨论】:

标签: sql performance hibernate amazon-web-services tomcat


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多