Обращаюсь за помощью с новым 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 ГБ должно быть в порядке. Конечно, я понимаю, что это другая ОС и другое программное обеспечение.
Что я сделал до сих пор:
Сотрудники клиента начинают приходить на работу примерно в 7:30 утра, производительность - к 8:00. На графике памяти сервера ниже вы можете видеть, что происходит следующее:
Доступная память составляет около 4 гигабайт с 12:30 предыдущего дня, служба SQL останавливается, а доступная память становится около 15 гигабайт. 1:00 запускается служба SQL и доступная память становится примерно 5,5 гигабайт 7:30 прибытие сотрудника 7:50 объем доступной памяти начинает уменьшаться (сотрудник начинает входить в приложения) 8:10 производительность низкая, сотрудник недоволен, начальник недоволен = я недоволен
Мои мысли и соображения:
Это медицинский кабинет, который принимает пациентов весь день. Более половины персонала получают доступ к картам пациентов на короткое время, пока пациент находится там. Вероятно, в долгосрочном кэшировании этой информации нет необходимости. Остальные сотрудники получают доступ к расписаниям, счетам и т. Д. Все из одного приложения.
Любой совет будет принят во внимание.
Спасибо.
Установка оборудования на 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 или все это делается с помощью хранимых процедур?