Capacity Planning for tempdb

W tym temacie przedstawiono wskazówki dotyczące określania wielkości odpowiedniego dysku spacja tempdb wymaga.Ten temat zawiera także zalecenia dotyczące sposobu konfigurowania tempdb w celu uzyskania optymalnej wydajności w środowisku produkcyjnym oraz informacje o monitorowaniu tempdb miejsca użycia.

W jaki sposób jest używany tempdb

The tempdb system database is a global zasób that is available to all users that are connected to an wystąpienie of SQL Server. The tempdb database is used to store the following objects: obiektów użytkowników, wewnętrzne obiekty i magazyny wersja.

Obiekty użytkownika

Obiekty użytkownika są jawnie tworzone przez użytkownika.Obiekty te mogą być zakres sesja użytkownika lub w programie zakres rutynowo, tworzenia obiektu.Procedura jest procedura przechowywana, wyzwalacza lub funkcja zdefiniowanej przez użytkownika.Obiekty użytkownika może być jedną z następujących czynności:

  • Tabel zdefiniowanych przez użytkownika i indeksów

  • Tabele systemowe i indeksów

  • Globalne tabel tymczasowych i indeksów

  • Lokalne tabel tymczasowych i indeksów

  • Zmienne Tabela

  • Tabele w funkcji wartości tabela

Obiekty wewnętrzne

Wewnętrzne obiekty są tworzone w miarę potrzeby przez SQL Server Database Engine do przetworzenia SQL Server instrukcje. Wewnętrzne obiekty tworzone i usunięty w zakresie instrukcja.Wewnętrzne obiekty może mieć jedną z następujących czynności:

  • Praca z tabel dla operacji kursor lub buforu i przechowywania dużych obiektów tymczasowych (LOB).

  • Działają pliki dla łączyć mieszania lub wartość mieszania operacji zbiorczej.

  • Wyniki sortowania pośredniego dla operacji, takich jak tworzenie lub odbudowa indeksów (Jeżeli określono SORT_IN_TEMPDB) lub niektóre kwerendy GROUP BY, ORDER BY lub UNION.

Każdy obiekt wewnętrznych korzysta z co najmniej dziewięciu stron; jedna strona IAM i jeden fragment ośmiu stron.Aby uzyskać więcej informacji na temat stron i zakresów Zobacz Opis stron i zakresów.

Magazyny wersja

Zbiór stron danych, które zawierają wiersze danych, które są wymagane do obsługi funkcji, które używają jest magazynu wersja przechowywanie wersja wiersza.Istnieją dwa magazynów wersja: Typowe magazynu wersja i do magazynu wersja online indeks kompilacji. Magazyny wersja zawiera następujące informacje:

  • Wersje wierszy wygenerowanych przez transakcje modyfikacji danych w bazie danych, która korzysta z migawka lub odczytu popełnionego przy użyciu poziomów izolacji wersji wiersza.

  • Wiersz wersji, które są generowane przez transakcje modyfikacji danych dla funkcji, takich jak: Uruchamia operacje online indeksu, wiele zestawów wyników Active (MARS) i po.

W poniższej tabela przedstawiono funkcje programu SQL Server Tworzenie obiektów użytkowników, wewnętrzne obiekty lub wersji wiersza tempdb.Jeśli to możliwe, dostępne są metody szacowania wykorzystania miejsca na dysku.

Funkcja

Użycie tempdb

Dodatkowe informacje

Operacje bulkload z wyzwalaczami włączone

Bulk-import optimizations are available when triggers are enabled.SQL Server uses row versioning for triggers that update or delete transactions.Kopia każdego wiersza usuniętego lub zaktualizowane jest dodawany do magazynu wersja.Zobacz temat "Wyzwalaczy" znajdujący się w dalszej części tej tabela.

Optimizing Bulk Import Performance

Typowe kwerendy wyrażenie tabela

Typowe wyrażenie tabela można traktować jako zestaw wyników tymczasowe, które zdefiniowano w ramach wykonywania pojedynczej instrukcja SELECT, INSERT, UPDATE, DELETE lub CREATE VIEW.

Jeżeli plan kwerend dla typowych tabela wyrażenie kwerendy użyto operator buforu do zapisywania wyniki kwerendy pośrednie, Database Engine tworzy tabela w pracy tempdb do obsługi tej operacji.

Przy użyciu znanych wyrażenia tabela

WITH common_table_expression (Transact-SQL)

SPACJA lub tabulator

Kursory statyczne i sterowanych przez zestaw kluczy za pomocą tabel pracy, które są wbudowane tempdb.Kursory opartej na zestaw kluczy można użyć tabel pracy do przechowywania zestawu kluczy, które identyfikują wiersze w kursor.Statyczne kursory użyć tabela Praca do przechowywania zestaw wyników pełną kursor.

Wykorzystanie miejsca na dysku dla kursory mogą się różnić w zależności od planu kwerend, który został wybrany.Jeżeli plan kwerend jest taka sama, jak we wcześniejszych wersjach SQL Server, wykorzystanie miejsca na dysku około jest taka sama.

About Choosing a Cursor Type

Poczta bazy danych

Zobacz temat "usługa Broker", znajdujący się w dalszej części tej tabela.

Database Mail

DBCC CHECKDB

DBCC CHECKDB używa tempdb pracy tabel do przechowywania wyniki pośrednich i operacji sortowania.

Aby określić tempdb wymagania dotyczące miejsca na dysku dla operacji, należy uruchomić DBCC CHECKDB WITH ESTIMATEONLY.

DBCC CHECKDB (języka Transact-SQL)

Optimizing DBCC CHECKDB Performance

Powiadomień o zdarzeniach

Zobacz temat "usługa Broker", znajdujący się w dalszej części tej tabela.

Understanding Event Notifications

Indeksy

Podczas tworzenia lub ponownie utwórz indeks (offline lub online) i ustaw opcję SORT_IN_TEMPDB on bezpośredni Database Engine Aby użyć tempdb do przechowywania wyniki pośrednich sortowania, które są używane do tworzenia indeksu.Gdy SORT_IN_TEMPDB jest określony i sortowania jest to konieczne, tempdb musi mieć wystarczającą ilość miejsca na dysku do przechowywania największej indeksu oraz ilości miejsca na dysku, który jest równa wartości Opcja pamięci Tworzenie indeksu.Aby uzyskać więcej informacji zobaczIndex Disk Space Example.

Tabele oraz indeksy mogą być podzielone na partycje.Dla indeksów podzielonym na partycje Jeśli określono opcję SORT_IN_TEMPDB indeks i indeks jest wyrównana z tabela bazowa, musi istnieć wystarczającej ilości miejsca w tempdb do przechowywania pośrednich sortowania jest uruchamiany z największą partycji.Jeśli indeks nie jest odpowiednio wyrównany, musi być wystarczająca ilość miejsca w tempdb do przechowywania pośrednich sortowania jest uruchamiana wszystkich partycji.Aby uzyskać więcej informacji zobaczSpecial Guidelines for Partitioned Indexes.

Indeks online operacje użycia wiersz wersji do izolowania operacji indeksu skutków zmiany wprowadzone przez innych transakcji.Przechowywanie wersji wiersza eliminuje potrzebę żądanie blokady udział w wierszach, które zostały przeczytane.Równoczesne użytkownika aktualizować i usuwać operacje podczas online indeksu operacje wymagają miejsca dla wersja rekordów tempdb.Podczas operacji indeksu online za pomocą SORT_IN_TEMPDB i sortowania jest to konieczne, tempdb musi także mieć miejsca na dysku dodatkowe, zostało wcześniej opisane wyniki sortowania pośrednich.Operacje online indeksu, tworzenie, usuwanie lub odbudowanie indeks klastrowany także wymagać dodatkowego miejsca na dysku do tworzenia i utrzymywania indeksu tymczasowe mapowania.Aby uzyskać więcej informacji zobaczDisk Space Requirements for Index DDL Operations.

tempdb and Index Creation

Special Guidelines for Partitioned Indexes

Disk Space Requirements for Index DDL Operations

Index Disk Space Example

How Online Index Operations Work

Wpisz dane dużych obiektów (LOB), zmiennych i parametrów

The large object data types are varchar(max), nvarchar(max), varbinary(max)text, ntext, image, and xml.Tego typu może być rozmiarze do 2 GB i mogą być używane jako zmiennych i parametrów procedur przechowywanych, funkcji zdefiniowanych przez użytkownika, instancji lub kwerendy.Parametry i zmienne, które są zdefiniowane jako typ dane LOB należy używać pamięci głównej przechowywania danych, gdy wartości są małe.Jednak duże wartości są przechowywane w tempdb.Kiedy LOB zmiennych i parametrów są przechowywane w tempdb, są one traktowane jako wewnętrzne obiekty.Kwerendy można sys.dm_db_session_space_usage dynamicznego zarządzania widok zgłosić przydzielonych do wewnętrznych obiektów dla danej sesja stron.

Niektóre funkcje łańcuchowe wewnętrznych, takich jak SUBSTRING i replikacji, mogą wymagać pośrednich tymczasowego przechowywania w tempdb działającego w systemie LOB wartości.Podobnie poziom izolacji transakcji opartego na przechowywanie wersja wiersza jest włączony do bazy danych i modyfikacji duże obiekty zostaną wprowadzone, zmieniono fragment obiektu LOB są kopiowane do magazynu wersja w tempdb.

Using Large-Value Data Types

Minimalnie — jedno lub więcej

Wiele zestawów wyników aktywnego może wystąpić w jedno połączenie, zazwyczaj jest to nazywane MARS.Jeśli sesja MARS wysyła zestawienie modyfikacji danych (na przykład INSERT, UPDATE lub DELETE), jeśli brakuje zestaw wyników aktywne wiersze, których dotyczy instrukcja modyfikacji są przechowywane w magazynu wersja w tempdb.Zobacz temat „ wiersz wersji", znajdujący się w dalszej części tej tabela.

Za pomocą wielu wyników Active ustawia (MARS)

Kwerendy powiadomień

Zobacz temat "usługa Broker", znajdujący się w dalszej części tej tabela.

Za pomocą kwerendy powiadomień

Kwerendy

Kwerendy, które zawierają SELECT, INSERT, UPDATE i DELETE instrukcji służy do przechowywania wyniki pośrednich dla sprzężeń mieszania, zagregowanych wartości mieszania i sortowanie wewnętrzne obiekty.

Gdy plan wykonania kwerend są buforowane, są buforowane w tabelach pracy wymagane przez plan.Kiedy tabela gniazda są buforowane, jest obcinana w tabeli i dziewięciu stron pozostają w pamięci podręcznej do ponownego użycia.W ten sposób można zwiększyć wydajność następne wykonanie kwerendy.Jeśli system ma za mało pamięci, Database Engine można usunąć planu wykonania i upuść tabele powiązane pracy.

Wykonanie planu buforowanie i ponowne użycie

Przechowywanie wersji wiersza

Przechowywanie wersji wiersza jest ogólne ramy, które jest używane do obsługi następujących funkcji:

  • : q

  • Minimalnie — jedno lub więcej

  • Indeks operacje, które określa opcja ONLINE

  • Wiersz poziomów izolacji transakcji opartego na przechowywanie wersji:

    • Implementacja nowy poziom izolacji popełnionych odczytu, który używa wersji wiersza w celu zapewnienia spójności odczytu poziomie instrukcja.

    • Poziom izolacji migawka zapewnienie spójności odczytu na poziomie transakcji.

Wiersz wersja są przechowywane w tempdb wersja są przechowywane dla tak długo, jak aktywnej transakcji musi uzyskać do niego dostęp.Zawartość bieżącego magazynu wersja jest zwracany w sys.dm_tran_version_store.Strony magazynu wersja są śledzone poziom pliku, ponieważ są one globalnym zasobów.Można użyć version_store_reserved_page_count kolumnasys.dm_db_file_space_usage , aby wyświetlić bieżący rozmiar magazynu wersja.Oczyszczanie magazynu wersja należy wziąć pod uwagę najdłuższego bieżących transakcji, która wymaga dostępu do określonej wersja.Najdłuższy bieżących transakcji związanych z magazynu wersja czyszczenia - up może być rozpoznana przez przeglądanie elapsed_time_seconds kolumnasys.dm_tran_active_snapshot_database_transactions.Liczniki Wolne miejsce w Tempdb (KB) and Rozmiar magazynu wersja (KB) w Transakcje obiektu może służyć do monitorowania, rozmiar i stopy wzrostu magazynu wersja wiersza w tempdb.Aby uzyskać więcej informacji zobaczProgram SQL Server, obiekt transakcji.

Aby oszacować ilość miejsca jest wymagana tempdb dla wersja wiersza, należy zastanowić się, że aktywnej transakcji musi przechowywać wszystkie swoje zmiany w magazynu wersja.Oznacza to, czy transakcja migawka, która rozpoczyna się później dostęp stare wersje.Ponadto istnieje transakcja migawkę aktywnego, wszystkich wersja przechowywać dane, które jest generowana przez transakcje, które są aktywne, gdy rozpoczyna się migawka również muszą być przechowywane.

Poniżej przedstawiono podstawowe formuły:

[Rozmiar magazynu wersja] = 2 *

[Wersja magazynu danych na minutę] *

[Systemem najdłuższy czas (w minutach) transakcji]

Understanding Row Versioning-Based Isolation Levels

Obciążenie zasób wersji wiersza

Service Broker

Service Broker ułatwia deweloperom tworzenie aplikacji asynchronicznych, luźno połączonych, w którym niezależne składniki współpracują ze sobą, aby wykonać zadania.These application components exchange messages that contain the information that is required to complete the task.Service Broker explicitly uses tempdb for preserving existing dialog context that cannot stay in memory.Rozmiar jest około 1 KB na okno dialogowe.

Ponadto Service Broker Domyślnie używa tempdb przez buforowanie obiektów w kontekście wykonanie kwerendy, takie jak tabele pracy, które są używane dla zdarzeń czasomierza i tła wydana konwersacji.

Poczta bazy danych, zdarzenie powiadomień, and Kwerendy powiadomień niejawnie użyj Service Broker.

Omówienie (usługa Broker)

Procedury przechowywane

Procedury przechowywane mogą tworzyć obiekty użytkownika, takie jak tabele tymczasowe globalny lub lokalny i ich indeksów, zmiennych lub parametrów.Obiekty tymczasowe procedury przechowywane mogą być buforowane w celu zoptymalizowania działania, usuwanie i tworzenie tych obiektów.Takie zachowanie może się zwiększyć tempdb wymaganej ilości miejsca na dysku.Do dziewięciu stron tymczasowy obiekt są zapisywane do ponownego użycia.Zobacz „ tabele tymczasowe i tablezmienne „ znajdujący się w dalszej części tej tabela.

Tworzenie procedur przechowywanych (aparat bazy danych)

Tabele tymczasowe i table zmienne

  • Tabel zdefiniowanych przez użytkownika i indeksów

  • Tabele systemowe i indeksów

  • Globalne tabel tymczasowych i indeksów

  • Lokalne tabel tymczasowych i indeksów

  • table zmienne

  • Tabele w funkcji wartości tabela

Tabele tymczasowe i table zmienne są przechowywane w tempdb.Wymagania dotyczące miejsca na dysku dla obiektów tabela tymczasowa są takie same, jak we wcześniejszych wersjach SQL Server. Metoda szacowania rozmiar rozmiar tymczasowej tabela jest taka sama, jak szacowanie rozmiaru standardowego tabela.Aby uzyskać więcej informacji zobaczEstimating the Size of a Table.

A table Zmienna zachowuje się jak zmiennej lokalnej. A table Zmienna jest typu table i jest używany głównie do tymczasowego przechowywania zestaw wierszy, które są zwracane jako zestaw wyników funkcja zwracająca tabelę. Miejsce na dysku, które są wymagane do przechowywania table Zmienna zależy od rozmiaru deklarowana zmienna i wartość przechowywaną w zmiennej.

Lokalne tabel tymczasowych i zmienne są buforowane, gdy są spełnione następujące warunki:

  • Nazwany ograniczenia nie są tworzone.

  • Instrukcje Definition Language (DDL) danych, które mają wpływ na tabeli nie są uruchamiane po utworzeniu tabela tymczasowa, takie jak instrukcji CREATE INDEX lub CREATE STATISTICS.

  • Tymczasowy obiekt nie jest tworzony za pomocą dynamicznych SQL, takie jak: sp_executesql N'create table #t(a int)'.

  • Tymczasowy obiekt zostanie utworzony wewnątrz innego obiektu, takiego jak procedur przechowywanych, wyzwalaczy, funkcja zdefiniowanej przez użytkownika lub jest zwracany spisu zdefiniowanej przez użytkownika, funkcja zwracająca tabelę.

Po tabela tymczasowa lub table Zmienna jest buforowany, tymczasowy obiekt nie jest usuwany po zakończeniu jego przeznaczenie. Zamiast tego tymczasowy obiekt zostanie obcięta do liczby całkowitej.Maksymalnie dziewięciu stron są przechowywane i użyty ponownie, przy następnym uruchomieniu obiektu wywołującego jest wykonywane.Buforowanie zezwala na operacje, usuwanie i tworzenie obiektów bardzo szybko wykonać i zmniejsza rywalizacji podział strona.

Aby uzyskać optymalną wydajność, należy obliczyć miejsca na dysku, wymagane do pamięci podręcznej lokalnego tabel tymczasowych lub table zmienne w tempdb przy użyciu następującej formuły:

Strona 9 na tymczasowej tabela

* Liczba średnia tabel tymczasowych na procedury

* liczba maksymalna równoczesnego wykonania procedury

CREATE TABLE (Transact-SQL)

Using Variables and Parameters (Database Engine)

DECLARE @local_variable (Transact-SQL)

: q

The inserted and deleted tables that are used in AFTER triggers are created in tempdb.To znaczy wersji są wiersze, które są aktualizowane lub usuwane przez wyzwalacz.Obejmuje to wszystkie wiersze, które są modyfikowane przez instrukcję, która uruchomienia wyzwalacza.Nie są wersji wiersze, które są wstawiane przez wyzwalacz.

ZAMIAST z użycia wyzwalaczy tempdb w sposób podobny do kwerendy.Wykorzystanie miejsca na dysku dla, a nie z wyzwalaczy jest taka sama, jak we wcześniejszych wersjach SQL Server. Zobacz temat "Kwerendy" wcześniej w tej tabela.

Podczas ładowania danych jest zbiorcza z wyzwalaczami włączone, kopia każdego wiersza usuniętego lub zaktualizowane jest dodawany do magazynu wersja.

CREATE TRIGGER (języka Transact-SQL)

Optimizing Bulk Import Performance

Obciążenie zasób wersji wiersza

Funkcje zdefiniowane przez użytkownika

Funkcje zdefiniowane przez użytkownika można utworzyć obiektów tymczasowych użytkownika, takich jak tabele globalny lub lokalny i ich indeksów, zmiennych lub parametrów.Na przykład zwrotu tabela funkcja wycenione tabela są przechowywane w tempdb.

Typy danych, które są dozwolone dla parametrów i zwracają wartości w funkcji wartość skalarna oraz wartości tabela funkcje obejmują większość typów dane LOB.Na przykład wartość zwracana może być typu xml lub varchar(max). Zobacz "Zmienne typu danych (LOB) i parametry obiektów duże" wcześniej w tej tabela.

Tymczasowe obiektów w wartości tabela funkcje zdefiniowane przez użytkownika mogą być buforowane w celu zoptymalizowania działania, usuwanie i tworzenie tych obiektów.Zobacz „ tabele tymczasowe i tablezmienne"wcześniej w tej tabela.

CREATE funkcja języka Transact-SQL)

XML

Zmiennych i parametrów typu xml można do 2 GB. Używają pamięci głównej przechowywania danych, tak długo, jak wartości są niewielkie.Jednak duże wartości są przechowywane w tempdb.Zobacz "Zmienne typu danych (LOB) i parametry obiektów duże" wcześniej w tej tabela.

The sp_xml_preparedocument systemowa procedura składowana creates a work tabela in tempdb.Analizator składni MSXML używa tabela pracy do przechowywania zanalizowano dokumentu XML.Wymagania dotyczące miejsca na dysku dla tempdb jest prawie proporcjonalny do rozmiaru określonego dokumentu XML, gdy jest wykonać procedura przechowywana.

Implementing XML in SQL Server

sp_xml_preparedocument (Transact-SQL)

Wykonywanie kwerendy za pomocą OPENXML XML

Zdolności produkcyjnych planowanie uaktualnienia do programu SQL Server

Określanie odpowiedniego rozmiaru do tempdb w środowisku produkcyjnym, zależy od wielu czynników.Jak opisano wcześniej w tym temacie, te czynniki obejmują istniejących obciążenie pracą oraz SQL Server Funkcje, które są używane. Firma Microsoft zaleca, aby przeanalizować obciążenie istniejących, wykonując następujące zadania w SQL Server środowisko testowe:

  1. Zestaw autogrow na dla tempdb.

  2. wykonać wykonać poszczególnych kwerend lub plików śledzenia obciążenia pracą i monitora tempdb wykorzystania miejsca.

  3. wykonać operacji obsługi indeksu, takich jak Odbudowa indeksów i monitor tempdb miejsca.

  4. Wykorzystania miejsca na wartości z poprzednich kroków można używać do przewidywania wykorzystanie całkowite obciążenie sieci; Dopasowywanie tej wartości dla działania współbieżne przewidywanych, a następnie ustaw rozmiar tempdb odpowiednio.

Aby uzyskać więcej informacji na temat monitorowania tempdb patrz miejscaTroubleshooting Insufficient Disk Space in tempdb. Aby uzyskać więcej informacji na temat szacowania tempdb zużycia podczas operacji indeksu zobacz Index Disk Space Example.

Konfigurowanie tempdb dla środowiska produkcyjnego

Aby osiągnąć optymalną tempdb wydajność, należy postępować zgodnie z wytycznymi i zalecenia w Optymalizowanie wydajności tempdb.

Jak Monitor tempdb Użyj

Uruchamianie w miejsce na dysku tempdb mogą powodować znaczące zakłóceniaSQL Server środowiska produkcyjnego i może uniemożliwić aplikacji, które działają na ukończenie operacji. Można użyć sys.dm_db_file_space_usage dynamicznego zarządzania widoku do kontrolowania miejsca na dysku, który jest używany przez te funkcje w tempdb pliki.Ponadto aby monitorować aktywność alokacji lub dezalokacji strona w tempdb poziom zadań lub sesja, można użyć sys.dm_db_session_space_usage and sys.dm_db_task_space_usage dynamicznego zarządzania widokami.Te widoki służą do identyfikowania dużej kwerendy, tabele tymczasowe lub zmienne Tabela, korzystających z dużej ilości tempdb miejsca na dysku.Istnieje także kilka liczników, które mogą być używane do monitorowania wolnego miejsca, która jest dostępna w tempdb , a także zasoby, które używają tempdb.Aby uzyskać więcej informacji zobaczTroubleshooting Insufficient Disk Space in tempdb.