Подтвердить что ты не робот

Проблемы с памятью SQL Server 2005 и tempdb

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

Сервер: Dual Quad Core Xeon ОЗУ 8 ГБ Одиночный массив RAID 10 Windows Server 2003 64-разрядный Стандартный 64-разрядный SQL Server 2005

Сейчас на машине имеется около 250 Мбайт свободной памяти. SQL Server имеет около 6 ГБ оперативной памяти, и наше программное обеспечение для мониторинга говорит, что на самом деле используется только половина выделенной оперативной памяти SQL Server.

Наша основная база данных составляет приблизительно 20 ГБ, причем около 12 ГБ используется с любой частотой. Наш tempdb стоит 700 МБ. Оба они расположены на одном физическом диске.

Кроме того, используя Filemon, я смог увидеть, что файл tempdb имел 100 или 1000 записей длиной 65536. Длина очереди диска составляла более 100% времени.

Итак, вот мои вопросы -

  • Что вызовет все эти записи на tempdb? Я не уверен, что у нас всегда была такая большая активность, но она кажется чрезмерной, и эти проблемы являются последними.

  • Должен ли я просто добавить больше памяти на сервер?

  • На серверах с высокой нагрузкой должны храниться файлы tempdb и db на отдельных массивах?

4b9b3361

Ответ 1

Длина очереди с высоким диском не означает, что у вас есть узкое место ввода-вывода, если у вас есть SAN или NAS, вы можете посмотреть другие дополнительные счетчики. Ознакомьтесь с SQL Server Urban Legends для более подробной информации.

1: Следующие операции в значительной степени используют tempdb

  • Повторное создание и удаление временных таблиц (локальных или глобальных)
  • Переменные таблицы, которые используют tempdb для хранения.
  • Рабочие таблицы, связанные с CURSORS
  • Рабочие таблицы, связанные с предложением ORDER BY
  • Рабочие таблицы, связанные с предложением GROUP BY
  • Рабочие файлы, связанные с HASH PLANS

Эти функции SQL Server 2005 также сильно влияют на tempdb:

  • управление версиями на уровне строк (создание снимков)
  • рефинансирование онлайн-индекса

Как упоминалось в других ответах SO, прочитайте эту статью о лучшей практике для повышения производительности tempdb.

2: Глядя на количество свободной ОЗУ на сервере, то есть глядя на счетчик WMI. Память- > Доступные Мбайты не помогают, поскольку SQL Server будет кэшировать страницы данных в ОЗУ, поэтому любой сервер db, который работает достаточно долго, будет иметь небольшую бесплатную ОЗУ.
Счетчики, на которые вы должны обратить внимание, более значимы в том, чтобы сообщить вам, поможет ли добавление ОЗУ на сервер:
Экземпляр SQL Server: буферный менеджер- > Ожидание жизни страницы (в секундах) Значение ниже 300-400 секунд будет означать, что страницы не находятся в памяти очень долго, и данные постоянно считываются с дисков. Серверы с низкой ожидаемой продолжительностью жизни страниц получат дополнительную оперативную память.
и
Экземпляр SQL Server: буферный менеджер- > Коэффициент попадания кэша буфера Это говорит о проценте страниц, которые были прочитаны из ОЗУ, которые не должны были считывать с диска, коэффициент попадания в кэш ниже 85 означает, что сервер получит дополнительную ОЗУ

3: Да, здесь не так. Рекомендуется использовать tempdb на отдельном диске. Посмотрите эту статью в статье в разделе "Перемещение базы данных tempdb о том, как это сделать".

Ответ 2

Отличный вопрос, +1

tempdb используется гораздо шире в SQL 2005+. По крайней мере: уровни изоляции моментальных снимков, перестроение онлайн-индекса, чтение INSERTED/DELETED в триггерах (используется для чтения файла журнала!)

Это в дополнение к обычному порядку по предложениям, временным таблицам и т.д.

Вероятно, вам лучше будет разбивать файлы журнала и данных (также для восстановления). Больше памяти всегда хорошо, но см. 64-разрядный конкретный материал, Grumpy Old DBA ниже.

Наконец, и, возможно, самое важное, возможно, у вас есть утверждение о распределении пространства в tempdb: Объяснения из Linchi Shea и Группа хранения SQL Server

Позднее редактирование:

Пол Рэндалл добавил запись "Всесторонняя серия сообщений блога tempdb ", которая предлагает хорошие ссылки

Ответ 4

Непосредственно ответ на ваш вопрос, но это может быть хорошим советом: перезапуск экземпляра SQL Server очистит tempdb, это может быть хорошим началом при исследовании действий, которые выполняются на tempdb.

Ответ 5

  • Записывает tempdb может быть что угодно. Внутренние хеш-таблицы, временные таблицы, переменная таблицы, вызовы хранимых процедур и т.д.

  • Если у вас есть только 250 мегабайт свободной памяти, тогда да, больше ОЗУ будет хорошо.

  • Всегда рекомендуется разбивать базы данных tempdb и пользователей на разные диски.

Все записи в tempdb будут размером 64 КБ, как размер каждой базы данных.