sys.dm_db_index_physical_stats (Transact-SQL)

Zwraca informacje o wielkości i fragmentacji dla danych i indeksów z określonej tabela lub widoku.Do indeksu zwracana jest jeden wiersz dla każdego poziom B-drzewo w każdej partycji.Na stosie jeden wiersz jest zwracana dla jednostka alokacji IN_ROW_DATA każdej partycji.Dla danych dużych obiektów (LOB) zwracana jest jeden wiersz dla jednostka alokacji LOB_DATA każdej partycji.Jeśli wiersze danych przekraczające rozmiar strony w tabela, jeden wiersz jest zwracana dla jednostka alokacji ROW_OVERFLOW_DATA w każdej partycji.Aby uzyskać informacje na temat jednostek alokacji i partycji zobacz Tabele i architektura strukturami danych indeksu.

Topic link iconKonwencje składni języka Transact-SQL

sys.dm_db_index_physical_stats ( 
    { database_id | NULL | 0 | DEFAULT }
    , { object_id | NULL | 0 | DEFAULT }
    , { index_id | NULL | 0 | -1 | DEFAULT }
    , { partition_number | NULL | 0 | DEFAULT }
    , { mode | NULL | DEFAULT }
)

Argumenty

  • database_id | NULL | 0 | DOMYŚLNE
    Is the ID of the database.database_id is smallint.Prawidłowe dane wejściowe są numer identyfikacyjny bazy danych, wartość NULL, 0 lub DEFAULT.Wartość domyślna to 0.Wartością tą jest NULL, 0, a DEFAULT są równoważne wartości w tym kontekście.

    Należy określić wartość NULL, aby przywrócić informacje w przypadku wszystkich baz danych w wystąpieniu programu SQL Server. Jeżeli określono wartość NULL dla database_id, należy także określić wartość NULL dla object_id, index_id, a partition_number.

    Wbudowanej funkcja DB_ID może być określony.W przypadku korzystania z DB_ID bez określania nazwy bazy danych, poziom zgodności z bieżącej bazy danych musi być 90.

  • object_id | NULL | 0 | DOMYŚLNE
    Is the object ID of the table or view the index is on.object_id is int.

    Prawidłowe dane wejściowe są identyfikator tabela i w widoku, NULL, 0 lub DEFAULT.Wartość domyślna to 0.Wartością tą jest NULL, 0, a DEFAULT są równoważne wartości w tym kontekście.

    Należy określić wartość NULL, zwraca informacje o wszystkie tabele i widoki w określonej bazie danych.Jeżeli określono wartość NULL dla object_id, należy także określić wartość NULL dla index_id i partition_number.

  • index_id | 0 | NULL | -1 | DOMYŚLNE
    Is the ID of the index.index_id is int.Prawidłowe dane wejściowe są numer identyfikacyjny indeksu, 0, jeżeli object_id jest sterty, NULL, -1 lub DEFAULT. Wartość domyślna to -1.Wartością tą jest NULL, -1, a DEFAULT są równoważne wartości w tym kontekście.

    Należy określić wartość NULL, zwraca informacje o wszystkich indeksów w tabela bazowa lub w widoku.Jeżeli określono wartość NULL dla index_id, należy także określić wartość NULL dla partition_number.

  • partition_number | NULL | 0 | DOMYŚLNE
    Is the partition number in the object.partition_number is int.Prawidłowe dane wejściowe są partion_number indeks lub sterty, NULL, 0 lub DEFAULT. Wartość domyślna to 0.Wartością tą jest NULL, 0, a DEFAULT są równoważne wartości w tym kontekście.

    Należy określić wartość NULL do zwracania informacji dla wszystkich partycji posiadanie obiektu.

    partition_number jest oparte na 1.Indeks nonpartitioned lub sterty. partition_number wartość 1.

  • mode | NULL | DOMYŚLNE
    Is the name of the mode.mode specifies the scan level that is used to obtain statistics.mode is sysname.Prawidłowe dane wejściowe są DEFAULT, wartość NULL, LIMITED, SAMPLED lub DETAILED.Wartością domyślną (NULL) jest ograniczony.

Zwracana tabela

Nazwa kolumna

Typ danych

Description

database_id

smallint

Identyfikator bazy danych, tabela lub widoku.

object_id

int

Identyfikator tabela lub widoku, który znajduje się w indeksie.

index_id

int

Identyfikator indeksu z indeksu.

0 = Sterty.

partition_number

int

numer partycji na 1 w posiadanie obiektu; tabela, widoku lub indeksu.

1 = Indeks nonpartitioned lub sterty.

index_type_desc

nvarchar(60)

Opis typu indeksu:

STERTY.

INDEKS KLASTROWANY

INDEKS NIEKLASTROWANY

INDEKS GŁÓWNY XML

INDEKS PRZESTRZENNY

INDEKS XML

alloc_unit_type_desc

nvarchar(60)

Opis typu jednostka alokacji:

IN_ROW_DATA

LOB_DATA

ROW_OVERFLOW_DATA

Jednostka alokacji LOB_DATA zawiera dane, które są przechowywane w kolumnach typu text, ntext, image, varchar(max), nvarchar(max), varbinary(max), a xml. Aby uzyskać więcej informacji zobaczData Types (Transact-SQL).

Jednostka alokacji ROW_OVERFLOW_DATA zawiera dane, które są przechowywane w kolumnach typu varchar(n), nvarchar(n), varbinary(n), a sql_variant mają został przeniesiony poza wiersza. Aby uzyskać więcej informacji zobaczRow-Overflow Data Exceeding 8 KB.

index_depth

tinyint

Liczba poziomów indeksu.

1 = Sterty lub LOB_DATA ROW_OVERFLOW_DATA jednostka alokacji.

index_level

tinyint

Bieżący poziom wskaźnika.

0 dla poziomów liść indeksu, heaps i LOB_DATA lub ROW_OVERFLOW_DATA jednostek alokacji.

Greater than 0 for nonleaf index levels.index_level will be the highest at the root level of an index.

Poziomy nonleaf indeksy są tylko podczas przetwarzania mode = SZCZEGÓŁOWE.

avg_fragmentation_in_percent

float

Fragmentacja logiczne dla indeksów, lub fragment fragmentacji dla hałd w jednostce alokacji IN_ROW_DATA.

Wartość jest mierzona jako procent i bierze pod uwagę wiele plików.Aby definicje logicznych i stopnia fragmentacji zobacz Spostrzeżenia.

0 LOB_DATA i ROW_OVERFLOW_DATA jednostek alokacji.

Wartość NULL dla heaps kiedy mode = POBRANE.

fragment_count

bigint

Liczba fragmentów na poziomie poziom liścia IN_ROW_DATA jednostka alokacji.Aby uzyskać więcej informacji na temat fragmentów zobacz Spostrzeżenia.

Wartość NULL dla poziomów nonleaf indeksu i LOB_DATA lub ROW_OVERFLOW_DATA jednostek alokacji.

Wartość NULL dla heaps kiedy mode = POBRANE.

avg_fragment_size_in_pages

float

Średnia liczba stron w jednym fragmencie na poziomie poziom liścia IN_ROW_DATA jednostka alokacji.

Wartość NULL dla poziomów nonleaf indeksu i LOB_DATA lub ROW_OVERFLOW_DATA jednostek alokacji.

Wartość NULL dla heaps kiedy mode = POBRANE.

page_count

bigint

Całkowita liczba stron w indeksie lub danych.

Do indeksu, łączną liczbę stron indeksu bieżącego poziom drzewa w jednostce alokacji IN_ROW_DATA b.

Na stosie, liczba danych ze stron w IN_ROW_DATA jednostka alokacji.

Dla LOB_DATA lub ROW_OVERFLOW_DATA jednostka alokacji s, całkowita liczba stron w jednostka alokacji.

avg_page_space_used_in_percent

float

Wyrażoną w procentach średnią ilością miejsca na przechowywanie dostępne dane używane na wszystkich stronach.

Do indeksu, średnia odnosi się do bieżącego poziom B-drzewo w jednostce alokacji IN_ROW_DATA.

Na stosie, średnią wszystkich danych ze stron w IN_ROW_DATA jednostka alokacji.

Dla LOB_DATA lub DATA ROW_OVERFLOW jednostka alokacji s, średnia wszystkich stron w jednostka alokacji.

Kiedy NULL mode = OGRANICZONE.

record_count

bigint

Całkowita liczba rekordów.

Do indeksu, całkowitą liczbę rekordów, odnosi się do bieżącego poziom B-drzewo w IN_ROW_DATA jednostka alokacji.

Na stosie, całkowita liczba rekordów w IN_ROW_DATA jednostka alokacji.

NoteNote:
Na stosie liczby rekordów zwracanych z tej funkcja mogą być niezgodne liczbę wierszy zwracanych przez uruchomienie Count(*) z SELECT wobec sterty.Dzieje się tak, ponieważ wiersz może zawierać wiele rekordów.Na przykład w niektórych sytuacjach, sterty pojedynczy wiersz może mieć rekord przesyłania dalej i przesyłanych dalej rekordu z powodu operacji aktualizacji.Ponadto większości dużych LOB wiersze są dzielone na wiele rekordów w magazynie LOB_DATA.

Dla LOB_DATA lub ROW_OVERFLOW_DATA jednostka alokacji s, całkowita liczba rekordów z pełną jednostka alokacji.

Kiedy NULL mode = OGRANICZONE.

ghost_record_count

bigint

Liczba zduplikowanych rekordów gotowego do odbioru przez oczyszczanie duplikatu zadań w jednostka alokacji.

0 dla poziomów nonleaf indeksu w IN_ROW_DATA jednostka alokacji.

Kiedy NULL mode = OGRANICZONE.

version_ghost_record_count

bigint

Liczba rekordów duplikatu zatrzymane przez transakcję izolacji zaległe migawkę w jednostka alokacji.

0 dla poziomów nonleaf indeksu w IN_ROW_DATA jednostka alokacji.

Kiedy NULL mode = OGRANICZONE.

min_record_size_in_bytes

int

Rekord minimalny rozmiar w bajtach.

Do indeksu, rekord minimalny rozmiar odnosi się do bieżącego poziom B-drzewo w IN_ROW_DATA jednostka alokacji.

Na stosie, rekord minimalny rozmiar w IN_ROW_DATA jednostka alokacji.

Dla LOB_DATA lub ROW_OVERFLOW_DATA jednostka alokacji s, rekord minimalny rozmiar w z pełną jednostka alokacji.

Kiedy NULL mode = OGRANICZONE.

max_record_size_in_bytes

int

Rekord maksymalny rozmiar w bajtach.

Dla indeksu, rozmiar maksymalny rekord odnosi się do bieżącego poziom B-drzewo w IN_ROW_DATA jednostka alokacji.

Na stosie, rekord maksymalny rozmiar w IN_ROW_DATA jednostka alokacji.

Dla LOB_DATA lub ROW_OVERFLOW_DATA jednostka alokacji s, rekord maksymalny rozmiar w z pełną jednostka alokacji.

Kiedy NULL mode = OGRANICZONE.

avg_record_size_in_bytes

float

Średni rozmiar rekordu w bajtach.

Dla indeksu, rozmiar rekordu średnia stosuje się do bieżącego poziom drzewa w IN_ROW_DATA b jednostka alokacji.

Na stosie, rekordu średniego rozmiaru w IN_ROW_DATA jednostka alokacji.

Dla LOB_DATA lub ROW_OVERFLOW_DATA jednostek alokacji, średni rozmiar rekordu w jednostce alokacji pełne.

Kiedy NULL mode = OGRANICZONE.

forwarded_record_count

bigint

Liczba rekordów w sterty, w których wskaźniki do przodu do innej lokalizacji danych.(Ten stan występuje podczas aktualizacji, gdy nie ma wystarczająco dużo miejsca, aby zapisać nowy wiersz w oryginalnej lokalizacji.)

Wartość NULL dla każdej jednostka alokacji, inne niż IN_ROW_DATA jednostka alokacji sterty.

Wartość NULL dla heaps kiedy mode = OGRANICZONE.

compressed_page_count

bigint

Liczba stron skompresowany.

  • Dla hałd, nowo przydzielone stron nie są strona skompresowany.Stosu jest strona skompresowany pod dwoma warunkami specjalne: gdy dane są importowane zbiorczego lub gdy stosu jest zbudowane ponownie. Typowe operacje DML, które powodują alokacji strona nie będą kompresowane strona.Odbudowanie sterty, gdy wartość compressed_page_count powiększa się większa niż wartość progowa, która ma.

  • W przypadku tabel, z indeksem klastrowanym wartość compressed_page_count wskazuje skuteczności strona kompresji.

Remarks

Funkcja dynamicznego zarządzania sys.dm_db_index_physical_stats zastępuje SHOWCONTIG DBCC instrukcja.Ta funkcja dynamicznego zarządzania nie akceptuje parametry skorelowanej pytania mają zastosowania i OUTER mają zastosowania.

Trybu skanowania

The mode in which the function is executed determines the level of scanning performed to obtain the statistical data that is used by the function.mode is specified as LIMITED, SAMPLED, or DETAILED.The function traverses the page chains for the allocation units that make up the specified partitions of the table or index.sys.dm_db_index_physical_stats requires only an Intent-Shared (IS) table lock, regardless of the mode that it runs in.Aby uzyskać więcej informacji na temat blokowania Zobacz Tryby blokada.

Tryb LIMITED to najszybszy tryb i skanuje najmniejszą liczbę stron.Do indeksu są skanowane tylko strony poziomu nadrzędnego B-drzewo (to znaczy strony powyżej poziomu typu poziom liścia).Na stosie badane są tylko te skojarzone doskonałe utajnienie przekazywania i IAM strony; nie były skanowane strony danych sterty.W SQL Server 2005, wszystkie strony ze stosu są skanowane w trybie LIMITED.

W trybie LIMITED compressed_page_count ma wartość NULL, ponieważ Database Engine tylko skanowanie stron typu nie liść B-drzewo i IAM i doskonałe utajnienie przekazywania strony sterty. W trybie SAMPLED uzyskać wartość szacunkowa compressed_page_count i uzyskać wartość rzeczywista compressed_page_count za pomocą tryb szczegółowyTryb SAMPLED zwraca statystyki na podstawie próbki 1 procent wszystkich stron w indeksie lub sterty.Jeśli indeks lub sterty ma mniej niż 10 000 stron, zamiast SAMPLED używany jest tryb szczegółowy.

Tryb szczegółowy skanuje wszystkie strony i zwraca wszystkie statystyki.

W trybach są stopniowo wolniejsze od LIMITED DETAILED, ponieważ więcej pracy odbywa się w każdym z trybów.Aby szybko ocenić poziom rozmiaru lub fragmentacji tabela lub indeksu, należy użyć trybu LIMITED.Jest najszybsze i nie będzie zwracać wiersz dla każdego poziom nonleaf w jednostce alokacji IN_ROW_DATA indeksu.

Aby określić wartości parametru za pomocą funkcje systemowe

Można użyć Transact-SQL Funkcje DB_ID and OBJECT_ID , aby określić wartość database_id i object_id Parametry. Jednak przekazywanie wartości, które nie są prawidłowe, tych funkcji może spowodować niezamierzone rezultaty.Na przykład jeśli nie można odnaleźć nazwy bazy danych lub obiektu, ponieważ one nie istnieją lub są niepoprawnie wpisany, funkcjami zwróci wartość NULL.Funkcja sys.dm_db_index_physical_stats interpretuje wartość NULL jako symbol wieloznaczny wartości wszystkich baz danych lub wszystkie obiekty.

Ponadto funkcja OBJECT_ID są przetwarzane, zanim funkcja sys.dm_db_index_physical_stats nazywa się i dlatego jest oceniany w odniesieniu do bieżącej bazy danych, nie bazy danych określona w database_id. Zachowanie to może spowodować, że funkcja OBJECT_ID ma zostać zwrócona wartość NULL; lub, jeśli nazwa obiektu jest zarówno w bieżącym kontekście bazy danych, jak i w określonej bazy danych, komunikat o błędzie może być zwrócona.W poniższych przykładach pokazano te niezamierzone wyniki.

USE master;
GO
-- In this example, OBJECT_ID is evaluated in the context of the master database. 
-- Because Person.Address does not exist in master, the function returns NULL.
-- When NULL is specified as an object_id, all objects in the database are returned.
-- The same results are returned when an object that is not valid is specified.
SELECT * FROM sys.dm_db_index_physical_stats
    (DB_ID(N'AdventureWorks'), OBJECT_ID(N'Person.Address'), NULL, NULL , 'DETAILED');
GO
-- This example demonstrates the results of specifying a valid object name
-- that exists in both the current database context and
-- in the database specified in the database_id parameter of the 
-- sys.dm_db_index_physical_stats function.
-- An error is returned because the ID value returned by OBJECT_ID does not
-- match the ID value of the object in the specified database.
CREATE DATABASE Test;
GO
USE Test;
GO
CREATE SCHEMA Person;
GO
CREATE Table Person.Address(c1 int);
GO
USE AdventureWorks;
GO
SELECT * FROM sys.dm_db_index_physical_stats
    (DB_ID(N'Test'), OBJECT_ID(N'Person.Address'), NULL, NULL , 'DETAILED');
GO
-- Clean up temporary database.
DROP DATABASE Test;
GO

Najważniejsze wskazówki

Zawsze należy się upewnić, że zwracana jest prawidłowy identyfikator, za pomocą DB_ID lub OBJECT_ID.Na przykład gdy używasz OBJECT_ID określić nazwę trzech części taką jak OBJECT_ID(N'AdventureWorks.Person.Address'), lub wartości zwracanej przez funkcje przed użyciem funkcja sys.dm_db_index_physical_stats testowania. Przykłady A i B, które należy wykonać wykazać bezpieczny sposób, aby określić bazę danych i identyfikatory obiektów.

Wykrywanie fragmentacji

Fragmentacja występuje w procesie modyfikacji danych (instrukcje INSERT, UPDATE i DELETE), dokonane przed tabela, a w związku z tym, indeksów, zdefiniowane w tabela.Ponieważ te modyfikacje nie zazwyczaj umieszczone są równie wierszy tabela i indeksów, stopnia ukończenia każdej strona może się zmieniać w czasie.Dla kwerend skanowanie części lub całości indeksy tabela ten rodzaj fragmentacji może spowodować, że odczyty dodatkową strona.To przeszkadza równoległych skanowania danych.

Algorytm obliczania fragmentacji jest bardziej precyzyjne w SQL Server 2008 niż w SQL Server 2000. W wyniku wartości fragmentacji pojawi się wyższe.Na przykład w SQL Server 2000, tabela nie jest uważany za fragmentacji, jeśli ma ona strona 11 i strona 13 w tym samym zakresie, ale nie strona 12. Jednak aby uzyskać dostęp do tych dwóch stron wymaga dwóch fizycznych operacji We/Wy, co to jest liczony jako fragmentacji w SQL Server 2008.

Poziom rozdrobnienia indeksu lub stosu jest wyświetlany kolumna avg_fragmentation_in_percent.Hałd wartość reprezentuje fragmentacji fragment sterty.Dla indeksów wartość reprezentuje logiczną fragmentacji indeksu.W odróżnieniu od SHOWCONTIG DBCC algorytmów obliczeń fragmentacji w obu przypadkach należy wziąć pod uwagę pamięci masowej, która obejmuje wiele plików i dlatego są dokładne.

Fragmentacja logicznych

Jest to procent poza kolejnością stron na stronach typu liść indeksu.strona poza kolejnością jest stroną, dla którego następnej strona fizyczne, przydzielonych do indeksu nie jest wskazywany przez pag następnej stronae wskaźnik na bieżącej stronie typu liść.

Fragmentacja fragment

Jest to procent poza kolejnością zakresów na stronach typu liść sterty.W zakresie poza kolejnością to dla których fragment zawierający bieżącą strona do stosu nie jest fizycznie następnego fragment po jakim zawiera poprzedniej strona.

Wartość dla avg_fragmentation_in_percent powinna być jak zbliżona do zera, jak to możliwe w celu uzyskania maksymalnej wydajności.Jednak wartości od 0 do 10 procent mogą być akceptowane.Wszystkie metody zmniejszenie fragmentacji, takie jak przebudowy, zmiana lub odtwarzania, można użyć do zmniejszenia tych wartości.Aby uzyskać więcej informacji dotyczących sposobu analizowania stopień fragmentacji w indeksie zobacz Reorganizing and Rebuilding Indexes.

Zmniejszanie fragmentacji w indeksie

Gdy indeks jest pofragmentowany w sposób, że fragmentacji ma wpływ na wydajność kwerendy, dostępne są trzy opcje zmniejszenia fragmentacji:

  • Usuwanie i ponowne utworzenie indeks klastrowany.

    Ponowne tworzenie indeks klastrowany rozkłada dane i powoduje stron pełnych danych.Poziom stopnia ukończenia można konfigurować za pomocą opcji FILLFACTOR w CREATE INDEX.Niedogodności tej metoda są czy indeks jest w trybie offline podczas listy rozwijanej i ponownie utworzyć cykl, i że operacja jest niepodzielny.Jeśli do tworzenia indeksu zostanie przerwana, indeks nie jest ponownie tworzony.Aby uzyskać więcej informacji zobaczCREATE INDEX (języka Transact-SQL).

  • Aby zmienić kolejność strony poziomu poziom liścia indeksu w celu logicznego za pomocą instrukcji ALTER REORGANIZOWAĆ indeks, zastępujące INDEXDEFRAG DBCC.Ponieważ jest to operacja online, indeks jest dostępny podczas pracy w instrukcja.Operacja może być również przerwana bez utraty pracy już wykonanej.Wadą tej metoda jest, że go nie działa jak dobre zadanie z reorganizowanie danych operacji odbudować indeks, a nie powoduje aktualizacja statystyki.

  • Użyć instrukcji ALTER ODBUDOWAĆ indeks, zastępujące DBCC DBREINDEX odbudować indeks w trybie online lub offline.Aby uzyskać więcej informacji zobaczALTER INDEX (języka Transact-SQL).

Fragmentacja samodzielnie nie jest wystarczający powód, aby zreorganizować lub odbudowanie indeksu.Głównym skutkiem fragmentacji jest, że go spowalnia strona wydajność odczytu z wyprzedzeniem podczas skanowania indeksu.Powoduje wolniejsze czasy odpowiedzi.Jeśli obciążenia kwerendy fragmentacji tabela lub indeksu nie pociąga za sobą skanowanie, ponieważ obciążenie pracą jest przede wszystkim pojedynczych wyszukiwań, usuwanie fragmentacji może miało żadnego efektu.Aby uzyskać więcej informacji zobacz temat to Witryny firmy Microsoft w sieci Web.

Uwaga

Systemem SHRINKFILE DBCC lub SHRINKDATABASE DBCC mogą wprowadzać fragmentacji, jeśli indeks jest przenoszone podczas operacji zmniejszania częściowo lub całkowicie.Dlatego też jeżeli operacja zmniejszania należy wykonać, należy nie, aby to zrobić, po usunięciu fragmentacji.

Zmniejszanie fragmentacji w sterty

Aby zmniejszyć fragmentacji fragment sterty, tworzenie indeks klastrowany w tabela, a następnie upuść indeksu.Rozkłada dane, podczas gdy tworzony jest indeks klastrowany.Również ułatwia optymalne tak jak to możliwe, biorąc pod uwagę rozkład wolnego miejsca w bazie danych.Indeks klastrowany zostanie następnie następowało ponowne utworzenie sterty, dane nie są przenoszone i optymalnie pozostaje w miejscu.Aby uzyskać informacje dotyczące sposobu wykonania tych operacji zobacz TWORZENIE INDEKSU and USUWANIE INDEKSU.

Kompaktowanie duże dane obiektu

Domyślnie w instrukcja ALTER REORGANIZOWAĆ indeks kompaktuje stron, które zawierają dane dużych obiektów (LOB).Ponieważ LOB stron nie są przydziałów, gdy pusta, kompaktowanie danych może poprawić wykorzystania miejsca na dysku partii dane LOB zostały usunięte, czy kolumna LOB zostało porzucone.

Reorganizacja określony indeks klastrowany Kompaktuje wszystkie kolumny LOB, znajdujących się w indeksie klastrowanym.Reorganizacja indeks nieklastrowany Kompaktuje wszystkie LOB kolumny nonkey (włączone) w indeksie.Gdy wszystko jest określona w instrukcja, zreorganizowana są wszystkie indeksy, które są skojarzone z określoną tabela lub widok.Ponadto wszystkie kolumny LOB, związane z indeksem klastrowanym, tabela podstawowej lub nieklastrowany indeks kolumny dołączone są skompaktować.

Ocena użycia obszar dysku

Kolumna avg_page_space_used_in_percent wskazuje strona stopnia ukończenia.Aby możliwe było wykorzystanie miejsca na dysku optymalne, wartość ta powinna być zbliżone do 100 procent dla indeksu, który nie będzie miał wiele losowych wstawia.Indeks, który ma wiele losowych wstawia bardzo pełne strona i konieczne będzie jednak zwiększenie liczby podziałów strona.Powoduje to, że więcej fragmentacji.Dlatego w celu zmniejszenia podziały strona, wartość powinna być mniejsza niż 100 procent.Przebudowywanie indeksu z FILLFACTOR określono opcję umożliwia stopnia ukończenia strona ma być zmieniony, aby dopasować wzorzec kwerendy w indeksie.Aby uzyskać więcej informacji na temat współczynnik wypełnienia zobacz Fill Factor. Ponadto ALTER REORGANIZOWAĆ indeks będzie skompaktuj indeks próby wypełnienia stron FILLFACTOR, ostatnio określona.Powoduje to zwiększenie wartości avg_space_used_in_percent.Należy zauważyć, że ALTER REORGANIZOWAĆ indeks nie może zmniejszyć strona stopnia ukończenia.Zamiast tego należy wykonać odbudowywania indeksu.

Ocena fragmenty indeksu

Fragment składa się z typu liść fizycznie kolejnych stron w jednym pliku dla jednostka alokacji.Indeks ma co najmniej jeden fragment.Maksymalna liczba fragmentów indeks może być są równe liczbę stron na poziomie poziom liścia indeksu.Większe fragmenty oznacza, że mniej dysku we/wy jest wymagany do wczytania taką samą liczbę stron.W związku z tym im większa wartość avg_fragment_size_in_pages, tym lepsza wydajność skanowania zakres.Wartości avg_fragment_size_in_pages i avg_fragmentation_in_percent są odwrotnie proporcjonalne do siebie.W związku z tym przebudowywanie lub zmiana indeksu należy zredukować stopień fragmentacji i zwiększenie rozmiaru fragmentu.

Uprawnienia

Musi mieć następujące uprawnienia:

  • Uprawnienie Kontrola na określony obiekt znajdujący się w bazie danych.

  • VIEW DATABASE STATE uprawnienie do zwracania informacji o wszystkich obiektach z określonej bazy danych przy użyciu symboli wieloznacznych obiektu @object\_id=null.

  • VIEW SERVER STATE uprawnienie do zwracania informacji o wszystkich baz danych przy użyciu symboli wieloznacznych bazy danych @database\_id = WARTOŚĆ ZEROWA.

Udzielanie VIEW DATABASE STATE umożliwia wszystkie obiekty w bazie danych, które mają być zwrócone, niezależnie od wszelkich uprawnień kontroli odmowa na określonych obiektach.

Odmawianie VIEW STATE bazy danych nie zezwala na wszystkie obiekty w bazie danych, które mają być zwrócone, niezależnie od wszystkich uprawnień kontroli na określonych obiektach.Także, jeśli symbol wieloznaczny bazy danych @database\_id= NULL jest określony, zostanie pominięty w bazie danych.

Aby uzyskać więcej informacji zobaczDynamic Management Views and Functions (Transact-SQL).

Przykłady

A.Zwraca informacje dotyczące określonej tabela

W poniższym przykładzie zwraca rozmiar i fragmentacji statystyki dla wszystkich indeksów i partycje o Person.Address Tabela w AdventureWorks Baza danych. Ustawienie trybu skanowania 'LIMITED' Aby uzyskać najlepszą wydajność oraz ograniczyć dane statystyczne, które są zwracane. Wykonywanie kwerendy tego wymaga, co najmniej uprawnienie Kontrola w Person.Address Tabela.

B.Zwrócenie informacji dotyczących sterty

W poniższym przykładzie są zwracane wszystkie statystyki dla sterty dbo.DatabaseLog w AdventureWorks Baza danych. Ponieważ tabela zawiera dane LOB, wiersz jest zwracana dla jednostka alokacji LOB_DATA oprócz wiersza zwróciła IN_ROW_ALLOCATION_UNIT, które zapisuje dane na stronach sterty.Wykonywanie kwerendy tego wymaga, co najmniej uprawnienie Kontrola w dbo.DatabaseLog Tabela.

C.Zwraca informacje o wszystkich baz danych

W poniższym przykładzie są zwracane wszystkie statystyki dla wszystkich tabel i indeksów w obrębie wystąpienie SQL Server określając symbol wieloznaczny NULL dla wszystkich parametrów. Wykonywanie kwerendy wymaga uprawnienia VIEW SERVER STATE.

D.Za pomocą sys.dm_db_index_physical_stats w skrypcie, aby odbudować lub reorganizować indeksy

W poniższym przykładzie automatycznie Reorganizuje lub buduje ponownie wszystkie partycje w bazie danych, które mają średnia fragmentacji ponad 10 procent.Wykonywanie kwerendy wymaga uprawnienia VIEW DATABASE STATE.W poniższym przykładzie określa DB_ID jako pierwszy parametr bez określania nazwy bazy danych.Jeśli bieżąca baza danych zawiera poziom zgodności, 80 lub niżej, zostanie wygenerowany błąd.Aby usunąć błąd, należy zastąpić DB_ID() prawidłową nazwę bazy danych.Aby uzyskać więcej informacji na temat poziomów zgodności bazy danych zobacz sp_dbcmptlevel (języka Transact-SQL).

Historia zmian

Microsoft Learning

Wyjaśniono, jak w trybie LIMITED, SAMPLED i DETAILED wpływają na wartość compressed_page_count.