Назад | Перейти на главную страницу

Обновленный SQL-сервер, резко упала производительность

Обращаюсь за помощью с новым SQL-сервером.

На моем клиенте был запущен устаревший сервер SBS 2003 (Xeon 3060, 4 ГБ ОЗУ) и бизнес-приложение с базой данных SQL на 25 ГБ, использующее SQL Server 2005. У них 14 одновременных пользователей. На сервере был 1 гигабитный сетевой адаптер, и все подключено к одному 48-портовому гигабитному коммутатору.

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:

Я заменил сервер на новый (Xeon E5620, 48 гигабайт ОЗУ), работающий под управлением Hyper-V Server Core 2012. Новый сервер имеет 4 следующие сетевые адаптеры:

Виртуальные машины и выделенная память следующие:

СИМПТОМЫ:

Когда первые пользователи входят и начинают работать, он работает нормально, но уже через 5-10 минут производительность падает. Затем им требуется от 10 до 30 секунд, чтобы переключить «вкладки» в своем приложении. Это происходит как с проводными, так и с беспроводными клиентами.

На SQL-сервере выделено 16 гигов ОЗУ, конечно же SQL-сервис сразу занял 15 гигов. Поскольку этот сервер также обслуживает два других небольших приложения и общий файловый ресурс, я счел целесообразным ограничить память SQL до 10 гигабайт. Проблема сохраняется.

Решив, что мне нужно подойти к этому логически, я установил программное обеспечение для мониторинга различных аспектов сети, включая использование памяти и ЦП на обоих серверах, пропускную способность для обоих серверов и беспроводную сеть. Теперь, когда он собрал некоторые данные для меня, я считаю, что у меня все еще есть проблемы, связанные с памятью на сервере SQL.

Имейте в виду, что старый сервер работал с той же базой данных вместе с операционной системой SBS, Exchange, всеми общими файловыми ресурсами и SQL 2005 с общим объемом оперативной памяти 4 ГБ, поэтому я решил, что 16 ГБ должно быть в порядке. Конечно, я понимаю, что это другая ОС и другое программное обеспечение.

Что я сделал до сих пор:

  1. Ограничено 10 гигабайт экземпляра SQL, чтобы оставить ресурсы для других приложений и накладных расходов.
  2. Настроил резервную копию для выключения службы SQL в 12:30 и ее перезапуска в 1:00 (идея заключалась в том, чтобы освободить ресурсы)

Сотрудники клиента начинают приходить на работу примерно в 7:30 утра, производительность - к 8:00. На графике памяти сервера ниже вы можете видеть, что происходит следующее:

Доступная память составляет около 4 гигабайт с 12:30 предыдущего дня, служба SQL останавливается, а доступная память становится около 15 гигабайт. 1:00 запускается служба SQL и доступная память становится примерно 5,5 гигабайт 7:30 прибытие сотрудника 7:50 объем доступной памяти начинает уменьшаться (сотрудник начинает входить в приложения) 8:10 производительность низкая, сотрудник недоволен, начальник недоволен = я недоволен

Мои мысли и соображения:

Это медицинский кабинет, который принимает пациентов весь день. Более половины персонала получают доступ к картам пациентов на короткое время, пока пациент находится там. Вероятно, в долгосрочном кэшировании этой информации нет необходимости. Остальные сотрудники получают доступ к расписаниям, счетам и т. Д. Все из одного приложения.

  1. Доступная память сервера, похоже, связана. Согласен не согласен?
  2. Я читал о кеше файловой системы Windows, мне нужен совет по этому поводу.
  3. Я считаю, что мне следует выделить больше памяти для виртуальной машины SQL Server. Я могу уменьшить количество виртуальных машин Win8 и Win7 до 1 гигабайта и оставить 4 для ядра Hyper-V. Это дало бы мне 10 гигабайт, которые я мог бы бросить на сервер SQL, увеличив его до 26 гигабайт.
  4. Что касается пункта 3, я хотел бы получить совет о том, как выделить эту память на сервере. Должен ли я передать его ОС 2008 R2, передать его экземпляру SQL или распределить между двумя?
  5. Что еще мне следует сделать для повышения производительности.
  6. Использование ЦП и пропускная способность не являются проблемой из того, что я вижу, но, пожалуйста, посмотрите скриншоты ресурсов и графику на doaks.net/sqlhelp

Любой совет будет принят во внимание.

Спасибо.

Установка оборудования на SQL-сервер только поможет. Неверно сконфигурированные установки могут без видимой причины снизить производительность таких инструментов, как PerfMon. Если у вас нет значительного опыта настройки базы данных, наймите консультанта по SQL Server.

Если система работала приемлемо на меньшем количестве оборудования, вероятно, возникла проблема с конфигурацией. Компетентный консультант должен решить проблему менее чем за 5 часов. (https://www.google.com/?q=sql+server+consultant)

Если вы все еще хотите разобраться во всем, ознакомьтесь со следующими руководствами по устранению основных проблем с производительностью:

Кроме того, остановитесь с перезапуском - все, что вы делаете, заставляет SQL Server терять все полезные кеши, которые он использует для ускорения выполнения.

Доступная память сервера, вероятно, не имеет отношения к проблеме. Предполагается, что SQL Server съест всю память и оставит ее себе. Это сделано намеренно.

Когда вы обновляли SQL Server с SQL 2005 до SQL 2008 R2, обновляли ли вы статистику таблиц в базе данных SQL Server? Это необходимо сделать, поскольку статистика, созданная в SQL Server 2005, не используется в SQL Server 2008 и выше.

Вам нужно заглянуть внутрь SQL Server, чтобы увидеть, откуда возникают проблемы. Просто глядя на статистику ЦП, памяти и сети, вы получаете только половину картины. Планы выполнения SQL Server расскажут вам почти все, что вам нужно знать о том, что происходит, в частности, если статистика устарела (что, как я предполагаю, так и есть), если отсутствуют индексы. Кроме того, вам нужно посмотреть на фрагментацию индексов, чтобы увидеть, сильно ли они фрагментированы, что приводит к потере памяти и дополнительному физическому вводу-выводу.

Как выглядит ваша рабочая нагрузка ввода-вывода, в частности время отклика и количество операций ввода-вывода в секунду, как для чтения, так и для записи?

Что такое статистика ожидания в SQL Server? Происходит ли блокировка в базе данных при выполнении запросов?

Прекратить перезапуск экземпляра SQL Server? Все, что это делает, только усугубляет ситуацию и усложняет решение проблемы.

Есть ли в приложении много динамического SQL или все это делается с помощью хранимых процедур?