Индексы потребляют память?


10

Я только начинаю узнавать об использовании памяти на SQL Server. При использовании запроса в ответе на вопрос SQL Server 2008 R2 «Ghost Memory»? Я обнаружил, что одна база данных занимает львиную долю пространства в пуле буферов. Глядя дальше, используя sys.allocation_unitsи sys.indexes, я подтвердил, что это, вероятно, вызвано интенсивным использованием индексов в базе данных. Большинство индексов являются кластерными.

Другой разработчик базы данных считает, что у нас проблемы с памятью на сервере - что запросы начинают выполняться долго, потому что нет доступной памяти.

Мой вопрос здесь - использует ли эти индексы и их существование в пуле буферов память, доступную для других процессов?


2
"Another database developer believes we are having memory issues on the server"- на основании чего? Сколько оперативной памяти имеет сервер, каковы параметры памяти экземпляра и сколько памяти используется кэшем процедур?
Джон Зигель

Основываясь на увеличенном времени запросов и просмотре диспетчера задач, который, как показало мое исследование, является «грязным, грязным лжецом» (спасибо Бренту Озару - brentozar.com/archive/2011/09/… ). Я могу обнаружить, что нет проблем с памятью - я следую всем предложениям, представленным в этих комментариях и ответах!
JHFB

2
Поскольку мы здесь набрасываем 8 шаров, я думаю, что запросы выполняются медленно, потому что они были написаны этим «другим» разработчиком базы данных ...
Ремус Русану

Ответы:


12

Да, страницы данных используемого индекса, которые кэшируются в пуле буферов, будут занимать пространство в кэше данных . Но не позволяйте этому отказаться от использования индексов (во-первых, кластерный индекс - это фактические данные таблицы, так что имейте это в виду). Использование индексов (конечно, правильно спроектированных и реализованных) - это хорошо.

Проблемы с памятью, скорее всего, связаны с отсутствием индексов в ваших таблицах . Погрузитесь в проблемы с памятью, какие именно проблемы? У вас низкая продолжительность жизни страницы ? Как настроена ваша память на сервере? Ограничивает ли максимальный объем памяти сервера размер пула буферов?

Чтобы получить разбивку страниц индекса в вашем кэше данных, вы можете выполнить следующий запрос:

select
    count(*) as total_page_count,
    count(*) * 8 as total_consumption_kb,
    sum(row_count) as total_row_count
from sys.dm_os_buffer_descriptors
where page_type = 'INDEX_PAGE'
group by page_type

Чтобы получить эту статистику по базе данных:

select
    db_name(database_id) as database_name,
    count(*) as total_page_count,
    count(*) * 8 as total_consumption_kb,
    sum(row_count) as total_row_count
from sys.dm_os_buffer_descriptors
where page_type = 'INDEX_PAGE'
group by database_id
order by total_consumption_kb desc

Приличная (?) Продолжительность жизни страницы - 4234. Мне нужно изучить коэффициент попадания в буферный кеш и изучить другие части.
JHFB

Это PLE не показывает давление памяти вообще. Все, что больше 1000, как правило (всегда есть «это зависит»), является приемлемым.
Томас Стрингер

Коэффициент попадания в буферный кэш может быть очень обманчивым или бесполезным. См. Великие дебаты по SQL Server: коэффициент попадания в буферный кэш @JonathanKehayias.
Марк Стори-Смит

@ MarkStorey-Смит отметил, спасибо за указатель!
Томас Стрингер

@JHFB Давайте сделаем шаг назад. Что заставляет вас думать, что у вас давление памяти?
Томас Стрингер

7

Индексы занимают место в буферном пуле, да. Это еще одна причина, почему вы должны позаботиться о стратегии индексирования и минимизировать дубликаты.

Я подтвердил, что это, вероятно, вызвано интенсивным использованием индексов в базе данных. Большинство индексов являются кластерными.

Помните, что кластерный индекс - это таблица . Единственные издержки, которые существуют для кластеризованного индекса сверх кучи (что обычно нежелательно), относятся к страницам неполных индексов и включению ключа кластера во все некластеризованные индексы для этой таблицы. Вот почему узкие ключи кластера являются предпочтительными.

Статьи Кимберли Триппа о кластерном выборе ключей являются отличным справочным материалом для этого.


+1 То, что статьи г-жи Трипп являются EPIC по кластеризации ключей ...
Fabricio Araujo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.