2016-08-30 4 views
1

У меня возникают проблемы с производительностью на нашем производственном сервере.Hibernate + переменная производительности SQL Server

1) Основной запрос занимает обычно 0,5 секунды, но иногда он занимает 20 секунд (тогда клиент сходит с ума, потому что кажется, что он разбился). Запрос выполняется над представлением, и у него нет привязанного или ленивого объекта, только простые атрибуты. Запрос возвращает 100 разбитых страниц (более 65 000 записей)

Почему такая переменная? Как я могу улучшить запрос, поскольку запрос работает отлично в большинстве случаев?

2) Как правило, статистика Javamelody показывает, что сервер использует между 5 и 10 соединениями одновременно. Но иногда это достигает максимального (100), а затем сервер становится занятым и неустойчивым.

У нас между 1800 и 2000 сеансами работы над приложением.

Это мой конфиг:

сервер Tomcat: AWS EC2 Linux Instance t2.medium

MS SQL Server: AWS EC2 для Windows Instance c4.large (имеет SQL Server Express и Теперь мы переходим к SQL Web Server Edition, чтобы получить более мощный)

JDBC Пулы соединений Configuration [возможно, это проблема?]:

<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- статистика ..http: //www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/ – TheGameiswar

ответ

1

Я подтверждаю, что 5-10 подключений jdbc, используемых в то же время, с запросами около 0,5 с. Это явное указание на то, что база данных, безусловно, загружена, тем более при наличии всего 2 ВЧПУ.

Запросы, занимающие иногда 20 секунд, а не 0,5 с, - это просто, когда база данных имеет серьезные трудности с тем, чтобы не отставать от нагрузки: они помещаются в очередь ожидания. И использовать соединения jdbc, увеличивающиеся до 100, - это когда база данных просто «сдается»: одновременно представьте себе 100 запросов, когда у нее уже есть проблемы с тем, чтобы не отставать от 5 до 10 запросов одновременно.

В этом случае запросы sql должны быть оптимизированы или сервер базы данных должен быть изменен.

Смежные вопросы