Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Geeft de huidige grootte van het gevraagde object terug en schat de objectgrootte voor de gevraagde compressietoestand. Compressie kan worden geëvalueerd voor hele tabellen of delen van tabellen. Dit omvat heaps, geclusterde indexen, niet-geclusterde indexen, kolomopslagindexen, geïndexeerde weergaven en tabel- en indexpartities. De objecten kunnen worden gecomprimeerd door gebruik te maken van rij-, pagina-, kolomopslag- of kolomopslagarchiefcompressie. Als de tabel, index of partitie al gecomprimeerd is, kun je deze procedure gebruiken om de grootte van de tabel, index of partitie te schatten als deze opnieuw wordt gecomprimeerd of zonder compressie wordt opgeslagen.
De sys.sp_estimate_data_compression_savings systeemopgeslagen procedure is beschikbaar in Azure SQL Database en Azure SQL Managed Instance.
Vanaf SQL Server 2022 (16.x) kun je off-row XML-data comprimeren in kolommen met het xml-datatype , waardoor de opslag- en geheugenvereisten worden verminderd. Zie CREATE TABLE en CREATE INDEXvoor meer informatie.
sp_estimate_data_compression_savings ondersteunt XML-compressieschattingen.
Opmerking
Compressie en sp_estimate_data_compression_savings zijn niet beschikbaar in elke editie van SQL Server. Zie -edities en ondersteunde functies van SQL Server 2022voor een lijst met functies die worden ondersteund door de edities van SQL Server.
Om de grootte van het object te schatten als het de gevraagde compressie-instelling zou gebruiken, samplet deze opgeslagen procedure het bronobject en laadt deze data in een equivalente tabel en index die in tempdbwordt aangemaakt. De tabel of index die in tempdb wordt aangemaakt, wordt vervolgens gecomprimeerd naar de gevraagde instelling en wordt de geschatte compressiebesparing berekend.
Om de compressiestatus van een tabel, index of partitie te wijzigen, gebruik je de ALTER TABLE- of ALTER INDEX-instructies . Voor algemene informatie over compressie, zie Datacompressie.
Opmerking
Als de bestaande data gefragmenteerd is, kun je de omvang ervan mogelijk verkleinen zonder compressie te gebruiken door de index opnieuw op te bouwen. Voor indexen wordt de fill factor toegepast tijdens een indexrebuild. Dit kan de omvang van de index vergroten.
Transact-SQL syntaxis-conventies
Syntaxis
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'
De naam van het databaseschema dat de tabel of geïndexeerde weergave bevat.
@schema_name is een systeemnaam, zonder standaard. Als @schema_name is NULL, wordt het standaardschema van de huidige gebruiker gebruikt.
[ @object_name = ] N'object_name'
De naam van de tabel of geïndexeerde weergave waarop de index staat. @object_name is sysname, zonder standaard.
[ @index_id = ] index_id
De id van de index. @index_id is int, en kan een van de volgende waarden zijn:
- het ID-nummer van een index
NULL-
0als object_id een hoop is
Om informatie terug te geven voor alle indexen van een basistabel of weergave, specificeer NULL. Als je specificeert NULL, moet je ook specificeren NULL voor @partition_number.
[ @partition_number = ] partition_number
Het partitienummer in het object. @partition_number is int, en kan een van de volgende waarden zijn:
- het partitienummer van een index of heap
NULL-
1voor een niet-gepartitioneerde index of heap
Om de partitie te specificeren, kun je ook de functie $PARTITION specificeren. Om informatie terug te geven voor alle partities van het eigenaar object, specificeer NULL.
[ @data_compression = ] N'data_compression'
Specificeert het type compressie dat geëvalueerd moet worden. @data_compression is nvarchar(60) en kan een van de volgende waarden zijn:
NONEROWPAGECOLUMNSTORECOLUMNSTORE_ARCHIVE
Voor SQL Server 2022 (16.x) en latere versies NULL is ook een mogelijke waarde.
@data_compression kan niet als NULL@xml_compression dat is NULL.
[ @xml_compression = ] xml_compression
Van toepassing op: SQL Server 2022 (16.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance
Specificeert of besparingen voor XML-compressie moeten worden berekend. @xml_compression is bit, en kan een van de volgende waarden zijn:
-
NULL(standaard) 01
@xml_compression kan niet als NULL@data_compression dat is NULL.
Codewaarden retourneren
0 (geslaagd) of 1 (mislukt).
Resultaatset
De volgende resultaatset wordt teruggegeven om de huidige en geschatte grootte te geven voor de tabel, index of partitie.
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
object_name |
sysname | Naam van de tabel of de geïndexeerde weergave. |
schema_name |
sysname | Schema van de tabel of geïndexeerde weergave. |
index_id |
int | Index-ID van een index:0 = Heap1 = Geclusterde index>1 = Niet-geclusterde index |
partition_number |
int | Partitienummer. Geeft terug 1 voor een niet-gepartitioneerde tabel of index. |
size_with_current_compression_setting (KB) |
bigint | De grootte van de gevraagde tabel, index of partitie zoals die momenteel bestaat. |
size_with_requested_compression_setting (KB) |
bigint | Geschatte grootte van de tabel, index of partitie die de gevraagde compressie-instelling gebruikt; en, indien van toepassing, de bestaande vulfactor, en ervan uitgaande dat er geen fragmentatie is. |
sample_size_with_current_compression_setting (KB) |
bigint | Grootte van het monster met de huidige compressie-instelling. Deze grootte omvat elke fragmentatie. |
sample_size_with_requested_compression_setting (KB) |
bigint | De grootte van de steekproef die wordt gemaakt met de gevraagde compressie-instelling; en, indien van toepassing, de bestaande opvulfactor en geen fragmentatie. |
Opmerkingen
Gebruik sp_estimate_data_compression_savings deze om de besparingen te schatten die kunnen ontstaan wanneer je een tabel of partitie inschakelt voor rij-, pagina-, kolomopslag-, kolomopslagarchief- of XML-compressie. Als bijvoorbeeld de gemiddelde grootte van de rij met 40 procent kan worden verkleind, kun je mogelijk de grootte van het object met 40 procent verkleinen. Je krijgt misschien geen ruimtebesparing omdat dit afhangt van de vulfactor en de grootte van de rij. Als je bijvoorbeeld een rij hebt van 8.000 bytes en je verkleint de grootte met 40 procent, kun je nog steeds maar één rij op een datapagina passen. Er zijn geen spaargelden.
Als de resultaten van het draaien sp_estimate_data_compression_savings op een niet-gecomprimeerde tabel of index aangeven dat de grootte zal toenemen, betekent dit dat veel rijen bijna de volledige precisie van de datatypes gebruiken, en de kleine overhead die nodig is voor het gecomprimeerde formaat is meer dan de besparing door compressie. In dit zeldzame geval schakel compressie niet in.
Als een tabel al is ingeschakeld voor compressie, kun je gebruiken sp_estimate_data_compression_savings om de gemiddelde grootte van de rij te schatten als de tabel niet gecomprimeerd is.
Tijdens deze operatie wordt een intent shared (IS) lock op de tafel verkregen. Als er geen IS-lock kan worden verkregen, wordt de procedure geblokkeerd. De tabel wordt gescand onder het standaard read committed isolation-niveau.
Als de gevraagde compressie-instelling hetzelfde is als de huidige compressie-instelling, geeft de opgeslagen procedure de geschatte grootte terug zonder datafragmentatie, waarbij de bestaande fillfactor voor indexen op het bronobject wordt gebruikt.
Als de index- of partitie-ID niet bestaat, worden er geen resultaten teruggegeven.
Permissions
Vereist SELECT toestemming voor de tabel, VIEW DATABASE STATE en VIEW DEFINITION voor de database die de tabel bevat en op tempdb.
Beperkingen
In SQL Server 2017 (14.x) en eerdere versies gold deze procedure niet voor kolomopslagindexen, en accepteerde daarom de datacompressieparameters COLUMNSTORE en COLUMNSTORE_ARCHIVE. In SQL Server 2019 (15.x) en latere versies, en in Azure SQL Database en Azure SQL Managed Instance, kunnen kolomopslagindexen zowel als bronobject voor schatting als als gevraagde compressietype worden gebruikt.
Wanneer Memory-Optimized TempDB Metadata is ingeschakeld, wordt het aanmaken van kolomopslagindexen op tijdelijke tabellen niet ondersteund. Vanwege deze beperking sp_estimate_data_compression_savings wordt het niet ondersteund met de COLUMNSTORE datacompressieparameters COLUMNSTORE_ARCHIVE wanneer Memory-Optimized TempDB Metadata is ingeschakeld.
Overwegingen voor columnstore-indexen
Vanaf SQL Server 2019 (15.x), en in Azure SQL Database en Azure SQL Managed Instance, sp_estimate_compression_savings ondersteunt het het schatten van zowel columnstore als columnstore archiefcompressie. In tegenstelling tot pagina- en rijcompressie vereist het toepassen van columnstore-compressie op een object het aanmaken van een nieuwe columnstore-index. Om deze reden bepaalt bij gebruik van de COLUMNSTORE en-opties COLUMNSTORE_ARCHIVE van deze procedure het type bronobject dat aan de procedure wordt geleverd het type kolomopslagindex dat wordt gebruikt voor de schatting van de gecomprimeerde grootte. De volgende tabel illustreert de referentieobjecten die worden gebruikt om compressiebesparingen voor elk bronobjecttype te schatten wanneer de parameter @data_compression is ingesteld op ofwel COLUMNSTORE of COLUMNSTORE_ARCHIVE.
| Bronobject | Referentieobject |
|---|---|
| **Hoop | Geclusterde columnstore-index |
| Geclusterde index | Geclusterde columnstore-index |
| Niet-geclusterde index | Niet-geclusterde columnstore-index (inclusief de sleutelkolommen en eventuele opgenomen kolommen van de opgegeven niet-geclusterde index, en de partitiekolom van de tabel, indien aanwezig) |
| Niet-geclusterde columnstore-index | Niet-geclusterde columnstore-index (inclusief dezelfde kolommen als de meegeleverde niet-geclusterde columnstore-index) |
| Geclusterde columnstore-index | Geclusterde columnstore-index |
Opmerking
Bij het schatten van columnstore-compressie vanuit een rowstore-bronobject (geclusterde index, niet-geclusterde index of heap), als er kolommen in het bronobject zijn met een datatype dat niet wordt ondersteund in een columnstore-index, sp_estimate_compression_savings zullen deze falen met een fout.
Evenzo, wanneer de parameter @data_compression is ingesteld op NONE, ROW, of PAGE het bronobject een columnstore-index is, geeft de volgende tabel een overzicht van de gebruikte referentieobjecten.
| Bronobject | Referentieobject |
|---|---|
| Geclusterde columnstore-index | Stapel |
| Niet-geclusterde columnstore-index | Niet-geclusterde index (inclusief de kolommen die in de niet-geclusterde columnstore-index zijn opgenomen als sleutelkolommen, en de partitiekolom van de tabel, indien aanwezig, als een opgenomen kolom) |
Opmerking
Bij het schatten van rowstore-compressie (GEEN, ROW of PAGE) vanuit een columnstore-bronobject, zorg er dan voor dat de bronindex niet meer dan 32 sleutelkolommen bevat, aangezien dit de limiet is die wordt ondersteund in een rowstore (niet-geclusterde) index.
Voorbeelden
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Eén. Schatting van besparingen met ROW-compressie
Het volgende voorbeeld schat de grootte van de Production.WorkOrderRouting tabel als deze wordt samengedrukt door ROW compressie.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO
B. Schatting van besparingen met PAGE- en XML-compressie
Van toepassing op: SQL Server 2022 (16.x) en latere versies
Het volgende voorbeeld schat de grootte van de Production.ProductModel tabel als deze wordt gecomprimeerd door PAGE compressie, en de @xml_compression-waarde is ingeschakeld.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO