Aracılığıyla paylaş


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Geçerli veritabanındaki tüm columnstore dizinleri hakkında geçerli satır grubu düzeyinde bilgi sağlar.

Bu DMV, katalog görünümünü sys.column_store_row_groups genişletir.

Sütun adı Veri türü Description
object_id int Temel alınan tablonun kimliği.
index_id int Tablodaki object_id bu columnstore dizininin kimliği.
partition_number int öğesini barındıran row_group_idtablo bölümünün kimliği. partition_number kullanarak bu DMV'yi sys.partitions
row_group_id int Bu satır grubunun kimliği. Bölümlenmiş tablolar için değer bölümün içinde benzersizdir.

-1 bir bellek içi kuyruk için.
delta_store_hobt_id bigint Delta deposundaki bir satır grubunun hobt_id.

NULL satır grubu delta deposunda değilse.

NULL bellek içi tablonun kuyruğu için.
state tinyint İlişkili state_descriptionkimlik numarası.

0 = INVISIBLE
1= OPEN
2 = CLOSED
3 = COMPRESSED
4 = TOMBSTONE

COMPRESSED , bellek içi tablolar için geçerli olan tek durumdur.
state_desc nvarchar(60) Satır grubu durumunun açıklaması:

0 - INVISIBLE - Oluşturulan bir satır grubu. Örneğin:

Veriler sıkıştırılırken columnstore INVISIBLE içindeki bir satır grubudur. Sıkıştırma tamamlandığında, meta veri anahtarı columnstore satır grubunun durumunu olarak INVISIBLECOMPRESSED, deltastore satır grubunun durumunu olarak CLOSEDTOMBSTONEdeğiştirir.

1 - OPEN - Yeni satırları kabul eden bir deltastore satır grubu. Açık satır grubu hala satır deposu biçimindedir ve columnstore biçiminde sıkıştırılmamıştır.

2 - CLOSED - Delta deposundaki en fazla satır sayısını içeren ve tanımlama grubu taşıma işleminin sütun deposuna sıkıştırmasını bekleyen bir satır grubu.

3 - COMPRESSED - Columnstore sıkıştırması ile sıkıştırılmış ve columnstore'da depolanan bir satır grubu.

4 - TOMBSTONE - Daha önce deltastore'da olan ve artık kullanılmayan bir satır grubu.
total_rows bigint Satır grubunda fiziksel olarak depolanan satır sayısı. Sıkıştırılmış satır grupları için. Silinmiş olarak işaretlenen satırları içerir.
deleted_rows bigint Sıkıştırılmış bir satır grubunda fiziksel olarak depolanan ve silinmek üzere işaretlenmiş satır sayısı.

0 delta deposundaki satır grupları için.

Kümelenmemiş columnstore dizinleri için bu değer, silme arabelleğinde depolanan silinmiş satırları içermez. Daha fazla bilgi edinmek ve silme arabelleğindeki silinen satır sayısını bulmak için bkz. sys.internal_partitions.
size_in_bytes bigint Bu satır grubundaki tüm sayfaların bayt cinsinden birleşik boyutu. Bu boyut, meta verileri veya paylaşılan sözlükleri depolamak için gereken boyutu içermez.
trim_reason tinyint Satır grubunun en fazla satır sayısından COMPRESSED az olması için tetiklenen neden.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION
1 - NO_TRIM
2 - BULKLOAD
3 - REORG
4 - DICTIONARY_SIZE
5 - MEMORY_LIMITATION
6 - RESIDUAL_ROW_GROUP
7 - STATS_MISMATCH
8 - SPILLOVER
9 - AUTO_MERGE
trim_reason_desc nvarchar(60) öğesinin açıklaması trim_reason.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: SQL Server'ın önceki sürümünden yükseltirken oluştu.

1 - NO_TRIM: Satır grubu kırpılamadı. Satır grubu en fazla 1.048.576 satırla sıkıştırıldı. Delta rowgroup kapatıldıktan sonra bir satır alt kümesi silinirse satır sayısı daha az olabilir

2 - BULKLOAD: Toplu yükleme toplu iş boyutu satır sayısını sınırlamıştı.

3 - REORG: Komutun bir parçası olarak zorlamalı REORG sıkıştırma.

4 - DICTIONARY_SIZE: Sözlük boyutu, tüm satırları birlikte sıkıştıramayacak kadar büyüdü.

5 - MEMORY_LIMITATION: Tüm satırları birlikte sıkıştırmak için yeterli bellek yok.

6 - RESIDUAL_ROW_GROUP: Dizin derleme işlemi sırasında 1 milyon satır içeren son satır < grubunun bir parçası olarak kapatıldı.

Not: Birden çok çekirdeğe sahip bir bölüm derlemesi, bu türdeki birden fazla kırpmaya neden olabilir.

7 - STATS_MISMATCH: Yalnızca bellek içi tablodaki columnstore için. İstatistikler yanlış >= kuyrukta 1 milyon nitelikli satır gösteriyorsa ancak daha az bulursak, sıkıştırılmış satır grubunda < 1 milyon satır olur

8 - SPILLOVER: Yalnızca bellek içi tablodaki columnstore için. Kuyrukta > 1 milyon nitelikli satır varsa, sayı 100.000 ile 1 milyon arasındaysa kalan son toplu iş satırı sıkıştırılır

9 - AUTO_MERGE: Arka planda çalışan bir Tanımlama Grubu Taşıma birleştirme işlemi, bir veya daha fazla satır grubunu bu satır grubunda birleştirdi.
transition_to_compressed_state tinyint Bu satır grubunun deltastore'dan columnstore'daki sıkıştırılmış duruma nasıl taşındığını gösterir.

1 - NOT_APPLICABLE
2 - INDEX_BUILD
3 - TUPLE_MOVER
4 - REORG_NORMAL
5 - REORG_FORCED
6 - BULKLOAD
7 - MERGE
transition_to_compressed_state_desc nvarchar(60) 1 - NOT_APPLICABLE - işlem deltastore için geçerli değildir. Öte yandan, satır grubu SQL Server 2016'ya (13.x) yükseltmeden önce sıkıştırılmıştır ve bu durumda geçmiş korunmaz.

2 - INDEX_BUILD - Dizin oluşturma veya dizin yeniden derlemesi satır grubunu sıkıştırdı.

3 - TUPLE_MOVER - Arka planda çalışan tanımlama grubu taşıyıcısı satır grubunu sıkıştırdı. Satır grubu durumu olarak OPENCLOSEDdeğiştirildikten sonra tanımlama grubu taşıyıcısı gerçekleşir.

4 - REORG_NORMAL - Yeniden düzenleme işlemi, ALTER INDEX ... REORGsatır grubunu deltastore'dan columnstore'a taşıdı CLOSED . Bu, tanımlama grubu taşıyıcısının satır grubunu taşımak için zamanı olmadan önce oluştu.

5 - REORG_FORCED - Bu satır grubu deltastore'da açıktı ve tam sayıda satıra sahip olmadan önce columnstore'a zorlandı.

6 - BULKLOAD - Toplu yükleme işlemi, deltastore kullanmadan doğrudan satır grubunu sıkıştırdı.

7 - MERGE - Birleştirme işlemi bir veya daha fazla satır grubunu bu satır grubunda birleştirdi ve sonra columnstore sıkıştırmasını gerçekleştirdi.
has_vertipaq_optimization bit VertiPaq iyileştirmesi, daha yüksek sıkıştırma elde etmek için satır grubundaki satırların sırasını yeniden düzenleyerek columnstore sıkıştırmasını geliştirir. Bu iyileştirme çoğu durumda otomatik olarak gerçekleşir. VertiPaq iyileştirmenin kullanılmadığı iki durum vardır:

a. bir delta satır grubu columnstore'ya geçtiğinde ve columnstore dizininde bir veya daha fazla toplanmamış dizin olduğunda - bu örnekte, eşleme dizinindeki değişiklikleri en aza indirmek için VertiPaq iyileştirmesi atlanır;

b. bellek için iyileştirilmiş tablolarda columnstore dizinleri için.

0 = Hayır
1 = Evet
generation bigint Bu satır grubuyla ilişkili satır grubu oluşturma.
created_time datetime2 Bu satır grubunun oluşturulduğu saat.

NULL - bellek içi bir tablodaki columnstore dizini için.
closed_time datetime2 Bu satır grubunun kapatıldığı saat.

NULL - bellek içi bir tablodaki columnstore dizini için.

Results

Geçerli veritabanındaki her satır grubu için bir satır döndürür.

Permissions

Tabloda CONTROL izni ve veritabanında VIEW DATABASE STATE izni gerektirir.

SQL Server 2022 ve üzeri için izinler

Veritabanı üzerinde VIEW DATABASE PERFORMANCE STATE izni gereklidir.

Examples

A. Columnstore dizininin ne zaman yeniden düzenlenip yeniden derlenmesi gerektiğine karar vermek için parçalanmayı hesaplama

Columnstore dizinleri için, silinen satırların yüzdesi bir satır grubundaki parçalanma için iyi bir ölçüdür. Parçalanma 20% veya daha fazla olduğunda, silinen satırları kaldırın. Daha fazla örnek için bkz. Sorgu performansını geliştirmek ve kaynak tüketimini azaltmak için dizin bakımını iyileştirme.

Bu örnek, diğer sistem tablolarıyla birleştirilir sys.dm_db_column_store_row_group_physical_stats ve sonra sütunu geçerli veritabanındaki Fragmentation her satır grubunun verimliliğine ilişkin bir tahmin olarak hesaplar. Tek bir tablodaki bilgileri bulmak için yan tümcesinin WHERE önündeki açıklama kısa çizgilerini kaldırın ve bir tablo adı sağlayın.

SELECT i.object_id,
       object_name(i.object_id) AS TableName,
       i.name AS IndexName,
       i.index_id,
       i.type_desc,
       CSRowGroups.*,
       100 * (ISNULL(deleted_rows, 0)) / NULLIF (total_rows, 0) AS 'Fragmentation'
FROM sys.indexes AS i
     INNER JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups
         ON i.object_id = CSRowGroups.object_id
        AND i.index_id = CSRowGroups.index_id
-- WHERE object_name(i.object_id) = 'table_name'
ORDER BY object_name(i.object_id), i.name, row_group_id;