2012-03-15 12 views
6

Próbujemy optymalizacji procedur niektórych T-SQL zapisanych w celu zmniejszenia tempdb rywalizacji, ale nie mogę dowiedzieć się, jak zmienne non-table są przechowywane przez serwer SQL:Kiedy zmienna jest zadeklarowana w procedurze składowanej T-SQL, czy jest przechowywana w pamięci lub tempdb?

  • Co o prostych typów danych jak INT i DATETIME? Wydaje się, że żyją w pamięci.
  • A co z VARCHAR/VARCHAR (MAX)? Zwykły VARCHAR może żyć w pamięci, ale VARCHAR (MAX) może wymagać użycia tempdb do przechowywania.
  • Zmienne tabeli są przechowywane w tempdb. Ale nie jestem nimi zainteresowany.

Parametr MSDN article on tempdb nie wyjaśnia zwykłych zmiennych.

Odpowiedz

8

The Capacity Planning article for tempdb odpowiedzi na pytania:

Duże typy danych są przedmiotem varchar (max), nvarchar (max), varbinary (max) tekst, ntext, obraz, i xml. Te typy mogą mieć rozmiar do 2 GB i mogą być używane jako zmienne lub parametry w przechowywanych procedurach, funkcjach zdefiniowanych przez użytkownika, partiach lub zapytaniach. Parametry i zmienne zdefiniowane jako typ danych LOB wykorzystują pamięć główną jako pamięć masową, jeśli wartości są małe. Jednak duże wartości są przechowywane w tempdb. Gdy zmienne i parametry LOB są przechowywane w tempdb, to są traktowane jako obiekty wewnętrzne. Możesz zapytać widok dynamicznego zarządzania sys.dm_db_session_space_usage, aby zgłosić strony przydzielone do obiektów wewnętrznych dla danej sesji.

Artykuł wart jest przeczytania w całości, ponieważ obejmuje również wiele innych zastosowań tempdb.

EDIT: Jeśli jesteś ciekaw, ile pamięci w tempdb specyficzna sesja korzysta, można uruchomić następujące zapytanie:

select * 
from sys.dm_db_session_space_usage 
where session_id = @@SPID 

Korzystanie z tego, że nie wyglądają jak moja zmienna VARCHAR(MAX) przechowywano w tempdb, aż osiągnie rozmiar około 1000 KB ... ale jestem pewien, że różni się w zależności od pamięci dostępnej na serwerze.

+0

Dzięki za znalezienie tego! Zakładam, że "jeśli wartości są małe" oznacza mniej niż 8000 bajtów? Niezależnie od tego, artykuł wydaje się sugerować, że nie-MAX (N) VARCHAR i małe zmienne są przechowywane w pamięci. –

Powiązane problemy