| Termin | Definicja |
|---|---|
| Procedura z użyciem tempdb | Procedura z użyciem tempdb odkłada dane pośrednie w tabelach tymczasowych tej bazy systemowej. Procedura z użyciem tempdb – czym jest i do czego służyProcedura z użyciem tempdb to sposób realizacji operacji bazodanowej, w którym dane powstające po drodze są zapisywane w tymczasowych obiektach należących do specjalnej bazy roboczej. Takie obiekty mogą przyjmować postać tabel tymczasowych, zmiennych tabelarycznych, struktur tworzonych na czas wykonania zapytania albo obszarów roboczych wykorzystywanych przez silnik podczas sortowania, grupowania i łączenia danych. Nie zakłada się przy tym, że zawartość tymczasowa będzie przechowywana jako trwała część modelu aplikacji. Po zakończeniu sesji, transakcji lub konkretnej operacji dane mogą zostać usunięte automatycznie, zależnie od rodzaju użytego obiektu i ustawień środowiska. W praktyce procedura może pobrać dane z kilku tabel, ograniczyć je do wybranego zakresu, usunąć powtórzenia, obliczyć wartości pośrednie i zapisać wynik w tabeli tymczasowej. Następnie na takim zbiorze można wykonać kolejne zapytania, raportowanie albo aktualizację danych docelowych. Dzięki temu skomplikowana logika zostaje podzielona na czytelne etapy. Każdy etap może być osobno sprawdzony, a rezultat pośredni może zostać wykorzystany więcej niż raz bez ponownego wykonywania całego zapytania źródłowego. Tempdb nie jest zwykłym katalogiem plików przeznaczonym do ręcznego przechowywania dokumentów. Jest zarządzaną przez system bazą roboczą, z której korzystają równocześnie różne sesje i procesy. Z tego powodu poprawnie zaprojektowana procedura powinna ograniczać ilość zapisywanych danych, usuwać zbędne obiekty oraz zwalniać zasoby tak szybko, jak to możliwe. W przeciwnym razie obciążenie może dotyczyć nie tylko jednej procedury, lecz także innych zadań wykonywanych w tym samym środowisku. Procedura z użyciem tempdb a tabele trwałe i pamięć operacyjnaNajważniejsza różnica między tabelą tymczasową a tabelą trwałą dotyczy czasu życia danych i celu ich wykorzystania. Tabela trwała stanowi element bazy aplikacyjnej, ma określone znaczenie biznesowe i zwykle powinna zachować dane po zakończeniu połączenia. Tabela tymczasowa służy natomiast do przechowania wyniku pośredniego, który jest potrzebny podczas przetwarzania. Nie powinno się zastępować tabel trwałych obiektami tymczasowymi tylko po to, aby uprościć projekt, ponieważ po ponownym uruchomieniu procedury zawartość może już nie istnieć. Tempdb bywa również mylona z pamięcią operacyjną. Silnik może przechowywać część danych roboczych w pamięci, jednak przy większych zbiorach lub określonych planach wykonania potrzebne staje się zapisanie informacji na dysku. Tabela tymczasowa nie daje gwarancji, że wszystkie jej dane pozostaną wyłącznie w pamięci. Ostateczny sposób obsługi zależy między innymi od rozmiaru zbioru, dostępnych zasobów, rodzaju operacji, indeksów oraz bieżącego obciążenia. W porównaniu z pojedynczym, bardzo rozbudowanym zapytaniem procedura oparta na kilku tabelach tymczasowych może być łatwiejsza do diagnozowania. Można sprawdzić liczbę wierszy po każdym etapie, zweryfikować typy danych i odszukać moment, w którym wynik zaczyna odbiegać od oczekiwań. Z drugiej strony dodatkowe zapisy i odczyty w tempdb mogą zwiększyć koszt wykonania. Nie istnieje więc uniwersalna zasada, według której tabela tymczasowa zawsze poprawia albo zawsze pogarsza wydajność. Ocena powinna wynikać z planu wykonania i rzeczywistego zachowania procedury. Warto odróżnić tabelę tymczasową od zmiennej tabelarycznej. Oba rozwiązania mogą służyć do przechowania danych pośrednich, ale silnik może inaczej szacować ich rozmiar, dobierać plan i stosować indeksowanie. Przy małej liczbie wierszy różnica może być niewielka. Przy większym zbiorze albo złożonych połączeniach wybór obiektu ma większe znaczenie. Należy również zwrócić uwagę na zakres widoczności: niektóre obiekty są dostępne tylko w obrębie konkretnej procedury, inne mogą być widoczne w ramach całej sesji. Procedura z użyciem tempdb – typowe problemy i ich objawyJednym z częstszych problemów jest nadmierne zużycie przestrzeni roboczej. Może do niego prowadzić pobieranie niepotrzebnych kolumn, brak filtrów na wczesnym etapie, wielokrotne kopiowanie tych samych danych albo pozostawianie dużych tabel tymczasowych do końca długiej sesji. Objawem bywa spowolnienie procedury, oczekiwanie na zapis, zwiększona aktywność dysku lub wpływ na inne zapytania uruchamiane w tym samym czasie. Problemy mogą wynikać także z nieodpowiedniego indeksu. Tabela tymczasowa bez indeksu może wymagać wielokrotnego skanowania, ale nadmiar indeksów zwiększa koszt wstawiania oraz modyfikowania wierszy. Przy projektowaniu należy przeanalizować, według jakich kolumn wykonywane są połączenia, filtrowanie i sortowanie. Indeks powinien odpowiadać faktycznemu sposobowi użycia danych, a nie być dodawany automatycznie do każdej kolumny. Istotne znaczenie mają typy danych. Łączenie kolumn o różnych typach może prowadzić do niejawnych konwersji, ograniczyć możliwość użycia indeksu i zwiększyć liczbę operacji wykonywanych przez silnik. Podobny efekt może wystąpić przy zbyt szerokich typach tekstowych, niepotrzebnym pobieraniu wartości o dużej długości albo stosowaniu funkcji na kolumnach używanych w warunkach wyszukiwania. W procedurze warto jawnie kontrolować typy i rozmiary danych przenoszonych do obiektów tymczasowych. Odrębną grupę stanowią błędy logiczne. Wstawienie danych do tabeli tymczasowej bez właściwego warunku może doprowadzić do wielokrotnego zapisania tych samych rekordów. Brak kontroli liczby wierszy może skutkować wykonaniem kolejnego etapu na pustym zbiorze lub na danych niepełnych. Ryzyko rośnie, gdy procedura wykorzystuje kilka etapów, obsługuje różne warianty parametrów albo działa w ramach transakcji obejmującej wiele operacji. Należy uważać również na współbieżność. Tempdb jest współdzielona przez wiele sesji, dlatego kłopot z jej wydajnością nie musi być spowodowany jedną procedurą. Konieczne może być rozdzielenie problemu na kilka obszarów: rozmiar obiektów, czas ich życia, intensywność operacji, oczekiwania na zasoby i sposób konfiguracji plików bazy roboczej. Sama obserwacja czasu wykonania bez analizy planu i oczekiwań często nie wystarcza do znalezienia przyczyny. Procedura z użyciem tempdb – praktyczne wskazówki projektowePrzed utworzeniem tabeli tymczasowej należy ustalić, jaki etap obliczeń ma ona obsługiwać i jak długo dane będą potrzebne. Pozwala to ograniczyć zakres kolumn oraz liczbę wierszy. Warto filtrować dane możliwie wcześnie, zamiast przenosić do tempdb cały zbiór i dopiero później go zawężać. Pomocne jest także przechowywanie tylko tych wartości, które są wymagane w następnym kroku. Mniejszy obiekt oznacza zwykle mniej operacji zapisu, odczytu i sortowania. W procedurze powinno się zachować przejrzystą kolejność działań. Najpierw może zostać przygotowany zbiór bazowy, później wykonane oczyszczenie danych, następnie połączenie z dodatkowymi tabelami i na końcu agregacja. Po każdym etapie warto kontrolować rezultat podczas testów: liczbę wierszy, występowanie wartości pustych, duplikaty oraz zgodność typów. Takie kontrole ułatwiają odróżnienie błędu w logice od problemu z wydajnością. Jeżeli obiekt tymczasowy jest duży, należy sprawdzić, czy potrzebne są indeksy, a także w którym momencie powinny zostać utworzone. Indeks dodany przed masowym wstawieniem może zwiększyć koszt ładowania, natomiast utworzony po załadowaniu danych może ułatwić późniejsze wyszukiwanie. Nie należy jednak przyjmować tego jako reguły bez pomiaru. Najlepsze rozwiązanie zależy od proporcji między zapisem danych a liczbą późniejszych odczytów. Ważne jest prawidłowe zarządzanie transakcjami. Zbyt szeroka transakcja może długo utrzymywać blokady i powiększać ilość danych wymagających obsługi. Zbyt wąska może natomiast nie zapewnić spójności całego procesu. Zakres transakcji powinien wynikać z wymagań operacji, a obsługa błędów powinna jasno określać, co ma zostać wycofane i jakie zasoby należy zwolnić. Przydatne jest także jawne usuwanie dużych tabel tymczasowych przed zakończeniem procedury, jeśli nie są już potrzebne. Podczas testów należy używać danych zbliżonych rozmiarem i strukturą do tych, które występują w normalnej pracy. Mały zbiór może ukryć problemy z planem wykonania, sortowaniem i zapotrzebowaniem na przestrzeń. Warto porównywać wariant z tempdb z rozwiązaniem bez obiektu tymczasowego, analizując czas, liczbę odczytów, zużycie zasobów i stabilność wyników. Pomiar powinien być powtarzalny, ponieważ pierwszy przebieg może różnić się od kolejnych. Kiedy sprawdzić procedurę z użyciem tempdb w serwisieDo konsultacji warto zgłosić się, gdy procedura nagle zaczyna działać wyraźnie wolniej, pojawiają się błędy braku miejsca, system długo oczekuje na operacje dyskowe albo wykonanie jednego zadania wpływa na działanie innych programów. Sprawdzenia wymaga również sytuacja, w której wynik procedury jest niepełny, zawiera duplikaty lub zmienia się po ponownym uruchomieniu bez zmiany danych wejściowych. Przydatne jest przygotowanie opisu objawu, czasu jego wystąpienia, przykładowych parametrów oraz informacji o tym, czy problem dotyczy jednego zapytania, czy całego środowiska. W praktycznej diagnostyce można przeanalizować plan wykonania, rozmiar tabel tymczasowych, kolejność operacji, wykorzystanie indeksów i oczekiwania na zasoby. Należy również sprawdzić, czy na komputerze występują szersze problemy z dyskiem, pamięcią, procesorem lub stabilnością systemu. Kłopot przypisywany procedurze może być bowiem skutkiem nieprawidłowego działania oprogramowania, uszkodzenia nośnika, błędnej konfiguracji albo nieoczekiwanej aktywności innego procesu. Warszawskie Pogotowie Komputerowe 24/7 może zostać uwzględnione przy organizowaniu takiej diagnostyki sprzętu i środowiska pracy, gdy potrzebne jest uporządkowanie objawów oraz wskazanie, czy dalszej analizy wymaga komputer, nośnik danych, system lub używana aplikacja. Przed przekazaniem urządzenia warto zabezpieczyć kopię ważnych danych i opisać kolejność czynności prowadzących do problemu. Pozwala to sprawniej odtworzyć warunki, w których procedura z użyciem tempdb przestaje działać prawidłowo, oraz oddzielić błąd logiczny zapytania od usterki technicznej stanowiska. |