Megosztás a következőn keresztül:


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Az aktuális sorcsoportszintű információkat nyújt az aktuális adatbázis összes oszlopcentrikus indexéről.

Ez a DMV kibővíti a katalógusnézetet sys.column_store_row_groups.

Oszlop név Adattípus Description
object_id int A mögöttes tábla azonosítója.
index_id int Az oszlopcentrikus index azonosítója a táblában object_id .
partition_number int Az azt tartalmazó row_group_idtáblapartíció azonosítója. A partition_number használatával csatlakozhat ehhez a DMV-hez sys.partitions
row_group_id int A sorcsoport azonosítója. Particionált táblák esetén az érték a partíción belül egyedi.

-1 memóriabeli farok számára.
delta_store_hobt_id bigint A deltatároló sorcsoportjának hobt_id.

NULL ha a sorcsoport nincs a deltatárolóban.

NULL memóriabeli táblázat farkához.
state tinyint Társított state_descriptionazonosítószám.

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

COMPRESSED az egyetlen állapot, amely a memóriában lévő táblákra vonatkozik.
state_desc nvarchar(60) A sorcsoport állapotának leírása:

0 - INVISIBLE - Folyamatban lévő sorcsoport. Például:

Az oszloptár INVISIBLE sorcsoportja az adatok tömörítése közben van. Amikor a tömörítés befejeződik, a metaadat-kapcsoló az oszloptár sorcsoportjának állapotát a helyről INVISIBLE a másikra COMPRESSEDmódosítja, a deltastore sorcsoport állapotát pedig a helyről CLOSED a másikra TOMBSTONE.

1 - OPEN - Új sorokat elfogadó deltastore sorcsoport. A megnyitott sorcsoportok továbbra is sortár formátumúak, és nem lettek oszlopcentrikus formátumba tömörítve.

2 - CLOSED - A delta áruházban található sorcsoport, amely a sorok maximális számát tartalmazza, és arra vár, hogy a rekordátállítási folyamat tömörítse azt az oszloptárba.

3 - COMPRESSED - Oszlopcentrikus tömörítéssel tömörített és az oszloptárban tárolt sorcsoport.

4 - TOMBSTONE - Olyan sorcsoport, amely korábban a deltastore-ban volt, és már nincs használatban.
total_rows bigint A sorcsoportban fizikailag tárolt sorok száma. Tömörített sorcsoportok esetén. Tartalmazza a töröltként megjelölt sorokat.
deleted_rows bigint A törlésre megjelölt tömörített sorcsoportban fizikailag tárolt sorok száma.

0 a deltatárolóban lévő sorcsoportok esetében.

Nemclustered columnstore indexek esetén ez az érték nem tartalmazza a törlési pufferben tárolt törölt sorokat. További információ, valamint a törölt sorok számának megkeresése a törlési pufferben: sys.internal_partitions.
size_in_bytes bigint A sorcsoport összes lapjának együttes mérete bájtban. Ez a méret nem tartalmazza a metaadatok vagy megosztott szótárak tárolásához szükséges méretet.
trim_reason tinyint Ennek oka, hogy a COMPRESSED sorcsoport a sorok maximális számánál kevesebbet tartalmazott.

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) A .trim_reason

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Az SQL Server korábbi verziójáról való frissítéskor történt.

1 - NO_TRIM: A sorcsoport nem lett levágva. A sorcsoport tömörítése legfeljebb 1 048 576 sorból állt. A sorok száma kisebb lehet, ha a sorok egy részhalmazát törölték a delta sorcsoport bezárása után

2 - BULKLOAD: A tömeges terhelésű köteg mérete korlátozta a sorok számát.

3 - REORG: Kényszerített tömörítés a REORG parancs részeként.

4 - DICTIONARY_SIZE: A szótár mérete túl nagy lett ahhoz, hogy az összes sort összenyomja.

5 - MEMORY_LIMITATION: Nincs elegendő memória az összes sor összenyomásához.

6 - RESIDUAL_ROW_GROUP: Az utolsó sorcsoport részeként bezárva, 1 millió sortal < az index összeállítása során.

Megjegyzés: A több magból álló partíciók több ilyen típusú vágást is eredményezhetnek.

7 - STATS_MISMATCH: Csak a memóriában lévő tábla oszlopcentrikus oszlopaihoz. Ha a statisztikák helytelenül jelezték >= 1 millió minősített sort a farokban, de kevesebbet találtunk, a tömörített sorcsoport 1 millió sorból <

8 - SPILLOVER: Csak a memóriában lévő tábla oszlopcentrikus oszlopaihoz. Ha a tail 1 millió minősített sorból áll > , a rendszer az utolsó köteg fennmaradó sorait tömöríti, ha a darabszám 100 000 és 1 millió között van

9 - AUTO_MERGE: A háttérben futó Tuple Mover egyesítési művelet egy vagy több sorcsoportot összevont ebbe a sorcsoportba.
transition_to_compressed_state tinyint Azt mutatja be, hogy ez a sorcsoport hogyan lett áthelyezve a deltastore-ból egy tömörített állapotba az oszloptárban.

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 - a művelet nem vonatkozik a deltastore-ra. Vagy a sorcsoport tömörítése az SQL Server 2016-ra (13.x) való frissítés előtt történt, ebben az esetben az előzmények nem maradnak meg.

2 - INDEX_BUILD – Egy index létrehozása vagy újraépítése tömörítette a sorcsoportot.

3 - TUPLE_MOVER - A háttérben futó mozgató mozgató tömörítette a sorcsoportot. A rekord mozgatása azután történik, hogy a sorcsoport állapota OPEN a következőre CLOSEDváltozik: .

4 - REORG_NORMAL - Az átszervezési művelet ALTER INDEX ... REORGáthelyezte a CLOSED sorcsoportot a deltastore-ból az oszloptárba. Ez azelőtt történt, hogy a mozgatónak volt ideje áthelyezni a sorcsoportot.

5 - REORG_FORCED - Ez a sorcsoport nyitva volt a deltastore-ban, és az oszloptárba kényszerítették, mielőtt teljes számú sora lett volna.

6 - BULKLOAD - Egy tömeges terhelésű művelet közvetlenül tömörítette a sorcsoportot a deltastore használata nélkül.

7 - MERGE – Egy egyesítési művelet egy vagy több sorcsoportot konszolidált ebbe a sorcsoportba, majd végrehajtotta az oszlopcentrikus tömörítést.
has_vertipaq_optimization bit A VertiPaq optimalizálása javítja az oszlopcentrikus tömörítést a sorcsoport sorainak sorrendjének átrendezésével a nagyobb tömörítés érdekében. Ez az optimalizálás a legtöbb esetben automatikusan megtörténik. A VertiPaq-optimalizálás két esetben nem használható:

a. amikor egy delta sorcsoport az oszloptárba kerül, és az oszlopcentrikus indexen egy vagy több nemclustered index található – ebben az esetben a VertiPaq optimalizálása kihagyva a leképezési index módosításainak minimalizálása érdekében;

b. a memóriaoptimalizált táblák oszlopcentrikus indexeihez.

0 = Nem
1 = Igen
generation bigint Ezzel a sorcsoporttal társított sorcsoport létrehozása.
created_time datetime2 A sorcsoport létrehozásának óraideje.

NULL - egy memóriabeli táblában lévő oszlopcentrikus indexhez.
closed_time datetime2 A sorcsoport bezárásának óraideje.

NULL - egy memóriabeli táblában lévő oszlopcentrikus indexhez.

Results

Az aktuális adatbázis minden egyes sorcsoportjának egy sorát adja vissza.

Permissions

CONTROL engedélyt igényel a táblában, és VIEW DATABASE STATE engedélyt az adatbázisban.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

Az adatbázishoz VIEW DATABASE PERFORMANCE STATE engedély szükséges.

Examples

A. Töredezettség kiszámítása annak eldöntéséhez, hogy mikor kell újrarendezni vagy újraépíteni egy oszlopcentrikus indexet

Oszlopcentrikus indexek esetén a törölt sorok százalékos aránya jó mérték a sorcsoport töredezettségének. Ha a töredezettség 20% vagy több, távolítsa el a törölt sorokat. További példákért lásd: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkentése érdekében.

Ez a példa más rendszertáblákkal csatlakozik sys.dm_db_column_store_row_group_physical_stats , majd kiszámítja az Fragmentation oszlopot az aktuális adatbázis egyes sorcsoportjainak hatékonyságának becsléseként. Ha egyetlen tábláról szeretne információt keresni, távolítsa el a megjegyzésjeleket a WHERE záradék előtt, és adjon meg egy táblanevet.

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;