Obciążenie zasobów wersji wiersza
Wiersz framework versioning obsługuje następujące funkcje dostępne w SQL Server:
Wyzwalacze
Wiele zestawów wyników Active (MARS)
Indeksowanie online
Ramy kontroli wersji wiersza obsługuje również następujący wiersz na podstawie wersji poziomów izolacji transakcji, które domyślnie nie są włączone:
Opcja READ_COMMITTED_SNAPSHOT bazy danych jest włączone, świadczą transakcji READ_COMMITTED instrukcja -poziom odczytać przy użyciu wersji wiersza spójności.
Opcja ALLOW_SNAPSHOT_ISOLATION bazy danych jest włączone, transakcji SNAPSHOT zapewnia poziom transakcji odczytać przy użyciu wersji wiersza spójności.
Poziomów izolacji oparte na wersji wiersza zmniejszyć liczbę blokad przez transakcję poprzez wyeliminowanie stosowania blokady współużytkowane w operacji odczytu.Zwiększa to wydajność systemu przez zmniejszenie zasobów, używane do zarządzania blokadami.Również wzrasta wydajność przez zmniejszenie liczby transakcji jest blokowany przez blokad przez inne transakcje.
Poziomów izolacji oparte na wersji wiersza zwiększyć zasoby wymagane przez modyfikacji danych.Włączenie opcji powoduje, że wszystkie zmiany danych dla bazy danych do wersji.Kopię danych przed modyfikacją są przechowywane w tempdb nawet w przypadku, gdy nie ma żadnych aktywnych transakcji przy użyciu wiersza na podstawie wersji izolacji.Dane po modyfikacji zawiera wskaźnik do numerów wersji danych przechowywanych w tempdb.Dla dużych obiektów tylko część obiektu, który zmienił jest kopiowany do tempdb.
Miejsce używane w tempdb
Dla każdego wystąpienie Aparat baz danych, tempdb musi mieć dostatecznie dużo miejsca do przechowywania wersji wiersza generowane dla każdej bazy danych w instancji.Administrator bazy danych musi zapewnić, że tempdb ma wystarczającą ilość miejsca do obsługi magazynu wersja.Istnieją dwa sklepy wersja w tempdb:
Magazynu wersja kompilacji online indeks jest używany dla indeksu online kompilacje w przypadku wszystkich baz danych.
Wspólne magazynu wersja jest używana dla wszystkich innych operacji modyfikujących dane w przypadku wszystkich baz danych.
Wersje wierszy należy przechowywać jak aktywnej transakcji musi do niego dostęp.Po co minutę przez wątek tła usuwa wersje wierszy, które nie są już potrzebne i zwalnia miejsce wersja w tempdb.Transakcja długim uniemożliwia miejsca w magazynie wersja opublikowanej, jeżeli spełnia jeden z następujących warunków:
Używa wierszy na podstawie wersji izolacji.
Używa wyzwalaczy, MARS lub operacji budowania indeksu online.
Generuje wersji wiersza.
Ostrzeżenie
Wyzwalacz zostanie wywołane wewnątrz transakcji, wersje wierszy utworzonych przez wyzwalacz są zachowywane aż do zakończenia transakcji, mimo że wersje wierszy nie są już potrzebne po zakończeniu wyzwalacza.Dotyczy to także transakcje popełnione odczytu, używające wersji wiersza.Tego typu transakcji transakcyjnie jednolity widok bazy danych jest konieczne tylko w przypadku każdej instrukcja w transakcji.Oznacza to, że wiersz wersji utworzone dla instrukcja w transakcji nie są już potrzebne po wykonaniu instrukcja.Jednak wersje wierszy utworzonych przez każdej instrukcja w transakcji są zachowywane aż do jej zakończenia.
Gdy tempdb zabraknie miejsca, Aparat baz danych sił wersja przechowuje do zmniejszania.Podczas procesu zmniejszania najdłuższego uruchomione transakcje, które wersje wierszy nie jest jeszcze wygenerowane są oznaczone jako ofiar.Komunikat 3967 jest generowany dziennik błędów dla każdej transakcji ofiary.Jeśli transakcja jest oznaczony jako ofiarą, nie może odczytać wersja wiersza w magazynie wersja.Podczas próby odczytu wersji wiersza, generowany jest komunikat 3966 i transakcja jest cofana.Jeśli shrinking proces się powiedzie, miejsce stanie się dostępny w tempdb.W przeciwnym razie tempdb występuje uruchamia miejsca i następujące:
Zapis działania nadal wykonać , ale nie generują wersji.dziennik błędów pojawia się komunikat informacyjny (3959), ale nie dotyczy transakcji, która zapisuje dane.
Transakcje, które próbują uzyskać dostęp do wersji wierszy, które nie zostały wygenerowane z powodu tempdb zakończenie pełnego wycofywania z błędem 3958.
Miejsca wierszy danych
Każdy wiersz bazy danych może używać do 14 bajtów na końcu wiersza wiersza przechowywania informacji.Informacje na temat wersja wiersz zawiera numer sekwencji transakcji popełnione wersja i wskaźnik do wersja wiersza transakcji.Tych bajtów 14 są dodawane pierwszego czas jest modyfikowany wiersz lub gdy wstawiony nowy wiersz pod jeden z następujących warunków:
Opcje READ_COMMITTED_SNAPSHOT lub ALLOW_SNAPSHOT_ISOLATION są na.
Tabela ma wyzwalacz.
Wiele zestawów wyników Active (MARS) jest używany.
Operacji budowania indeksu online są obecnie uruchomione na tabela.
Te 14 bajty są usuwane z bazy danych wiersz pierwszy czas wiersz zostanie zmodyfikowany w obszarze wszystkie te warunki:
READ_COMMITTED_SNAPSHOT i ALLOW_SNAPSHOT_ISOLATION są wyłączone.
Wyzwalacz nie istnieje w tabela.
MARS nie jest używany.
Operacji budowania indeksu online nie są aktualnie uruchomione.
Jeśli używasz funkcji przechowywania wersji wiersza, należy przydzielić dodatkowego miejsca na dysku dla bazy danych pomieścić 14 bajtów na wiersza bazy danych.Dodawanie informacji o wersji wiersza może powodować podziały strona indeksu lub Alokacja nowej strony danych, jeśli na bieżącej stronie nie ma wystarczającej ilości miejsca.Na przykład długość wierszy średnia jest 100 bajtów, dodatkowych bajtów 14 spowodować istniejącej tabela do 14 procent wzrostu.
Zmniejszenie współczynnik wypełnienia mogą pomóc w celu zapobieżenia lub zmniejszenia fragmentacji stron indeksowych.Aby przejrzeć informacje Fragmentacja danych i indeksów tabela lub widoku, można użyć dbcc showcontig.
Miejsca w dużych obiektów
Aparat baz danych programu SQL Server Obsługuje danych sześć typów, które można przechowywać dużą ciągi do 2 gigabajtów (GB) długości: nvarchar(max), varchar(max), varbinary(max), ntext, text, and image.Ciągi dużych przechowywane za pomocą tych typów danych są przechowywane w szeregu fragmenty danych, które są połączone z wiersza danych.Informacje na temat wersji wiersza jest przechowywana w każdy fragment używane do przechowywania tych ciągów duże.Fragmenty danych są kolekcja stron przeznaczonego do dużych obiektów w tabela.
Jak nowe duże wartości zostaną dodane do bazy danych, są przydzielane, maksymalnie 8040 bajtów danych na fragment.We wcześniejszych wersjach Aparat baz danych przechowywane do 8080 bajtów ntext, text, lub image danych każdego fragmentu.
Istniejące ntext, text, i image danych do dużego obiektu (LOB) nie jest aktualizowany do miejsca informacji wersja wiersza po uaktualnieniu bazy danych do SQL Server z wcześniejszej wersja programu SQL Server.Jednakże pierwszy czas dane LOB jest modyfikowany, jest uaktualniany dynamicznie do włączenia przechowywania wersji informacji.Dzieje się tak nawet wtedy, gdy wiersz wersje nie są generowane.Po uaktualnieniu dane LOB maksymalna liczba bajtów przechowywane na fragment jest zmniejszony z 8080 bajtów 8040 bajtów.Proces uaktualniania jest równoważne usunięcie wartości LOB i reinserting tę samą wartość.Dane LOB jest uaktualniany, nawet jeśli modyfikowany tylko przez jeden bajt.Jest to jedno -czas operacji dla każdego ntext, text, lub image kolumna, ale każda operacja może generować dużą ilość alokacji strona i aktywności We/Wy, w zależności od rozmiaru dane LOB.To może generować dużą ilość rejestrowania aktywności, jeśli modyfikacja jest w pełni rejestrowane.Operacje WRITETEXT i UPDATETEXT są rejestrowane minimalny, jeśli tryb odzyskiwanie bazy danych nie jest zestaw pełne.
nvarchar(max), varchar(max), I varbinary(max) typy danych nie są dostępne w starszych wersjach SQL Server.Dlatego mieć żadnych problemów uaktualniania.
Aby spełnić to wymaganie powinna zostać przydzielona wystarczająca ilość miejsca na dysku.
Monitorowanie wersji wiersza i magazynu wersji
Monitorowania wersja wiersza, magazynu wersja i migawka izolacji procesów dla wydajności i problemów, SQL Server zawiera narzędzia w postaci dynamicznych widoków zarządzania (DMVs) i liczników wydajności w Monitorze systemu.
DMVs
DMVs następujące informacje na temat bieżącego stanu systemu tempdb i magazynu wersja, jak również transakcji za pomocą wersja wiersza.
sys.dm_db_file_space_usage.Returns space usage information for each file in the database.Aby uzyskać więcej informacji, zobacz sys.dm_db_file_space_usage (języka Transact-SQL).
sys.dm_db_session_space_usage.Returns page allocation and deallocation activity by session for the database.Aby uzyskać więcej informacji, zobacz sys.dm_db_session_space_usage (języka Transact-SQL).
sys.dm_db_task_space_usage.Returns page allocation and deallocation activity by task for the database.Aby uzyskać więcej informacji, zobacz sys.dm_db_task_space_usage (języka Transact-SQL).
sys.dm_tran_top_version_generators.Returns a virtual table for the objects producing the most versions in the version store.Grup górny 256 zagregowane rekordu długości database_id i rowset_id.Ta funkcja służy do znalezienia największych konsumentów magazynu wersja.Aby uzyskać więcej informacji, zobacz sys.dm_tran_top_version_generators (języka Transact-SQL).
sys.dm_tran_version_store.Returns a virtual table that displays all version records in the common version store.Aby uzyskać więcej informacji, zobacz sys.dm_tran_version_store (języka Transact-SQL).
Ostrzeżenie
sys.dm_tran_top_version_generatorsi sys.dm_tran_version_store są potencjalnie bardzo kosztowne funkcje uruchamiać, ponieważ zarówno kwerendy magazynu wersja całej może być bardzo duża.
sys.dm_tran_active_snapshot_database_transactions.Returns a virtual table for all active transactions in all databases within the SQL Server instance that use row versioning.System transakcje nie są wyświetlane w tym DMV.Aby uzyskać więcej informacji, zobacz sys.dm_tran_active_snapshot_database_transactions (języka Transact-SQL).
sys.dm_tran_transactions_snapshot.Returns a virtual table that displays snapshots taken by each transaction.migawka zawiera numer kolejny aktywnych transakcji, używających wersji wiersza.Aby uzyskać więcej informacji, zobacz sys.dm_tran_transactions_snapshot (języka Transact-SQL).
sys.dm_tran_current_transaction.Returns a single row that displays row versioning-related state information of the transaction in the current session.Aby uzyskać więcej informacji, zobacz sys.dm_tran_current_transaction (języka Transact-SQL).
sys.dm_tran_current_snapshot.Returns a virtual table that displays all active transactions at the time the current snapshot isolation transaction starts.If the current transaction is using snapshot isolation, this function returns no rows.sys.dm_tran_current_snapshot is similar to sys.dm_tran_transactions_snapshot, except that it returns only the active transactions for the current snapshot.Aby uzyskać więcej informacji, zobacz sys.dm_tran_current_snapshot (języka Transact-SQL).
Liczniki wydajności
SQL Serverliczniki wydajności udostępniają informacje o wydajności systemu z SQL Server procesów.Monitorować następujące liczniki wydajności tempdb i magazynu wersja, jak również transakcji za pomocą wersja wiersza.Liczniki wydajności są zawarte w obiekcie wydajności SQLServer:Transactions.
Wolne miejsce w tempdb (KB).Monitoruje ilość wyrażona w kilobajtach (KB) miejsca w tempdb bazy danych.Musi być wystarczająca ilość wolnego miejsca w tempdb do obsługi magazynu wersja obsługującej izolacji migawka.
Poniższa formuła zawiera oszacowanie rozmiaru magazynu wersja.Długotrwały transakcji może być przydatne w celu monitorowania wytwarzania i szybkość oczyszczania oszacowanie maksymalny rozmiar magazynu wersja.
[rozmiar magazynu wersji wspólnych] = 2 * [wersja magazynu danych generowanych na minutę] * [systemem najdłuższy czas (w minutach) transakcji]
Najdłużej działają czas transakcji nie powinny obejmować kompilacje indeks w trybie online.Ponieważ te operacje może trwać bardzo długo czas na bardzo dużych tabel kompilacje online indeksu Użyj magazynu oddzielnych wersja.Przybliżony rozmiar indeksu online tworzenia wersja magazynu jest równa ilości danych modyfikowane w tabela, w tym wszystkie indeksy podczas budowania indeksu online jest aktywny.
Rozmiar magazynu wersji (KB).Monitoruje rozmiar w Kilobajtach wszystkie sklepy wersja.Ta informacja pomaga określić ilość miejsca w tempdb bazy danych magazynu wersja.Monitorowanie tego licznika w okresie czas zawiera przydatne szacowania dodatkowe miejsca potrzebnego dla tempdb.
Szybkość generowania wersji (KB/s).Monitoruje wersja generacji szybkości w Kilobajtach na sekundę w wszystkie sklepy wersja.
Wersja szybkość oczyszczania (KB/s).Monitoruje wersja Oczyszczanie szybkości w Kilobajtach na sekundę w wszystkie sklepy wersja.
Ostrzeżenie
Informacje z Version Generation rate (KB/s) i Version Cleanup rate (KB/s) może być zastosowane do przewidywania tempdb wymagania dotyczące miejsca.
Liczba jednostek magazynu wersji.Monitoruje liczba jednostek przechowywania wersja.
Tworzenie jednostki magazynu wersji.Monitory całkowita liczba wersja przechowywania jednostek służy do przechowywania wersja wiersza uruchomienia wystąpienie.
Obcięcie jednostka magazynu wersji.Monitoruje całkowita liczba jednostek magazynu wersja obcięte uruchomienia wystąpienie.Jednostka magazynu wersja jest obcinana podczas SQL Server Określa Brak wierszy wersja przechowywane w jednostce magazynu wersja niezbędne do działania aktywnych transakcji.
Stosunek konflikt aktualizacji.Monitoruje stosunek transakcji migawka update aktualizacja konfliktów, aby całkowita liczba transakcji migawka aktualizacji.
Transakcja najdłuższy czas uruchamiania.Monitoruje najdłuższego z systemem czas w sekundach wszelkich transakcji przy użyciu wersji wiersza.Można to ustalić jeśli każda transakcja jest uruchomiona na nieuzasadnionych czas.
Transakcje.Monitoruje całkowita liczba aktywnych transakcji.Nie ma systemu transakcji.
Migawkę transakcji.Całkowita liczba aktywnych monitoruje migawka transakcji.
Aktualizowanie transakcji Snapshot.Całkowita liczba aktywnych monitoruje migawka transakcje, które wykonują aktualizowanie operacji.
Transakcje w wersji nonSnapshot.Monitoruje całkowita liczba aktywnych transakcji innych niż migawka generujących wersja rekordów.
Ostrzeżenie
Suma Update Snapshot Transactions i NonSnapshot Version Transactions reprezentuje całkowita liczba transakcji, które uczestniczą w wersja generacji.Różnica Snapshot Transactions i Update Snapshot Transactions liczbę tylko do odczytu migawka transakcje.