TEMPORARY TABLE to obiekt istniejący tylko przez czas trwania sesji lub procedury, przechowywany w tempdb.
Rola TEMPORARY TABLE w Microsoft SQL Server
TEMPORARY TABLE, czyli tabela tymczasowa, jest w Microsoft SQL Server obiektem używanym do przechowania pośrednich wyników zapytania, danych roboczych albo zestawu rekordów potrzebnego tylko podczas wykonywania określonego zadania. Tabele tymczasowe są tworzone w bazie systemowej tempdb, a nie w docelowej bazie aplikacji. Dzięki temu dane robocze nie muszą być zapisywane na stałe w schemacie bazy biznesowej. SQL Server zarządza cyklem życia takiego obiektu i usuwa go po zakończeniu zakresu, dla którego został utworzony.
W SQL Server lokalną tabelę tymczasową tworzy się najczęściej za pomocą instrukcji CREATE TABLE #Nazwa albo SELECT ... INTO #Nazwa. Pojedynczy znak # oznacza tabelę lokalną. Jest ona dostępna w bieżącej sesji, a tabela utworzona wewnątrz procedury składowanej może zostać automatycznie usunięta po zakończeniu procedury, jeżeli nie jest już potrzebna poza jej zakresem. Dwa znaki, na przykład ##Nazwa, oznaczają tabelę globalną widoczną dla wielu sesji, dopóki korzystające z niej połączenia jej nie zwolnią. Globalne tabele tymczasowe wymagają ostrożności, ponieważ ich nazwa może kolidować z działaniem innych użytkowników.
Zakres widoczności i automatyczne usuwanie obiektu
Zakres tabeli tymczasowej nie jest tym samym co czas trwania pojedynczej instrukcji SQL. Lokalna tabela #Raport może być wykorzystywana przez wiele instrukcji wykonywanych w tej samej sesji. Jeżeli połączenie z SQL Server zostanie zamknięte, SQL Server usuwa należące do niego lokalne tabele tymczasowe. W przypadku tabeli utworzonej w procedurze znaczenie ma również zasięg procedury i sposób wywołania. Dlatego kod powinien jasno określać, gdzie tabela powstaje, gdzie jest używana i kiedy przestaje być potrzebna.
Tabela tymczasowa może mieć kolumny, klucze, ograniczenia i indeksy podobnie jak tabela stała. Można na niej wykonywać operacje INSERT, UPDATE, DELETE i SELECT, a także łączyć ją z innymi tabelami za pomocą JOIN. W SQL Server lokalne nazwy tabel tymczasowych są przechowywane w tempdb z wewnętrznie zmodyfikowanym identyfikatorem, dzięki czemu różne sesje mogą używać tej samej krótkiej nazwy, na przykład #Dane, bez bezpośredniego konfliktu. Przed ponownym utworzeniem tabeli w tym samym zakresie można jawnie użyć instrukcji DROP TABLE IF EXISTS #Dane.
Wpływ na wykonanie zapytań i zasoby tempdb
Tabela tymczasowa bywa przydatna wtedy, gdy złożone przetwarzanie trzeba podzielić na kilka etapów. Wynik pierwszego etapu można zapisać w #Dane, utworzyć dla niego indeks, a następnie wykorzystać go w kolejnych zapytaniach. SQL Server może tworzyć statystyki dla tabel tymczasowych, co pomaga optymalizatorowi ocenić rozmiar danych i dobrać plan wykonania. Nie oznacza to jednak automatycznie poprawy wydajności. Nadmiarowe kopiowanie rekordów, niepotrzebne indeksy albo wielokrotne tworzenie i usuwanie tabel mogą zwiększać obciążenie procesora, pamięci i operacji wejścia-wyjścia.
Ponieważ tabela tymczasowa jest przechowywana w tempdb, jej działanie zależy od kondycji tej bazy. Duża liczba rekordów, sortowanie, agregacje, indeksowanie oraz operacje wykonywane w ramach transakcji mogą zwiększać zużycie miejsca w tempdb. Problemy z brakiem wolnej przestrzeni, wolnym dyskiem albo współbieżnym dostępem do zasobów tempdb mogą powodować spowolnienia i błędy niezwiązane bezpośrednio z poprawnością samego zapytania. Przy analizie warto sprawdzić rozmiar tabeli, liczbę wierszy, plan wykonania, czas trwania operacji oraz komunikaty SQL Server dotyczące tempdb.
Diagnostyka kodu korzystającego z tabel tymczasowych
Podczas diagnozowania problemu należy najpierw ustalić, czy kod odwołuje się do właściwej tabeli i czy odwołanie następuje w jej zakresie widoczności. Typowe błędy obejmują literówkę w nazwie, użycie tabeli po zakończeniu procedury, próbę odwołania do lokalnej tabeli z innej sesji oraz utworzenie tabeli o innym układzie kolumn niż oczekuje dalsza część zapytania. Pomocne jest prześledzenie kolejności instrukcji od utworzenia obiektu, przez zasilenie go danymi, aż do jego odczytu lub usunięcia.
W praktyce serwisowej analiza obejmuje również sprawdzenie logów aplikacji, komunikatów SQL Server, czasu wykonywania zapytań i obciążenia zasobów. Jeżeli program działa na laptopie lub komputerze PC i korzysta ze zdalnego SQL Server, sam komputer użytkownika może nie być miejscem, w którym powstaje tabela tymczasowa — obiekt jest tworzony w instancji SQL Server obsługującej daną sesję. Przy naprawie należy więc rozdzielić problemy aplikacji, połączenia sieciowego i serwera bazy danych od problemów lokalnego systemu operacyjnego, sterowników lub sprzętu. Rzetelna diagnoza powinna potwierdzić to rozdzielenie na podstawie konkretnego komunikatu błędu i obserwowanego przepływu danych.