Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-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-
0ha 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-
1nem 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:
NONEROWPAGECOLUMNSTORECOLUMNSTORE_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) 01
@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 = Halom1 = 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