Czy indeksy zużywają pamięć?

10

Właśnie zaczynam się uczyć o użyciu pamięci na serwerze SQL. Podczas korzystania z zapytania w odpowiedzi na pytanie SQL Server 2008 R2 „Ghost Memory”? , Odkryłem, że pojedyncza baza danych zajmuje lwia część przestrzeni w puli buforów. Patrząc dalej, używając sys.allocation_unitsi sys.indexespotwierdziłem, że jest to prawdopodobnie spowodowane dużym wykorzystaniem indeksów w bazie danych. Większość indeksów jest zgrupowana.

Inny programista bazy danych uważa, że ​​mamy problemy z pamięcią na serwerze - że zapytania zaczynają działać długo, ponieważ nie ma dostępnej pamięci.

Moje pytanie brzmi - czy użycie tych indeksów i ich istnienie w puli buforów zabiera pamięć dostępną dla innych procesów?

JHFB
źródło
2
"Another database developer believes we are having memory issues on the server"-- Na podstawie czego? Ile pamięci RAM ma serwer, jakie są ustawienia pamięci instancji i ile pamięci zajmuje pamięć podręczna procedur?
Jon Seigel
Na podstawie wydłużonych czasów zapytań i patrzenia na Menedżera zadań - który według moich badań jest „brudnym, brudnym kłamcą” (dzięki Brent Ozar - brentozar.com/archive/2011/09/... ). Może się zdarzyć, że nie ma problemu z pamięcią - stosuję się do wszystkich sugestii zawartych w tych komentarzach i odpowiedziach!
JHFB
2
Ponieważ toczymy tutaj kulę 8, myślę, że zapytania działają wolno, ponieważ zostały napisane przez tego „innego” programistę baz danych ...
Remus Rusanu,

Odpowiedzi:

12

Tak, strony danych używanego indeksu buforowane w puli buforów zajmują miejsce w pamięci podręcznej danych . Ale nie pozwól, aby to odwróciło cię od używania indeksów (po pierwsze, indeks klastrowany to rzeczywiste dane tabeli, więc miej to również na uwadze). Korzystanie z indeksów (oczywiście odpowiednio zaprojektowanych i wdrożonych) jest dobrą rzeczą.

Problemy z pamięcią najprawdopodobniej nie wynikają z posiadania indeksów na stołach . Zanurz się w problemach z pamięcią, jakie dokładnie są problemy? Czy masz niską oczekiwaną długość życia strony ? Jak twoja pamięć jest skonfigurowana na serwerze? Czy maksymalna pamięć serwera jest zbyt niska, ograniczając wielkość puli buforów?

Aby uzyskać podział stron indeksu w pamięci podręcznej danych, możesz uruchomić poniższe zapytanie:

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

Aby uzyskać te statystyki według bazy danych:

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
Thomas Stringer
źródło
Przyzwoita (?) Długość życia strony - 4234. Muszę zbadać współczynnik trafień w pamięci podręcznej bufora i zajrzeć do innych części.
JHFB
To PLE w ogóle nie pokazuje presji pamięci. Coś ponad 1000 jako ogólna zasada (oczywiście zawsze istnieje „to zależy”) jest dopuszczalne.
Thomas Stringer
Współczynnik trafień w pamięci podręcznej bufora może być bardzo mylący lub bezużyteczny. Zobacz wielkie debaty SQL Server: Współczynnik trafień bufora bufora przez @JonathanKehayias.
Mark Storey-Smith
@ MarkStorey-Smith Zauważono, dziękuję za wskaźnik!
Thomas Stringer,
@JHFB Cofnijmy się o krok. Co sprawia, że ​​myślisz, że masz presję pamięci?
Thomas Stringer,
7

Indeksy zajmują miejsce w puli buforów, tak. To kolejny powód, dla którego powinieneś zadbać o swoją strategię indeksowania i zminimalizować duplikaty.

Potwierdziłem, że jest to prawdopodobnie spowodowane dużym wykorzystaniem indeksów w bazie danych. Większość indeksów jest zgrupowana.

Pamiętaj, że indeks klastrowany to tabela . Jedyny narzut, jaki istnieje dla indeksu klastrowego ponad stertę (co jest na ogół niepożądane), dotyczy stron indeksowych niepozostawiających liści i włączenia klucza klastra do wszystkich indeksów nieklastrowanych dla tej tabeli. Dlatego preferowane są wąskie klucze klastra.

Artykuły Kimberley Tripp na temat klastrowych wyborów kluczowych są do tego doskonałym odniesieniem.

Mark Storey-Smith
źródło
+1 Że artykuły pani Tripp są EPIC na kluczach do klastrowania ...
Fabricio Araujo