Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

sys.dm_db_xtp_table_memory_stats

Termin Definicja
sys.dm_db_xtp_table_memory_stats

sys.dm_db_xtp_table_memory_stats zwraca zużycie pamięci przez poszczególne tabele zoptymalizowane pod pamięć.

Rola sys.dm_db_xtp_table_memory_stats w SQL Server

sys.dm_db_xtp_table_memory_stats to dynamiczny widok zarządzania przeznaczony dla funkcji In-Memory OLTP w Microsoft SQL Server. Zwraca bieżące statystyki zużycia pamięci dla tabel zoptymalizowanych pod pamięć, czyli tabel utworzonych z opcją MEMORY_OPTIMIZED = ON. Nie jest to widok opisujący zwykłe tabele przechowywane na stronach danych w tradycyjnych plikach bazowych. Wiersze dotyczą obiektów tabelowych istniejących w bazie, w której wykonywane jest zapytanie.

Informacje z tego widoku są przydatne, gdy administrator chce ustalić, które tabele In-Memory OLTP zajmują najwięcej pamięci oraz czy obciążenie wynika głównie z danych tabeli, indeksów, czy wewnętrznych struktur silnika. Statystyki mają charakter obserwacyjny i pokazują stan środowiska w chwili odczytu. Nie stanowią samodzielnego mechanizmu ograniczania pamięci ani automatycznego zwalniania zajętych obszarów.

Znaczenie kolumn opisujących zajętość pamięci

Najważniejsze kolumny widoku rozdzielają pamięć przydzieloną od pamięci aktualnie wykorzystywanej. memory_allocated_for_table_kb określa pamięć przydzieloną na potrzeby danych tabeli, a memory_used_by_table_kb pokazuje jej wykorzystaną część. Analogiczna para kolumn dotycząca indeksów to memory_allocated_for_indexes_kb oraz memory_used_by_indexes_kb. Dzięki temu można odróżnić rozmiar zarezerwowanego obszaru od faktycznej ilości używanych struktur.

Widok zawiera również kolumny memory_allocated_for_system_kb i memory_used_by_system_kb. Odnoszą się one do pamięci systemowej związanej z obsługą danego obiektu. Identyfikację tabeli umożliwiają między innymi database_id oraz object_id. Wartości są podawane w kilobajtach, dlatego przy ręcznym porównywaniu z limitami pamięci lub wynikami innych widoków trzeba zachować tę samą jednostkę albo jawnie przeliczyć ją na megabajty.

Zapytanie do analizy tabel In-Memory OLTP

Podstawowe zestawienie można uzyskać, łącząc DMV z katalogowym widokiem sys.tables oraz sys.schemas. Przykładowe zapytanie wyświetla nazwę schematu, nazwę tabeli i wszystkie główne kategorie pamięci:

SELECT s.name AS schema_name, t.name AS table_name, x.memory_allocated_for_table_kb, x.memory_used_by_table_kb, x.memory_allocated_for_indexes_kb, x.memory_used_by_indexes_kb, x.memory_allocated_for_system_kb, x.memory_used_by_system_kb FROM sys.dm_db_xtp_table_memory_stats AS x JOIN sys.tables AS t ON t.object_id = x.object_id JOIN sys.schemas AS s ON s.schema_id = t.schema_id ORDER BY x.memory_used_by_table_kb + x.memory_used_by_indexes_kb + x.memory_used_by_system_kb DESC;

Wynik najlepiej analizować razem z definicją indeksów zapisanych w katalogu systemowym oraz z informacją o sposobie zasilania i usuwania danych. Duża wartość pamięci indeksów może wynikać z liczby indeksów, ich rodzaju i liczby przechowywanych wpisów, a nie wyłącznie z szerokości wierszy tabeli. Z kolei różnica między pamięcią przydzieloną a używaną nie musi oznaczać awarii; może odzwierciedlać sposób zarządzania strukturami pamięci przez silnik.

Interpretacja wyników podczas diagnostyki SQL Server

Wysokie zużycie pamięci przez tabelę zoptymalizowaną pod pamięć należy porównać z konfiguracją zasobów SQL Server oraz z innymi obiektami korzystającymi z In-Memory OLTP. Sam odczyt z sys.dm_db_xtp_table_memory_stats nie wyjaśnia jeszcze przyczyny wzrostu. Trzeba ustalić, czy przybyło rekordów, czy zmieniła się liczba indeksów, czy wystąpiły operacje aktualizacji generujące dodatkowe struktury wersjonowania. W tabelach In-Memory OLTP aktualizacje są realizowane przez mechanizmy charakterystyczne dla tego silnika, więc krótkotrwałe różnice między pamięcią używaną i przydzieloną wymagają obserwacji w czasie.

Diagnostykę warto prowadzić przez cykliczne zapisywanie wyników DMV i korelowanie ich z obciążeniem zapytań, operacjami ładowania danych oraz komunikatami SQL Server dotyczącymi presji pamięci. Jeżeli tabela lub jej indeksy zajmują coraz więcej miejsca, należy sprawdzić retencję danych, warunki usuwania rekordów i zasadność istniejących indeksów. Uprawnienia wymagane do odczytu widoków dynamicznych zależą od wersji SQL Server i zakresu informacji, dlatego zapytanie powinno być wykonywane przez konto posiadające odpowiednie uprawnienia diagnostyczne. Błędne wyniki lub brak wierszy mogą wynikać zarówno z braku tabel In-Memory OLTP w bieżącej bazie, jak i z niewłaściwego kontekstu bazy albo ograniczeń uprawnień.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę