Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Returnerar den aktuella storleken på det begärda objektet och uppskattar objektets storlek för det begärda komprimeringstillståndet. Kompression kan utvärderas för hela tabeller eller delar av tabeller. Detta inkluderar heaps, klustrade index, icke-klustrade index, kolumnlagringsindex, indexerade vyer samt tabell- och indexpartitioner. Objekten kan komprimeras genom att använda rader-, sid-, kolumn- eller kolumnarkivkomprimering. Om tabellen, indexet eller partitionen redan är komprimerad kan du använda denna procedur för att uppskatta storleken på tabellen, indexet eller partitionen om den är omkomprimerad eller lagrad utan komprimering.
Systemlagrad sys.sp_estimate_data_compression_savings progé finns tillgänglig i Azure SQL Database och Azure SQL Managed Instance.
Från och med SQL Server 2022 (16.x) kan du komprimera XML-data utanför raden i kolumner med hjälp av xml-datatypen , vilket minskar lagrings- och minneskraven. Mer information finns i SKAPA TABELL och SKAPA INDEX.
sp_estimate_data_compression_savings stöder XML-komprimeringsuppskattningar.
Anmärkning
Komprimering och sp_estimate_data_compression_savings finns inte i alla versioner av SQL Server. En lista över funktioner som stöds av versionerna av SQL Server finns i Utgåvor och funktioner som stöds i SQL Server 2022.
För att uppskatta objektets storlek om det skulle använda den begärda komprimeringsinställningen, tar denna lagrade projete ett prov på källobjektet och laddar in denna data i en motsvarande tabell och index skapad i tempdb. Tabellen eller indexet som skapas i tempdb komprimeras sedan till den begärda inställningen och de uppskattade komprimeringsbesparingarna beräknas.
För att ändra komprimeringstillståndet för en tabell, index eller partition, använd ALTER TABLE- eller ALTER INDEX-satserna . För allmän information om komprimering, se Datakomprimering.
Anmärkning
Om den befintliga datan är fragmenterad kan du kanske minska dess storlek utan att använda komprimering genom att bygga om indexet. För index kommer fyllnadsfaktorn att tillämpas under en indexombyggnad. Detta kan öka indexets storlek.
Transact-SQL syntaxkonventioner
Syntax
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'
Namnet på databasschemat som innehåller tabellen eller den indexerade vyn.
@schema_name är sysname, utan standard. Om @schema_name är NULL, används standardschemat för den aktuella användaren.
[ @object_name = ] N'object_name'
Namnet på tabellen eller den indexerade vyn som indexet finns på. @object_name är sysname, utan standard.
[ @index_id = ] index_id
Indexets ID. @index_id är int, och kan vara ett av följande värden:
- ID-numret för ett index
NULL-
0om object_id är en hög
För att returnera information för alla index för en bastabell eller vy, ange NULL. Om du specificerar NULL, måste du också specificera NULLför @partition_number.
[ @partition_number = ] partition_number
Partitionsnumret i objektet. @partition_number är int, och kan vara ett av följande värden:
- partitionsnumret för ett index eller en heap
NULL-
1för ett icke-partitionerat index eller heap
För att specificera partitionen kan du också ange funktionen $PARTITION . För att returnera information för alla partitioner av det ägande objektet, specificera NULL.
[ @data_compression = ] N'data_compression'
Specificerar vilken typ av kompression som ska utvärderas. @data_compression är nvarchar(60) och kan vara ett av följande värden:
NONEROWPAGECOLUMNSTORECOLUMNSTORE_ARCHIVE
För SQL Server 2022 (16.x) och senare versioner NULL är också ett möjligt värde.
@data_compression kan inte vara det NULL om @xml_compression är NULLdet.
[ @xml_compression = ] xml_compression
gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance
Specificerar om besparingar ska beräknas för XML-komprimering. @xml_compression är bit, och kan vara ett av följande värden:
-
NULL(standardinställning) 01
@xml_compression kan inte vara det NULL om @data_compression är NULLdet.
Returnera kodvärden
0 (lyckades) eller 1 (fel).
Resultatuppsättning
Följande resultatuppsättning returneras för att ge aktuell och uppskattad storlek för tabellen, indexet eller partitionen.
| Kolumnnamn | Datatyp | Description |
|---|---|---|
object_name |
sysname | Namnet på tabellen eller den indexerade vyn. |
schema_name |
sysname | Schema för tabellen eller indexerad vy. |
index_id |
int | Index-ID för ett index:0 = Heap1 = Klustrat index>1 = Icke-klustrat index |
partition_number |
int | Partitionsnummer. Returnerar 1 för en icke-partitionerad tabell eller index. |
size_with_current_compression_setting (KB) |
bigint | Storleken på den begärda tabellen, indexet eller partitionen som den för närvarande ser ut. |
size_with_requested_compression_setting (KB) |
bigint | Uppskattad storlek på tabellen, indexet eller partitionen som använder den begärda komprimeringsinställningen; och, om tillämpligt, den befintliga fyllnadsfaktorn, och förutsatt att det inte finns någon fragmentering. |
sample_size_with_current_compression_setting (KB) |
bigint | Storleken på provet med nuvarande komprimeringsinställning. Denna storlek inkluderar all fragmentering. |
sample_size_with_requested_compression_setting (KB) |
bigint | Storleken på det prov som skapas genom att använda den begärda komprimeringsinställningen; och, om tillämpligt, den befintliga fyllnadsfaktorn och ingen fragmentering. |
Anmärkningar
Använd sp_estimate_data_compression_savings för att uppskatta de besparingar som kan uppstå när du aktiverar en tabell eller partition för rad-, sid-, kolumn-, kolumnarkiv eller XML-komprimering. Till exempel, om den genomsnittliga raden kan minskas med 40 procent, kan du potentiellt minska objektets storlek med 40 procent. Du kanske inte får någon platsbesparing eftersom detta beror på fyllnadsfaktorn och radens storlek. Till exempel, om du har en rad som är 8 000 byte lång och minskar dess storlek med 40 procent, kan du fortfarande bara få plats med en rad på en datasida. Det finns inga besparingar.
Om resultaten från att köra sp_estimate_data_compression_savings på en okomprimerad tabell eller index visar att storleken kommer att öka, innebär det att många rader använder nästan hela datatypernas precision, och tillägget av den lilla overhead som behövs för det komprimerade formatet är mer än besparingarna från komprimeringen. I detta sällsynta fall, aktivera inte komprimering.
Om en tabell redan är aktiverad för komprimering kan du använda sp_estimate_data_compression_savings den för att uppskatta den genomsnittliga storleken på raden om tabellen är okomprimerad.
Ett intention shared (IS)-lås erhålls på bordet under denna operation. Om ett IS-lås inte kan erhållas blockeras proceduren. Tabellen skannas under standardnivån läs committed isolation.
Om den begärda komprimeringsinställningen är densamma som den aktuella komprimeringsinställningen, returnerar den lagrade proceduren den uppskattade storleken utan datafragmentering, med den befintliga fyllnadsfaktorn för index på källobjektet.
Om index- eller partitions-ID:t inte finns returneras inga resultat.
Permissions
Kräver SELECT behörighet på tabellen, VIEW DATABASE STATE och VIEW DEFINITION på databasen som innehåller tabellen och på tempdb.
Begränsningar
I SQL Server 2017 (14.x) och tidigare versioner gällde inte denna procedur kolumnlagringsindex, och accepterade därför inte datakomprimeringsparametrarna COLUMNSTORE och COLUMNSTORE_ARCHIVE. I SQL Server 2019 (15.x) och senare versioner, samt i Azure SQL Database och Azure SQL Managed Instance, kan kolumnlagringsindex användas både som källobjekt för uppskattning och som en efterfrågad komprimeringstyp.
När Memory-Optimized TempDB-metadata är aktiverad stöds inte skapandet av kolumnlagringsindex på temporära tabeller. På grund av denna begränsning sp_estimate_data_compression_savings stöds inte med och COLUMNSTORE datakomprimeringsparametrarna COLUMNSTORE_ARCHIVE när Memory-Optimized TempDB-metadata är aktiverad.
Överväganden för kolumnlagringsindex
Från och med SQL Server 2019 (15.x), och i Azure SQL Database och Azure SQL Managed Instance, sp_estimate_compression_savings stöds det att uppskatta både kolumnlagrings- och kolumnlagringsarkivkomprimering. Till skillnad från sid- och radkomprimering kräver det att man tillämpar kolumnlagringskomprimering på ett objekt att man skapar ett nytt kolumnlagringsindex. Av denna anledning, när man använder COLUMNSTORE och-alternativen COLUMNSTORE_ARCHIVE i denna procedur, avgör typen av källobjekt som tillhandahålls till proceduren vilken typ av kolumnlagringsindex som används för den komprimerade storleksuppskattningen. Följande tabell illustrerar de referensobjekt som används för att uppskatta komprimeringsbesparingar för varje källobjekttyp när @data_compression-parametern sätts till antingen COLUMNSTORE eller .COLUMNSTORE_ARCHIVE
| Källobjekt | Referensobjekt |
|---|---|
| **Hög | Grupperat kolumnlagringsindex |
| Klustrat index | Grupperat kolumnlagringsindex |
| Icke-klustrat index | Icke-klustrat kolumnlagringsindex (inklusive nyckelkolumnerna och eventuella inkluderade kolumner i det tillhandahållna icke-klustrade indexet, samt partitionskolumnen i tabellen, om sådana finns) |
| Icke-klustrat kolumnlagringsindex | Icke-klustrat kolumnlagringsindex (inklusive samma kolumner som det tillhandahållna icke-klustrade kolumnlagringsindexet) |
| Grupperat kolumnlagringsindex | Grupperat kolumnlagringsindex |
Anmärkning
När man uppskattar kolumnlagringskomprimering från ett källobjekt för radlagring (klustrat index, icke-klustrat index eller heap), om det finns några kolumner i källobjektet som har en datatyp som inte stöds i ett kolumnlagringsindex, sp_estimate_compression_savings kommer de att misslyckas med ett fel.
På samma sätt, när @data_compression-parametern sätts till NONE, ROW, eller PAGE källobjektet är ett kolumnlagringsindex, visar följande tabell de referensobjekt som används.
| Källobjekt | Referensobjekt |
|---|---|
| Grupperat kolumnlagringsindex | Hög |
| Icke-klustrat kolumnlagringsindex | Icke-klustrat index (inklusive kolumnerna i det icke-klustrade kolumnlagreindexet som nyckelkolumner, och partitionskolumnen i tabellen, om någon, som inkluderad kolumn) |
Anmärkning
När du uppskattar rowstore-komprimering (NONE, ROW eller PAGE) från ett kolumnlagrings-källobjekt, se till att källindexet inte innehåller fler än 32 nyckelkolumner eftersom detta är gränsen som stöds i ett rowstore-index (icke-klustrat).
Examples
Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Uppskatta besparingar med ROW-komprimering
Följande exempel uppskattar storleken på Production.WorkOrderRouting tabellen om den komprimeras med hjälp ROW av kompression.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO
B. Uppskatta besparingar med PAGE- och XML-komprimering
Gäller för: SQL Server 2022 (16.x) och senare versioner
Följande exempel uppskattar storleken på Production.ProductModel tabellen om den komprimeras med PAGE komprimering, och värdet @xml_compression är aktiverat.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO