Aracılığıyla paylaş


sys.dm_db_index_physical_stats (Transact-SQL)

Veri ve dizinleri belirtilen boyutu ve parçalanma bilgilerini verir tablo veya Görünüm.Dizin, her bölüm B ağacında her düzey için bir satır döndürülür.Bir yığın, her bölüm, IN_ROW_DATA ayırma birimi için bir satır döndürür.Büyük nesne (LOB) verileri için her bölüm, LOB_DATA ayırma birimi için bir satır döndürülür.Satır taşma veri varsa tablo, her bölümdeki ROW_OVERFLOW_DATA ayırma birimi için bir satır döndürülür.Ayırma birimleri ve bölümleri hakkında bilgi için bkz:Tablo ve dizin veri yapıları mimarisi.

Topic link iconTransact-SQL sözdizimi kuralları

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 }
)

Bağımsız değişkenler

  • database_id | NULL | 0 | DEFAULT
    Is the ID of the database.database_id is smallint.Geçerli girişleri olan bir veritabanı, NULL, kimlik numarası 0 ya da DEFAULT.Varsayılan 0'dur.NULL, 0 ve varsayılan karşılığı bu bağlamda değerlerdir.

    Bilgi örneğini tüm veritabanları için geri dönmek için NULL belirtinSQL Server.Olmadığını belirtmek için boşdatabase_idAyrıca belirtmeniz gerekir için NULL,object_id,index_id, vepartition_number.

    Yerleşik işlevDB_ID belirtilebilir.DB_ID bir veritabanı adı belirtmeden kullanırken, geçerli veritabanının uyumluluk düzey 90 olmalıdır.

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

    Kimlik numarası geçerli girişleri olan bir tablo ve görünümü, NULL, 0 ya da DEFAULT.Varsayılan 0'dur.NULL, 0 ve varsayılan karşılığı bu bağlamda değerlerdir.

    Belirtilen veritabanındaki tüm tablolar ve görünümler için döndürmesini NULL belirtin.Olmadığını belirtmek için boşobject_idAyrıca belirtmeniz gerekir için NULL,index_idvepartition_number.

  • index_id| 0 | NULL | -1 | DEFAULT
    Is the ID of the index.index_id is int.Geçerli girişleri olup olmadığını kimlik numarası, 0 dizinobject_id, null bir yığın ise -1 veya DEFAULT.Varsayılan -1'dur.NULL, -1 ve varsayılan karşılığı bu bağlamda değerlerdir.

    Bilgi için tüm dizinler bir temel tablo veya görünüme dönmek için NULL belirtin.Olmadığını belirtmek için boşindex_idAyrıca belirtmeniz gerekir için NULL,partition_number.

  • partition_number | NULL | 0 | DEFAULT
    Is the partition number in the object.partition_number is int.Geçerli girişleri olanpartion_numberbir dizin veya yığın, NULL, 0 veya varsayılan.Varsayılan 0'dur.NULL, 0 ve varsayılan karşılığı bu bağlamda değerlerdir.

    Tüm bölümler için bilgi sahibi olan nesne NULL belirtin.

    partition_number 1 tabanlıdır.Bir dizin nonpartitioned veya yığınpartition_number1 olarak ayarlayın.

  • mode| NULL | DEFAULT
    Is the name of the mode.mode specifies the scan level that is used to obtain statistics.mode is sysname.Geçerli girdileri, varsayılan, NULL, sınırlı, SAMPLED veya DETAILED olabilir.Varsayılan değer (NULL) LIMITED.

Dönen Tablo

sütun Name:

Veri türü

Açıklama

database_id

smallint

Veritabanı kimliği tablo veya Görünüm.

object_id

int

Tabloyu veya görünümü, dizinin bulunduğu nesne kimliği.

index_id

int

Dizin kimliği bir dizin.

0 = Yığın.

partition_number

int

1 tabanlı bölüm numarası sahip nesnesi; tablo, görünüm veya dizini.

1 = Nonpartitioned dizin ya da yığın.

index_type_desc

nvarchar(60)

Dizin türü açıklaması:

YIĞIN

KÜMELENMİŞ DİZİN

KÜMELENMEMİŞ DİZİN

BİRİNCİL XML DİZİNİ

KAYMA DİZİNİ

XML DİZİN

alloc_unit_type_desc

nvarchar(60)

Ayırma birimi türü açıklaması:

IN_ROW_DATA

LOB_DATA

ROW_OVERFLOW_DATA

The LOB_DATA ayırma birimi içeren türden sütunlarda depolanan verileritext,ntext,image,varchar(max),nvarchar(max),varbinary(max), andxml.Daha fazla bilgi için bkz:(Transact-SQL) veri türleri.

The ROW_OVERFLOW_DATA ayırma birimi içeren türden sütunlarda depolanan verilerivarchar(n),nvarchar(n),varbinary(n), vesql_variant, basılı devre dışı-satır.Daha fazla bilgi için bkz:Satır-8 KB Exceeding veri taşması.

index_depth

tinyint

Numarasını dizin düzeyi.

1 Yığın, LOB_DATA veya ROW_OVERFLOW_DATA = ayırma birimi.

index_level

tinyint

Geçerli düzey dizin.

0 dizin yaprak düzeyleri, kümeler, LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri.

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

Yalnızca dizin nonleaf düzeyde olduğundan, işlemmode= DETAILED.

avg_fragmentation_in_percent

float

Dizinler için mantıksal parçalanma ve IN_ROW_DATA, kümeler için kapsam parçalanma ayırma birimi.

Değer yüzdesi olarak ölçülür ve birden çok dosya dikkate alınır.Mantıksal tanımları ve kapsam parçalanması için Açıklamalar'a bakın.

ayırma birimi LOB_DATA ve ROW_OVERFLOW_DATA 0.

İçin null zaman heapsmode= SAMPLED.

fragment_count

bigint

Parça sayısı yaprak düzey IN_ROW_DATA bir ayırma birimi.Parçaları hakkında daha fazla bilgi için bkz: Notlar.

null nonleaf düzeylerde bir dizin ve LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimi.

İçin null zaman heapsmode= SAMPLED.

avg_fragment_size_in_pages

float

Bir parçası, bir IN_ROW_DATA yaprak düzeyindeki sayfalar ortalama sayısı ayırma birimi.

null nonleaf düzeylerde bir dizin ve LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimi.

İçin null zaman heapsmode= SAMPLED.

page_count

bigint

Dizin veya veri sayfaları toplam sayısı.

Bir dizin için dizin sayısı geçerli düzey sayfaları B-ağacı IN_ROW_DATA ayırma biriminde.

Bir yığın, toplam sayısı, veri sayfaları IN_ROW_DATA ayırma birimi.

LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri için toplam sayfa ayırma birimi sayısı.

avg_page_space_used_in_percent

float

Veri depolama alanı tüm sayfalarında kullanılan ortalama yüzdesidir.

İçin bir dizin için geçerli düzey ortalama geçerli B-ağacı IN_ROW_DATA ayırma, unit.

Bir yığın IN_ROW_DATA ayırma birimi tüm veri sayfalarında ortalaması.

İçin LOB_DATA veya ROW_OVERFLOW veri ayırma birimi s, tüm sayfaları ortalamasını ayırma birimi.

Ne zaman NULLmode= Sınırlı.

record_count

bigint

Toplam kayıt sayısı.

İçin geçerli düzey toplam kayıt sayısı için bir dizin, geçerli B-ağacı IN_ROW_DATA ayırma, unit.

Bir yığın IN_ROW_DATA ayırma birimi kayıtları toplam sayısı.

NoteNote:
Bir yığın, yığın karşı bir SELECT COUNT(*) çalıştırarak döndürülen satırların sayısını bu işlevinden döndürülen kayıtların sayısını eşleşmeyebilir.Birden fazla kayıt içeren bir satır olmasıdır.Örneğin, altında bazı durumlarda, iletme kayıt ve güncelleştirme işlemi sonucunda iletilen kaydı bir yığını tek satır olabilir.Ayrıca, birden çok kayıt LOB_DATA depolama çoğu büyük LOB satır bölünür.

LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri için tam ayırma birimi kayıtları toplam sayısı.

Ne zaman NULLmode= Sınırlı.

ghost_record_count

bigint

Hayalet kayıtların hayalet temizleme olarak kaldırılması için hazır görev ayırma birimi.

nonleaf IN_ROW_DATA ayırma birimi bir dizin düzeyi 0.

Ne zaman NULLmode= Sınırlı.

version_ghost_record_count

bigint

Bir ayırma birimi bekleyen anlık görüntü görüntü yalıtım işlemde tarafından tutulan hayalet kayıt sayısı.

nonleaf IN_ROW_DATA ayırma birimi bir dizin düzeyi 0.

Ne zaman NULLmode= Sınırlı.

min_record_size_in_bytes

int

En düşük kayıt boyutunu (bayt cinsinden).

İçin bir dizin için geçerli düzey en düşük kayıt boyutu geçerli B-ağacı IN_ROW_DATA ayırma, unit.

Bir yığın IN_ROW_DATA ayırma birimi boyutu en az bir kayıt.

LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri için en az kayıt boyutunu tam ayırma birimi.

Ne zaman NULLmode= Sınırlı.

max_record_size_in_bytes

int

En büyük kayıt boyutunu (bayt cinsinden).

İçin bir dizin için geçerli düzey en fazla kayıt boyutu geçerli B-ağacı IN_ROW_DATA ayırma, unit.

Bir yığın boyutu en fazla kayıt IN_ROW_DATA ayırma birimi.

LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri için en büyük kayıt boyutunu tam ayırma birimi.

Ne zaman NULLmode= Sınırlı.

avg_record_size_in_bytes

float

Ortalama kayıt boyutunu bayt cinsinden.

Ortalama kayıt boyutu için bir dizin IN_ROW_DATA ayırma birimi b ağacında geçerli düzey uygulanır.

Bir yığın ortalama kayıt IN_ROW_DATA ayırma birimi boyutu.

LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimleri için ortalama kayıt tam ayırma birimi boyutu.

Ne zaman NULLmode= Sınırlı.

forwarded_record_count

bigint

Verileri başka bir konuma İleri işaretçileri olan bir yığın kayıt sayısı.(Bu durumda bir güncelleştirme sırasında yeni satırı özgün konumda depolamak için yeterli yer olmadığında oluşur.)

null bir yığın. IN_ROW_DATA ayırma birimleri dışındaki herhangi bir ayırma birimi için

İçin null zaman heapsmode= Sınırlı.

compressed_page_count

bigint

Sıkıştırılmış sayfa sayısı.

  • Kümeler için yeni ayrılan sayfa sayfa olmayan sıkıştırılmış.Bir yığın sayfa altında iki özel koşullar sıkıştırılmış olan: veri içe toplu olduğunda ya da bir yığın, yeniden. Sıkıştırılmış sayfa sayfa ayırma neden normal DML işlemleri olacaktır.Compressed_page_count değerini istediğiniz eşik daha büyük büyüdükçe, bir yığın yeniden oluşturun.

  • kümelenmiş dizin olan tablolar için sayfa sıkıştırma etkisini compressed_page_count değerini gösterir.

Remarks

The sys.dm_db_index_physical_stats dinamik yönetim işlevi DBCC SHOWCONTIG deyim değiştirir.Bu dinamik yönetimi işlev, çapraz APPLY ve OUTER APPLY ilişkili parametreleri kabul etmez.

Tarama modu

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.Kilitleme hakkında daha fazla bilgi için bkz:Kilit modu.

LIMITED modu hızlı mod, sayfa sayısı tarar.Dizin, B-ağacı (diğer bir deyişle, yukarıdaki yaprak düzeyinde sayfa), yalnızca üst düzey sayfalar taranır.Bir yığın yalnızca ilişkili PFS ve IAM sayfaları incelenir; yığın veri sayfalarının değil taranır.InSQL Server 2005tüm sayfaları bir yığın taranan LIMITED modu.

LIMITED modu, compressed_page_count NULL olduğundanDatabase EngineYaprak olmayan sayfaların B-ağacı ve yığın. IAM ve PFS sayfaları yalnızca tararSAMPLED modu compressed_page_count için tahmini bir değer almak için ve ayrıntılı modda compressed_page_count için gerçek değerini almak içinSAMPLED modu dizin veya yığın tüm sayfaların bir yüzde 1'örneği temel alan İstatistikler verir.Ayrıntılı modu, dizin veya yığın 10.000'den daha az sayıda sayfa varsa, SAMPLED yerine kullanılır.

Ayrıntılı mod tüm sayfaları tarar ve döner tüm istatistikleri.

Daha fazla çalışmayı her modda gerçekleştirilir çünkü modları DETAILED için sınırlı giderek yavaştır.Hızla bir tablo ya da dizin boyutu veya parçalanma düzeyini ölçmek için LIMITED modunu kullanın.Bunun en hızlı ve dizin IN_ROW_DATA ayırma birimi nonleaf her düzey için bir satır döndürür.

Sistem işlevleri kullanarak parametre değerlerini belirtme

KullanabileceğinizTransact-SQLişlevleriDB_ID ve OBJECT_IDdatabase_idve object_idparametrelerini. bir değer belirtmek için Ancak, bu işlev için geçersiz değer ileterek istenmeyen sonuçlara neden olabilir.Örneğin, yok veya yanlış yazılmış olduğundan, veritabanı veya nesne adı bulunamadı, iki işlev NULL döndürür.Sys.dm_db_index_physical_stats işlev NULL tüm veritabanları veya tüm nesnelerin bir joker karakter değeri olarak yorumlar.

Ayrıca, OBJECT_ID işlev sys.dm_db_index_physical_stats işlev olarak adlandırılır ve bu nedenle geçerli veritabanı kapsamında değerlendirilen önce işlenir. veritabanı belirtilendatabase_id.OBJECT_ID işlev, bir NULL değer; bu davranışa neden olabilir veya geçerli veritabanı içeriği ve belirtilen veritabanı nesne adı varsa, bir hata iletisi döndürülebilir.Aşağıdaki örnekler, istenmeyen sonuçlar gösterilmektedir.

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

En iyi yöntemler

Her zaman, DB_ID veya OBJECT_ID kullandığınızda geçerli bir kimliği verdiğini doğrulayın.Örneğin, OBJECT_ID, kullandığınızda belirlemek gibi bir üç parçalı adıOBJECT_ID(N'AdventureWorks.Person.Address'), önce bunları sys.dm_db_index_physical_stats işlev. kullandığınız işlevleri tarafından döndürülen değeri sınamak veyaVeritabanı ve nesne kimlikleri belirlemek için güvenli bir yolu izleyen A ve B örnekler göstermektedir.

Parçalanma algılama

Parçalanma sürecinde, tablonun karşı ve bu nedenle, tablo üzerinde tanımlı dizinler yapılan veri değişiklikleri (INSERT, UPDATE ve DELETE deyimlerini) oluşur.Bu değişiklikleri genellikle aynı tablo ve dizinleri satırları arasında dağıtılır değil çünkü her sayfanın tamlık zamanla değişebilir.Parça veya tüm tablo, dizin sorguları için bu tür bir parçalanma ek sayfa okuma neden olabilir.Bu paralel veri tarama yavaşlattığını.

Parçalanma hesaplamak için kullanılan algoritma daha kesin olarakSQL Server 2008daha daSQL Server 2000.Sonuç olarak, parçalanma değerleri daha büyük görünür.ÖrneğinSQL Server 2000, sayfa 11 ve aynı sayfa 13 varsa parçalanmış bir tablo nitelendirilmez kapsam ancak 12 sayfa.Ancak, bu iki sayfaya erişmek için gerektirir iki fiziksel g/Ç işlemleri için bu parçalanma sayılanSQL Server 2008.

Parçalanma düzey bir dizin veya yığın avg_fragmentation_in_percent sütununda gösterilir.Kümeler için kapsam Parçalanma Yığın, değerini gösterir.Dizinler için dizinin mantıksal parçalanma değerini gösterir.Aksine DBCC SHOWCONTIG, her iki durumda parçalanma hesaplama algoritmalarına yayılan birden çok dosya depolama göz önünde bulundurun ve bu nedenle, doğru olduğundan.

Mantıksal parçalanması

Sıra dışı sayfa dizin yaprak sayfaları yüzdesidir.Sonraki fiziksel sayfa dizine ayrılmış olan olmayan sayfayı işaret ettiği için sonraki pag tarafından bir sayfa olan bir sıra dışı sayfae işaretçisi geçerli yaprak sayfa. biçiminde

kapsam parçalanması

Bir yığın yaprak sayfaları, sıra dışı alanları yüzdesidir.Sıra dışı bir ölçüde, geçerli sayfa için bir yığın bulunduğu sürece fiziksel sonraki sürece önceki sayfaya bulunduğu sürece sonra olmadığı biridir.

Avg_fragmentation_in_percent değeri sıfır olarak maksimum performans için mümkün olduğunca yakın olmalıdır.Ancak, yüzde 10 ile yüzde 0 değerleri kabul edilebilir olabilir.Tüm yeniden, yeniden düzenleme ya da yeniden, parçalanma, azaltma yöntemleri, bu değeri azaltmak için kullanılabilir.Bir dizindeki parçalanma düzeyini çözümleme hakkında daha fazla bilgi için bkz:Yeniden düzenleme ve dizinleri yeniden oluşturma.

Bir dizin içinde parçalanma azaltma

Dizin parçalanması sorgu performansını etkileyen bir şekilde parçalanmış, parçalanma azaltmak için üç seçenek vardır:

  • Bırakma ve yeniden oluşturma kümelenmiş dizin.

    kümelenmiş dizin yeniden verileri yeniden dağıtır ve tüm veri sayfalarında neden olur.düzey Tamlık CREATE INDEX FILLFACTOR seçeneği kullanılarak yapılandırılabilir.Bu dezavantajları yöntem dizini bırakma ve yeniden oluşturma döngüsü sırasında çevrimdışı olduğunu ve işlem atomik olduğunu.Dizin oluşturma işlemi kesintiye uğrarsa, dizini yeniden değil.Daha fazla bilgi için bkz:INDIS (Transact-SQL) CREATE.

  • Yeniden ALTER INDEX düzenleme, değişiklik için DBCC INDEXDEFRAG, dizinin mantıksal sırada yaprak düzeyinde sayfaları yeniden düzenlemek için kullanın.Bu çevrimiçi bir işlem olduğundan, dizin deyim çalışırken kullanılabilir.Ayrıca işlem zaten tamamlandı iş kaybetmeden da kesintiye.Bu yöntemde olumsuzluk, iyi olarak bir dizin yeniden oluşturma işlemi ve güncelleştirme istatistikleri verileri yeniden düzenleyerek, bir iş yapmaz, olur.

  • ALTER dizini yeniden oluşturmak, bu değişiklik için DBCC DBREINDEX çevrimiçi veya çevrimdışı dizini yeniden oluşturmak için kullanın.Daha fazla bilgi için bkz:ALTER INDIS (Transact-SQL).

Parçalanma tek başına yeniden düzenlemek veya bir dizini yeniden oluşturmak için yeterli bir neden değildir.Ana parçalanması, dizin tarama sırasında sayfa önceden okuma üretilen işi yavaşlatır sahiptir.Bu, daha yavaş yanıt süreleri sağlar.Varsa, parçalanmış bir sorgu yükünü tablo veya dizin olmayan taramalar, parçalanma kaldırma öncelikle tek arama iş yükü olduğu için herhangi bir etkisi olabilir.Daha fazla bilgi için bkz: BuMicrosoft Office 2010 Suite Web sitesi.

Not

DBCC SHRINKFILE veya DBCC SHRINKDATABASE küçültme işlemi sırasında bir dizin kısmen veya tamamen taşınır, parçalanma neden.Bu nedenle, bir küçültme işlemi yapılması gerekiyor, değil yapma parçalanma kaldırıldıktan sonra gerekir.

Bir yığın içinde parçalanma azaltma

kapsam Parçalanma Yığın, azaltmak için kümelenmiş dizin oluşturmak tablo ve sonra dizin bırakın.kümelenmiş dizin oluşturulur ancak bu verileri yeniden dağıtır.Bu da mümkün olduğu kadar iyi dikkate alındığında veritabanında kullanılabilir boş alanın dağıtımını sağlar.Kümelenmiş dizin sonra yığın yeniden bırakılır, veri değil taşınır ve en iyi konumda kalır.Bu işlemleri gerçekleştirmek hakkında bilgi için bkz:CREATE INDEX and DROP INDEX.

Büyük nesne verileri düzenleme

Varsayılan olarak, ALTER INDEX yeniden düzenleme deyim (LOB) büyük nesne verisi içeren sayfaları sıkıştırır.LOB sayfaları boş zaman ayırmanın değil çünkü bu verileri sıkıştırma disk alanı kullanımını çok LOB veri silinmiş veya LOB sütun bırakılan artırabilirsiniz.

Belirli kümelenmiş dizin yeniden düzenleme, kümelenmiş dizinde bulunan tüm LOB sütunları düzenler.Bir kümelenmemiş dizin yeniden düzenleme (dahil) olmayan bir sütun dizinde tüm LOB sütunları düzenler.İfadede ALL belirtilirse, belirtilen tabloyu veya görünümü ile ilişkilendirilmiş tüm dizinler reorganized.Ayrıca, kümelenmiş dizin, tablo ve sütunlar ile kümelenmemiş dizin ile ilişkili tüm LOB sütunları düzenlenmiş.

Disk alanı kullanma değerlendirme

Sayfa tamlık avg_page_space_used_in_percent sütun gösterir.En yüksek disk alanı sağlamak için bu değer için çok sayıda rasgele ekler içeren dizin için yüzde 100'e yakın olması gerekir.Ancak, çok sayıda rasgele ekler ve çok tam sayfa bir dizin sayfa bölmeleri artan sayıda olacaktır.Bu, daha fazla parçalanma neden olur.Bu nedenle, sayfa bölmeleri azaltmak için değeri yüzde 100'den az olmalıdır.FILLFACTOR taşıyan bir dizin yeniden oluşturma, sorgu desen indeks uyacak şekilde değiştirilecek sayfa tamlık belirtilen seçenek sağlar.doldurma faktörü hakkında daha fazla bilgi için bkz:Faktörü girin..Ayrıca, ALTER INDEX yeniden düzenleme dizin sayfaları son belirtilen FILLFACTOR doldurmak deneyerek sıkıştırır.Bu avg_space_used_in_percent değerini artırır.ALTER INDEX yeniden düzenleme sayfa tamlık azaltmak yapamazsınız, unutmayın.Bunun yerine, bir dizin yeniden yapılması gerekiyor.

Dizin parça değerlendirme

Bir bölümü fiziksel olarak ardışık yaprak sayfalar aynı dosya için bir ayırma birimi oluşur.Bir dizin en az bir parça vardır.Dizinin yaprak düzeyindeki sayfalar sayısına eşit bir dizin olabilir en fazla parça var.Daha büyük bir parça daha az disk g/Ç aynı sayfa sayısını okumak için gerekli anlamına gelir.Bu nedenle, avg_fragment_size_in_pages değeri ne kadar büyükse, aralık tarama performansı daha iyi.Avg_fragment_size_in_pages ve avg_fragmentation_in_percent birbirine inversely orantılı değerlerdir.Bu nedenle, yeniden dizin yeniden düzenleme parçalanma miktarını azaltmak veya parça boyutunu artırın.

İzinler

Aşağıdaki izinleri gerektirir:

  • Veritabanındaki belirtilen nesne üzerinde CONTROL izni.

  • VIEW DATABASE durum izni @ nesne joker karakter kullanarak belirtilen veritabanı içindeki tüm nesneler hakkında bilgi döndürürobject_id= null.

  • VIEW SERVER durum izni, @ veritabanı joker karakter kullanarak tüm veritabanları hakkında bilgi döndürürdatabase_id= null.

VIEW DATABASE durum verme reddedildi belirli nesneler üzerinde denetim izinlerden bağımsız olarak döndürülmesini istediğiniz veritabanını tüm nesneleri sağlar.

Belirli nesneler üzerinde istediğiniz denetim izinler ne olursa olsun döndürülmesi için veritabanındaki tüm nesneler DATABASE durum VIEW engelleme izin vermez.De, ne zaman veritabanı joker @database\_id= NULL belirtilmişse, veritabanı atlanmıştır.

Daha fazla bilgi için bkz:Dinamik bir yönetim görünümleri'ni ve işlevler (Transact-SQL).

Örnekler

C.Belirtilen tablo hakkında bilgi döndüren

Boyutu ve parçalanma istatistikleri tüm dizinler ve bölümleri için aşağıdaki örnek verirPerson.Address, tabloAdventureWorksveritabanı.Tarama modunu ayarlayın'LIMITED'en iyi performans ve döndürülen istatistikleri sınırlamak için.Bu sorguyu yürütmek gerekir, en azından Denetim izniPerson.AddressTablo.

B.Bir yığın bilgi döndürme

Aşağıdaki örnek, tüm öbek istatistiklerini verirdbo.DatabaseLog,AdventureWorksveritabanı.Tablo LOB veriler içerdiğinden, satır LOB_DATA ayırma birimi, veri sayfalarını, yığın depolama IN_ROW_ALLOCATION_UNIT için döndürülen satır ek olarak döndürülür.Bu sorguyu yürütmek gerekir, en azından Denetim iznidbo.DatabaseLogTablo.

C.Tüm veritabanları için eski bilgileri

Aşağıdaki örnek, tüm tablo ve dizin örneği içindeki tüm istatistiklerini verirSQL Serverjoker karakter belirterekNULLtüm parametreler.Bu sorgu yürütme VIEW SERVER durum izni gerektirir.

D.Sys.dm_db_index_physical_stats yeniden oluşturun veya dizinleri yeniden düzenlemek için bir komut dosyası kullanma

Aşağıdaki örnek, otomatik olarak reorganizes veya bir ortalama parçalanma yüzde 10 üzerinde bulunan tüm bölümler bir veritabanında yeniden oluşturur.Bu sorgu yürütme VIEW DATABASE durum izni gerektirir.Bu örnek, bir veritabanı adı belirtmeden ilk parametre olarak DB_ID belirtir.80 Veya daha düşük bir uyumluluk düzey geçerli veritabanında varsa, hata oluşturulur.Hatayı gidermek için DB_ID() geçerli bir veritabanı adı ile değiştirin.Veritabanı uyumluluk düzeyleri, daha fazla bilgi için bkz:sp_dbcmptlevel (Transact-SQL).

Değişiklik Geçmişi

Güncelleştirilmiş içerik

SINIRLI SAMPLED ve DETAILED modları compressed_page_count değerinin nasıl etkilediği açıklanmaktadır.