| Termin | Definicja |
|---|---|
| SYS.DM_DB_SESSION_SPACE_USAGE | sys.dm_db_session_space_usage pokazuje zużycie tempdb przez poszczególne sesje. Co dokładnie raportuje ten widok dynamicznysys.dm_db_session_space_usage to widok zarządzania dynamicznego pokazujący, ile stron w bazie tempdb przydzieliła i zwolniła każda sesja połączona z serwerem. Zwraca cztery liczące kolumny: przydzielone i zwolnione strony obiektów użytkownika oraz przydzielone i zwolnione strony obiektów wewnętrznych. Do tego dochodzi identyfikator sesji, po którym łączy się go z widokiem opisującym sesje, żeby zobaczyć nazwę zalogowanego użytkownika i program kliencki. Ponieważ strona ma osiem kilobajtów, przeliczenie na megabajty polega na pomnożeniu liczby stron przez osiem i podzieleniu przez tysiąc dwadzieścia cztery. Obiekty użytkownika kontra obiekty wewnętrzneRozróżnienie tych dwóch grup jest sednem diagnostyki. Obiekty użytkownika to tabele tymczasowe tworzone z prefiksem znaku krzyżyka oraz zmienne tabelaryczne — powstają, bo ktoś je jawnie zadeklarował w kodzie. Obiekty wewnętrzne tworzy sam silnik: robocze przestrzenie sortowania, tablice mieszające przy złączeniach haszujących, bufory kursorów i pośrednie wyniki. Duża wartość w tej drugiej grupie oznacza zwykle, że plan wykonania przelewa operacje na dysk, bo pamięć przyznana zapytaniu okazała się za mała, co najczęściej wynika z nieaktualnych statystyk i błędnych oszacowań liczby wierszy. Dla pojedynczych wykonywanych właśnie żądań istnieje bliźniaczy widok raportujący zużycie na poziomie zadania, przydatny, gdy problem trwa w tej chwili. Jak nie pomylić się przy czytaniu wynikówPierwsza pułapka to interpretacja samej wartości przydziału. Bieżące zużycie sesji to różnica między przydzielonymi a zwolnionymi stronami; liczba przydzielonych rośnie przez cały czas życia połączenia i u długo działającej aplikacji może być ogromna, mimo że w tej chwili sesja nie trzyma niczego. Druga to zakres: widok mówi wyłącznie o tempdb i nic nie powie o zajętości baz użytkownika. Trzecia dotyczy trwałości danych — wpisy znikają wraz z zakończeniem sesji, więc winowajca, który zdążył się rozłączyć, nie zostawia śladu i trzeba zbierać próbki cyklicznie. Warto też pamiętać, że przy włączonym wersjonowaniu wierszy magazyn wersji zajmuje tempdb niezależnie od sesji i widać go dopiero w widoku opisującym zajętość plików bazy. Kiedy tempdb kończy się w środku dnia pracyW firmach pracujących na oprogramowaniu handlowym objaw wygląda zawsze podobnie: około południa, przy generowaniu raportów za miesiąc, program zgłasza brak miejsca w bazie, a po restarcie usługi wszystko wraca do normy. Ustalamy wtedy, które zapytania zalewają tempdb, sprawdzamy plan wykonania i statystyki, dobieramy liczbę plików danych tempdb do liczby rdzeni procesora i przenosimy je na szybszy nośnik, jeśli serwer wciąż pracuje na dysku talerzowym. Zajmujemy się też samym sprzętem serwerowym i stanowiskami użytkowników. Sprzęt przewożą nasi kierowcy, bez pośrednictwa firm kurierskich. |