SQL Server 2008 постоянно читает MDF-файл, производительность ужасная

SQL Server 2008 постоянно читает MDF-файл, производительность ужасная

У нас есть приложение, которое запускает SQL Server 2008 R2 Express на бэкэнде на виртуальном сервере Windows 2008 R2, работающем на VMWare ESXi. Пользователи жалуются, что приложение работает очень медленно. Я вижу очень высокий дисковый ввод-вывод, который для меня не имеет смысла.

Фон:

  • Средняя длина очереди диска составляет около 60, максимальная — около 250.
  • Среднее количество операций чтения с диска в секунду составляет около 2000, максимальное — около 3500.
  • Resource Monitor показывает, что sqlservr.exe читает файл .mdf со скоростью около 40-60 МБ/сек (см. ниже). Скорость ввода-вывода записи очень низкая.
  • Файл .mdf весит всего 2 ГБ, а это значит, что он весь должен поместиться в памяти.
  • На сервере установлено 32 ГБ оперативной памяти, из которых обычно используется менее 16 ГБ.
  • На сервере установлено 8x 15k SAS-дисков в RAID10. Это Dell с контроллером PERC H710, который может использовать SSD для включения CacheCade (кэш чтения на основе SSD), что я и хотел бы попробовать, но, похоже, все это в любом случае должно кэшироваться в оперативной памяти, поэтому я не уверен, что это поможет.
  • Виртуальная машина SQL установлена ​​на сервере Dell под управлением VMWare ESXi 5. На этом хосте ESXi есть еще одна виртуальная машина, но это контроллер домена с очень небольшим объемом ввода-вывода.
  • Это приложение ранее работало на автономном сервере Windows 2003. Мы обновились до Windows 2008 R2 и одновременно обновили приложение до более новой версии, так что, возможно, любой из этих факторов может быть причиной.

Какие есть варианты, чтобы разобраться в этом глубже? Есть ли способ увидеть, что SQL-сервер делает под капотом (какие запросы выполняются и т. д.)? Кажется ли такое поведение нормальным, и нагрузка просто слишком велика для хранилища? Мне интересно, что-то настроено неправильно.

введите описание изображения здесь

решение1

http://msdn.microsoft.com/en-us/library/cc645993(v=sql.105).aspx#Масштабируемость

Espress не будет использовать более 1 ГБ оперативной памяти для процесса SQL. Вам нужно купить и установить как минимум Web или Standard, чтобы использовать более 4 ГБ — они оба поддерживают 64, что больше, чем у вас есть, так что выбирайте один из них.

Кроме того, быть администратором баз данных — довольно глубокая тема, но она легко доступна через Technet и файл справки. «Как узнать, какие запросы выполняются» — это, по сути, тема первого дня (как и знание того, какая редакция подходит для данной задачи). Profiler даже недоступен для Express, так что вы влипли в неприятности, учитывая ваши текущие настройки.

решение2

Посмотрите на детали запроса - проверьте запросы с высоким физическим или логическим вводом-выводом, изолируйте их, посмотрите на план запроса. Годами я использовал устаревшую версию вроде 2008 R2... http://gallery.technet.microsoft.com/scriptcenter/Find-ineffective-query-88f4611fможет дать вам повод для размышлений.

Я бы указал на отсутствие индексов, вызывающих сканирование таблиц. Мастера профилирования и настройки также могут помочь понять, где проблема. ЕСЛИ 2008 R2 уже имеет обзор активности в менеджере, то это имеет хорошее окно с самыми дорогими запросами.

Связанный контент