2016-08-30 76 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查詢或更改數據庫服務器。