5

Bazı tablolar içeren bir SQL 2008 R2 veritabanı var, bu tablolardan bazılarında Tam Metin Dizini tanımlandı. Büyümesini kontrol etmek ve tahmin etmek için belirli bir tablonun indeksinin boyutunu nasıl belirleyeceğimi bilmek isterim.SQL Server 2008 R2'de Tam Metin Dizininin boyutu nasıl belirlenir?

Bunu yapmanın bir yolu var mı?

+0

Belki bu yararlı olabilir çünkü mevcut olması gerektiğini söylüyor: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize özellik) –

+0

* IndexSize * aslında FTS Kataloğu'nun boyutunu döndürür ve bir katalogun birden fazla dizini olabilir. Her indeksin büyüklüğünü tek tek istiyorum. – Poli

cevap

9

Katalog görünümü sys.fulltext_index_fragments, kataloğa bakılmaksızın her parçanın boyutunu takip eder, böylece SUM ürününü bu şekilde alabilirsiniz. Bu, tablo başına bir tam metin indeksinin kısıtlanmasının davanın devam edeceğini varsayar. Aşağıdaki sorgu, kataloğa bakılmaksızın, veritabanındaki her tam metin dizininin boyutunu alacaktır, ancak yalnızca belirli bir tabloyu önemsiyorsanız WHERE maddesini kullanabilirsiniz.

SELECT 
    [table] = OBJECT_SCHEMA_NAME(table_id) + '.' + OBJECT_NAME(table_id), 
    size_in_KB = CONVERT(DECIMAL(12,2), SUM(data_size/1024.0)) 
FROM sys.fulltext_index_fragments 
-- WHERE table_id = OBJECT_ID('dbo.specific_table_name') 
GROUP BY table_id; 

Ayrıca, parça sayısının yüksek olması durumunda yeniden düzenlemeyi düşünebilirsiniz. Belirli bir Katalog Kullanım ssms sonra ise

+0

Teşekkürler! Bir süredir bu proje üzerinde çalışmadığım için bunu kontrol etmek için biraz zamana ihtiyacım var ... – Poli

+0

@Poli evet, sorduğumdan yaklaşık iki yıl sonra bu soruyu neye getirdiğime emin değilim. –

+0

Bu, tam metin parçalarının um-sıkıştırılmış boyutu gibi görünüyor. Sys.internal_table'a bakarak, sıkıştırılmış parçaların boyutunu ve tam metin altyapısının geri kalanı için gereken alanı alabilirsiniz. Örnek sorgu için cevabımı görün. – TheConstructor

1

- Clik [Veritabanı] üzerine ve nesneleri genişletmek - [Depolama] tıklayın - Sağ üstteki menüden {Özgül Katalog} - propertie seçin ve tıklayın. Genel TAB İÇİNDE .. Sen Katalog Boyutu bulacaksınız = 'nn'

1

ben (aynı zamanda XML endeksler boyutunu hesaplar, ... varsa) buna benzer bir şey

SELECT S.name, 
     SO.name, 
     SIT.internal_type_desc, 
     rows = CASE WHEN GROUPING(SIT.internal_type_desc) = 0 THEN SUM(SP.rows) 
       END, 
     TotalSpaceGB = SUM(SAU.total_pages) * 8/1048576.0, 
     UsedSpaceGB = SUM(SAU.used_pages) * 8/1048576.0, 
     UnusedSpaceGB = SUM(SAU.total_pages - SAU.used_pages) * 8/1048576.0, 
     TotalSpaceKB = SUM(SAU.total_pages) * 8, 
     UsedSpaceKB = SUM(SAU.used_pages) * 8, 
     UnusedSpaceKB = SUM(SAU.total_pages - SAU.used_pages) * 8 
FROM sys.objects SO 
INNER JOIN sys.schemas S ON S.schema_id = SO.schema_id 
INNER JOIN sys.internal_tables SIT ON SIT.parent_object_id = SO.object_id 
INNER JOIN sys.partitions SP ON SP.object_id = SIT.object_id 
INNER JOIN sys.allocation_units SAU ON (SAU.type IN (1, 3) 
             AND SAU.container_id = SP.hobt_id) 
             OR (SAU.type = 2 
              AND SAU.container_id = SP.partition_id) 
WHERE S.name = 'schema' 
     --AND SO.name IN ('TableName') 
GROUP BY GROUPING SETS(
         (S.name, 
         SO.name, 
         SIT.internal_type_desc), 
         (S.name, SO.name), (S.name),()) 
ORDER BY S.name, 
     SO.name, 
     SIT.internal_type_desc; 
kullanmak

Bu genellikle sys.fulltext_index_fragments'dan daha yüksek sayılara sahip olur, ancak tablonun sys.partitions ile birleştirildiğinde, EXEC sys.sp_spaceused @objname = N'schema.TableName';'dan döndürülen numaralara kadar ekler.

SQL Server 2016 ile test edilmiştir ancak dokümantasyon 2008.