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


sp_estimate_data_compression_savings (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Visszaadja a kért objektum aktuális méretét, és becslési az objektum méretét a kívánt tömörítési állapothoz. A tömörítés egész táblákra vagy táblázatrészekre is értékelhető. Ez magában foglalja a halmokat, klaszterelt indexeket, nem klaszterezett indexeket, columnstore indexeket, indexelt nézeteket, valamint táblázat- és indexpartíciókat. Az objektumok tömöríthetők sor, oldal, oszloptároló vagy columnstore archív tömörítéssel. Ha a tábla, az index vagy partíció már tömörített, ezzel az eljárással becslést kaphatsz a tábla, index vagy partíció méretének becslésére, ha újratömörített vagy tárolva van tömörítés nélkül.

A sys.sp_estimate_data_compression_savings rendszer tárolt eljárás elérhető Azure SQL Database-ben és Azure SQL Managed Instance-ben.

Az SQL Server 2022-től (16.x) kezdve az XML adattípusok segítségével tömörítheted soron kívüli XML adatokat oszlopokba, csökkentve a tároló- és memóriaigényt. További információ: CREATE TABLE és CREATE INDEX. sp_estimate_data_compression_savings támogatja az XML tömörítési becsléseket.

Megjegyzés:

Tömörítés, sp_estimate_data_compression_savings és nem minden SQL Server kiadásban elérhető. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben találja.

Az objektum méretének becsléséhez, ha a kívánt tömörítési beállítást használná, ez a tárolt eljárás mintavételezi a forrásobjektumot, és betölti az adatokat egy ekvival-egyenértékű táblába és indexbe, amelyet a -ben tempdblétrehoznak. A beállított tempdb táblát vagy indexet ezután a kívánt beállításra tömörítik, és kiszámítják a becsült tömörítési megtakarítást.

Egy tábla, index vagy partíció tömörítési állapotának megváltoztatásához használjuk az ALTER TABLE vagy ALTER INDEX állításokat. Általános információért a tömörítésről lásd: Data compression.

Megjegyzés:

Ha a meglévő adatok töredezettek, akkor lehet, hogy tömörítés nélkül is csökkentheted a méretét az index újraépítésével. Az indexeknél a kitöltő tényezőt az index újraépítése során alkalmazzák. Ez növelheti az index méretét.

Transact-SQL szintaxis konvenciók

Szemantika

sp_estimate_data_compression_savings
    [ @schema_name = ] N'schema_name'
    , [ @object_name = ] N'object_name'
    , [ @index_id = ] index_id
    , [ @partition_number = ] partition_number
    , [ @data_compression = ] N'data_compression'
    [ , [ @xml_compression = ] xml_compression ]
[ ; ]

Arguments

[ @schema_name = ] N'schema_name'

Az adatbázis sémájának neve, amely tartalmazza a táblát vagy az indexelt nézetet. @schema_namea sysname, alapértelmezett snélkül. Ha @schema_name , NULLakkor a jelenlegi felhasználó alapértelmezett sémáját használják.

[ @object_name = ] N'object_name'

Az index vagy az index által használt tábla neve. @object_namea sysname, alapértelmezett nélkül.

[ @index_id = ] index_id

Az index azonosítója. @index_idint, és az alábbi értékek egyike lehet:

  • az index azonosító száma
  • NULL
  • 0 ha object_id egy halom

Az alap tábla vagy nézet összes indexének visszaküldéséhez megadjuk NULL. Ha megadod NULL, akkor NULL is meg kell jelölni.

[ @partition_number = ] partition_number

Az objektum partíció száma. @partition_numberint, és az alábbi értékek egyike lehet:

  • egy index vagy halom partíciós száma
  • NULL
  • 1 nem partíciós index vagy halom esetén

A partíció megadásához megadhatod a $PARTITION függvényt is. Az összes tulajdonos objektum partíciójának információjának visszaküldéséhez megadjuk NULL.

[ @data_compression = ] N'data_compression'

Megadja az értékelésre szánt tömörítés típusát. @data_compressionnvarchar(60), és lehet az alábbi értékek egyike:

  • NONE
  • ROW
  • PAGE
  • COLUMNSTORE
  • COLUMNSTORE_ARCHIVE

Az SQL Server 2022 (16.x) és későbbi verziók NULL esetében szintén lehetséges érték. @data_compression nem lehet, NULL ha @xml_compression az.NULL

[ @xml_compression = ] xml_compression

A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány

Megadja, hogy kiszámítsák-e a megtakarítást XML tömörítéshez. @xml_compressionbit, és az alábbi értékek egyike lehet:

  • NULL (alapértelmezett)
  • 0
  • 1

@xml_compression nem lehet, NULL ha @data_compression az.NULL

Kódértékek visszaadása

0 (sikeres) vagy 1 (hiba).

Eredményhalmaz

A következő eredményhalmazt visszaadjuk, hogy megadjuk a táblázat, index vagy partíció aktuális és becsült méretét.

Oszlop név Adattípus Description
object_name sysname A táblázat vagy az indexelt nézet neve.
schema_name sysname A táblázat vagy indexelt nézet sémája.
index_id int Egy index indexazonosítója:

0 = Halom
1 = Klaszterelt index
>1 = Nem klaszterezett index
partition_number int Partíció száma. Visszacsatolások 1 egy nem partíciós tábla vagy index esetén.
size_with_current_compression_setting (KB) bigint A kért táblázat, index vagy partíció jelenlegi mérete.
size_with_requested_compression_setting (KB) bigint A tábla, index vagy partíció becsült mérete, amely a kért tömörítési beállítást használja; és ha alkalmazható, a meglévő kitöltési tényezőt, feltéve, hogy nincs töredezettség.
sample_size_with_current_compression_setting (KB) bigint A minta mérete a jelenlegi tömörítési beállítással. Ez a méret magában foglalja a töredezettséget.
sample_size_with_requested_compression_setting (KB) bigint A kért tömörítési beállítás használatával létrehozott minta mérete; és ha alkalmazható, a meglévő kitöltési tényező, és a töredezettség hiánya.

Megjegyzések

Használd sp_estimate_data_compression_savings a megtakarítás becslésére, amely akkor keletkezhet, ha bekapcsolod egy táblát vagy partíciót sor, oldal, oszloptároló, columnstore archívum vagy XML tömörítés esetén. Például, ha a sor átlagos mérete 40 százalékkal csökkenthető, akkor akár 40 százalékkal is csökkenthetjük az objektum méretét. Lehet, hogy nem kapsz helymegtakarítást, mert ez a kitöltési tényezőtől és a sor méretétől függ. Például, ha van egy sor 8000 bájt hosszú, és 40 százalékkal csökkented a méretét, akkor is csak egy sor fér be egy adatlapra. Nincs megtakarítás.

Ha a tömörítetlen táblán vagy indexen végzett futtatás sp_estimate_data_compression_savings eredményei azt jelzik, hogy a méret növekedni fog, az azt jelenti, hogy sok sor szinte az adattípusok teljes pontosságát használja fel, és a tömörített formátumhoz szükséges kis többletterhelés megnöveli, mint a tömörítésből származó megtakarítás. Ebben a ritka esetben ne engedélyezd a tömörítést.

Ha egy tábla már engedélyezett a tömörítésre, sp_estimate_data_compression_savings akkor becslést tudsz becslni a sor átlagos méretére, ha a tábla tömörítetlen.

Ezen a művelet során egy szándékos megosztott (IS) zárat szereznek az asztalon. Ha nem lehet IS zárolást szerezni, az eljárás blokkolódik. A táblázatot az alapértelmezett olvasási elkötelezettségi izolációs szint alatt vizsgálják.

Ha a kért tömörítési beállítás megegyezik a jelenlegi tömörítési beállítással, a tárolt eljárás visszaadja a becsült méretet adatfragmentáció nélkül, a forrásobjektum indexeinek meglévő töltőtényezőjét használva.

Ha az index vagy partíció azonosítója nem létezik, nem kapnak eredményt.

Permissions

Engedélyt igényel SELECT a táblán VIEW DATABASE STATE , valamint VIEW DEFINITION a táblát tartalmazó adatbázison és a tempdb.

Korlátozások

Az SQL Server 2017 (14.x) és korábbi verziókban ez az eljárás nem volt érvényes columnstore indexekre, ezért nem fogadta el az adattömörítési paramétereket COLUMNSTORE és COLUMNSTORE_ARCHIVE. Az SQL Server 2019 (15.x) és későbbi verzióiban, valamint az Azure SQL Database és Azure SQL Managed Instance-ban az oszloptároló indexek használhatók mind forrásobjektumként becsléshez, mind kért tömörítési típusként.

Ha Memory-Optimized TempDB metaadat engedélyezett, az ideiglenes táblákon oszloptároló indexek létrehozása nem támogatott. Ennek a korlátozásnak sp_estimate_data_compression_savings köszönhetően nem támogatott a COLUMNSTORE TempDB COLUMNSTORE_ARCHIVE Metadata Memory-Optimized adattömörítési paraméterekkel.

A columnstore-indexek megfontolásai

Az SQL Server 2019 (15.x) verziótól kezdve, valamint az Azure SQL Database és Azure SQL Managed Instance alkalmazásokban sp_estimate_compression_savings támogatja mind a columnstore, mind az oszloptároló archívum tömörítésének becslését. Ellentétben az oldal- és sortömörítéssel, a columnstore tömörítés alkalmazása egy objektumra új columnstore index létrehozását igényli. Ezért az és opciók használatakor COLUMNSTORECOLUMNSTORE_ARCHIVE az eljáráshoz adott forrásobjektum típusa határozza meg, hogy milyen típusú columnstore index van a tömörített méretbecsléshez. Az alábbi táblázat bemutatja azokat a referenciaobjektumokat, amelyeket a tömörítési megtakarítás becsülésére használnak minden forrásobjektumtípus esetén, ha a @data_compression paraméter vagy vagy -re van beállítva COLUMNSTORECOLUMNSTORE_ARCHIVE.

Forrásobjektum Referenciaobjektum
**Halom Fürtözött oszlopalapú tárolású index
Klaszterelt index Fürtözött oszlopalapú tárolású index
Nem klaszterezett index Nem klaszterizált columnstore index (beleértve a kulcsoszlopokat és a megadott nem klaszterelt index bármely bevont oszlopát, valamint a tábla partíciós oszlopát, ha van ilyen)
Nem klaszterezett columnstore index Nem klaszterizált columnstore index (beleértve ugyanazokat az oszlopokat, mint a nem klaszterelt columnstore index)
fürtözött oszlopalapú index Fürtözött oszlopalapú tárolású index

Megjegyzés:

Amikor columnstore tömörítést becsülünk sortároló forrásobjektumból (klaszterezett index, nem klaszterelt index vagy halom), ha a forrásobjektumban van olyan oszlop, amelynek adattípusa nem támogatott a columnstore indexben, sp_estimate_compression_savings hibával megbukik.

Hasonlóképpen, ha a @data_compression paraméter NONE, ROW, vagy PAGE a forrásobjektum egy oszloptároló index, a következő táblázat a használt referenciaobjektumokat határozza meg.

Forrásobjektum Referenciaobjektum
fürtözött oszlopalapú index Halommemória
Nem klaszterezett columnstore index Nem klaszterelt index (beleértve a nem klaszterelt columnstore indexben található oszlopokat kulcsoszlopként, és a táblázat partíciós oszlopát, ha van van, mint bevont oszlopot)

Megjegyzés:

Amikor sortároló tömörítést (NINNE, SOROK vagy OLDAL) becsülünk egy oszloptároló forrásobjektumról, győződj meg róla, hogy a forrás index ne tartalmazzon több mint 32 kulcsoszlopot, mivel ez a határérték egy sortároló (nem klaszterizált) indexben támogatott.

Példák

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Becsült megtakarítás ROW tömörítéssel

A következő példa becslési a Production.WorkOrderRouting tábla méretét, ha ROW tömörítéssel van összenyomva.

EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO

B. Becsülési megtakarítás PAGE és XML tömörítéssel

A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók

A következő példa becslési a Production.ProductModel tábla méretét, ha PAGE tömörítéssel van tömörítve, és a @xml_compression érték is engedélyezve van.

EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO