2016-08-30 39 views
1

我在生产服务器上遇到了一些性能问题。Hibernate + SQL Server性能变量

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

为什么这么可变?我该如何改进查询,因为大部分时间查询都正常工作?

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

我们正在从事应用程序的1800至2000年会议。

这是我的配置:

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

MS SQL服务器: AWS的Windows EC2实例c4.large(它有一个SQL Server Express和现在我们正在向一个SQL Server的网络版,以获得更强大的)

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> 

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

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

+0

连续收集等待状态持续一天,然后你就可以做一些分析 – TheGameiswar

+0

检查这个链接:http://www.sqlsentry.com/white-papers/troubleshooting-sql-server-wait- stats ..http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/ – TheGameiswar

回答

1

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

查询花费的时间有时是20s而不是0.5s,正好是数据库难以跟上负载的时候:它们被排队等待。 当数据库刚刚“放弃”时,使用的jdbc连接增加到100个:同时想象100个查询,同时它已经难以跟上5到10个查询。

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