| Termin | Definicja |
|---|---|
| tempdb | tempdb to baza systemowa SQL Server przechowująca dane tymczasowe, wykorzystywana przez wszystkie bazy na instancji. Rola tempdb w architekturze SQL Servertempdb jest systemową bazą danych silnika Microsoft SQL Server. Każda instancja SQL Server ma własną bazę tempdb, z której korzystają wszystkie bazy użytkownika działające w tej instancji. Służy ona do przechowywania danych tymczasowych tworzonych podczas wykonywania zapytań, procedur składowanych, sortowania, operacji grupowania, łączenia tabel oraz innych działań wymagających obszaru roboczego na dysku. W tempdb mogą znajdować się między innymi lokalne tabele tymczasowe tworzone za pomocą nazw rozpoczynających się od #, globalne tabele tymczasowe oznaczane przez ##, tabele robocze zakładane wewnętrznie przez optymalizator oraz dane wersjonowane używane przez mechanizmy izolacji transakcji. Obiekty tymczasowe utworzone przez sesję są powiązane z jej zakresem działania, natomiast obiekty wewnętrzne są zarządzane przez silnik SQL Server. Obiekty tymczasowe, sortowanie i wersjonowanie danychPodczas wykonania zapytania SQL Server może wykorzystać tempdb jako obszar roboczy. Dzieje się tak między innymi wtedy, gdy operacja sortowania, agregacji albo łączenia tabel wymaga większej ilości pamięci, niż przydzielono operatorowi wykonawczemu. W takiej sytuacji część danych może zostać zapisana w tempdb. W planie wykonania pojawiają się wtedy sygnały takie jak ostrzeżenia dotyczące operacji spill, czyli przeniesienia danych z pamięci do plików tymczasowych. tempdb przechowuje także wersje wierszy potrzebne przy określonych poziomach izolacji transakcji oraz przez niektóre mechanizmy współbieżności. Jeżeli aktywne transakcje długo pozostają otwarte, wersje wierszy mogą być utrzymywane dłużej, zwiększając zajętość tej bazy. Wysokie użycie tempdb nie oznacza więc automatycznie błędu w samej bazie. Może wynikać z dużego zapytania, nieodpowiedniego planu wykonania, długiej transakcji, intensywnego użycia tabel tymczasowych albo działania funkcji wymagających przechowywania wersji danych. Obiekty utworzone w tempdb nie są przeznaczone do trwałego przechowywania danych biznesowych. Po ponownym uruchomieniu usługi SQL Server baza tempdb jest tworzona od nowa na podstawie konfiguracji zapisanej w instancji. Dane zapisane w niej wcześniej nie są zachowywane, dlatego tempdb nie powinna pełnić funkcji zwykłej bazy użytkowej. Pliki, miejsce na dysku i symptomy przeciążeniatempdb składa się z pliku danych oraz pliku dziennika transakcji, a w wielu konfiguracjach także z kilku plików danych. Rozmiary, lokalizacje i ustawienia automatycznego wzrostu tych plików wpływają na zachowanie instancji. Jeżeli pliki osiągną limit wolnego miejsca na woluminie albo nie mogą powiększyć się zgodnie z konfiguracją, zapytania korzystające z tempdb mogą kończyć się błędami. Skutkiem może być również zatrzymanie operacji wymagających tabel tymczasowych, sortowania lub wersjonowania. Do typowych objawów problemów z tempdb należą nagłe wydłużenie czasu wykonywania zapytań, błędy braku miejsca, intensywne operacje wejścia i wyjścia oraz oczekiwania związane z alokacją stron lub dostępem do struktur systemowych. Sama wielkość zajętego miejsca nie wystarcza do ustalenia przyczyny. Należy rozróżnić przestrzeń zajętą przez tabele tymczasowe, obiekty wewnętrzne, magazyn wersji i dziennik transakcji, ponieważ każda z tych kategorii może wskazywać na inny problem. Diagnostyka obejmuje sprawdzenie właściwości plików tempdb, wolnego miejsca na dyskach, aktywnych sesji, długo trwających transakcji, planów wykonania oraz zapytań wykonujących duże sortowania lub łączenia. Przydatne są między innymi widoki dynamicznego zarządzania, takie jak sys.dm_db_file_space_usage, sys.dm_db_task_space_usage i sys.dm_db_session_space_usage. Wyniki trzeba interpretować w kontekście wersji SQL Server, obciążenia instancji i czasu wystąpienia problemu. Bezpieczna diagnostyka konfiguracji tempdbPodczas analizy należy najpierw ustalić, czy problem dotyczy pojemności, wydajności dysku, alokacji stron, wersjonowania, dziennika transakcji czy konkretnego zapytania. Sprawdzenie rozmiaru plików można wykonać przez katalogi systemowe SQL Server, a informacje o bieżącym wykorzystaniu przestrzeni można uzyskać za pomocą widoków dynamicznego zarządzania. Nie należy usuwać plików tempdb ręcznie z systemu plików ani traktować restartu usługi jako trwałego rozwiązania problemu z zapytaniem. Konfiguracja powinna uwzględniać przewidywane obciążenie, dostępne miejsce, parametry podsystemu dyskowego oraz sposób wzrostu plików. Wielokrotne, małe automatyczne przyrosty mogą powodować częste operacje powiększania plików, natomiast zbyt duży jednorazowy przyrost może chwilowo obciążyć system. Zmiana lokalizacji lub rozmiaru plików wymaga użycia mechanizmów administracyjnych SQL Server i zaplanowania restartu wtedy, gdy jest on wymagany przez konkretną zmianę. W środowisku, w którym tempdb szybko się zapełnia, sama rozbudowa plików może tylko odsunąć objaw. Równolegle trzeba przeanalizować zapytania generujące największe zużycie przestrzeni, długość transakcji, dobór indeksów, statystyki oraz plany wykonania. W przypadku problemów z wydajnością istotne jest także ustalenie, czy ograniczeniem jest przepustowość dysku, pamięć przydzielona zapytaniom, blokowanie czy konkurencja o struktury alokacji. |