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

Tabela tymczasowa

Termin Definicja
Tabela tymczasowa

Tabela tymczasowa przechowuje dane wyłącznie na czas trwania sesji lub procedury.

Trzy różne byty o podobnym zastosowaniu

W SQL Server nazwa poprzedzona jednym znakiem # tworzy tabelę lokalną, widoczną wyłącznie w sesji, która ją utworzyła, i kasowaną przy jej zamknięciu. Dwa znaki ## dają tabelę globalną, dostępną dla wszystkich połączeń aż do rozłączenia twórcy. Osobną konstrukcją jest zmienna tabelaryczna DECLARE @t TABLE, żyjąca do końca partii lub procedury. Wszystkie trzy lądują fizycznie w bazie tempdb — zmienna tabelaryczna wcale nie jest bytem czysto pamięciowym, wbrew rozpowszechnionemu przekonaniu. Nazwy tabel lokalnych serwer uzupełnia wewnętrznie o długi przyrostek numeryczny, dlatego dwie sesje mogą bez konfliktu używać tego samego #wynik.

Wybór między # a @ ma konsekwencje wydajnościowe

Dla tabeli #temp optymalizator buduje statystyki i potrafi oszacować liczbę wierszy, więc plan zapytania dopasowuje się do rzeczywistości. Zmienna tabelaryczna przez lata była szacowana na jeden wiersz, co przy dziesiątkach tysięcy rekordów dawało katastrofalny plan z pętlą zagnieżdżoną; obejściem bywało OPTION (RECOMPILE). Na tabeli #temp można założyć indeks nieklastrowy po wypełnieniu danymi, można ją też odbudować przez SELECT ... INTO #t, co działa jako operacja minimalnie logowana. Wspólne wyrażenie tabelaryczne (CTE, klauzula WITH) nie jest odpowiednikiem — to tylko nazwane podzapytanie, wykonywane ponownie przy każdym odwołaniu.

Objawy przeciążonej bazy tempdb

Typowy komunikat to niepowodzenie alokacji miejsca w tempdb albo długie oczekiwania na zasoby stron PFS i GAM, widoczne w sys.dm_os_waiting_tasks jako blokady na stronach 2:1:1 lub 2:1:3. Klasyczna przyczyna: tempdb ma jeden plik danych na maszynie z ośmioma rdzeniami, ustawiony na przyrost co jeden megabajt, i leży na tym samym wolnym dysku co baza produkcyjna. Druga rodzina błędów to nieprawidłowa nazwa obiektu #tmp po tym, jak procedura utworzyła tabelę w dynamicznym SQL wykonanym przez sp_executesql — taka tabela istnieje tylko w zakresie tego wywołania i znika, zanim kod nadrzędny się do niej odwoła.

Kiedy raport w Subiekcie mieli dysk przez pół godziny

Skargi na wolne zestawienia w oprogramowaniu handlowym zaskakująco często kończą się nie na przyspieszaniu procesora, lecz na przeniesieniu tempdb na oddzielny nośnik SSD, rozbiciu jej na kilka plików o równym rozmiarze i ustawieniu sensownego przyrostu. Konfigurujemy to na serwerach z Subiektem, WAPRO i Comarchem, razem z kontrolą modelu odzysku i wielkości pliku dziennika. Diagnostykę wykonujemy na miejscu albo po zabraniu jednostki do pracowni — dojazd po sprzęt i jego odwiezienie nic nie kosztują.

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