Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Vrátí aktuální velikost požadovaného objektu a odhadne velikost objektu pro požadovaný kompresní stav. Kompresi lze vyhodnotit pro celé tabulky nebo části tabulek. To zahrnuje haldy, shlukované indexy, neklastrované indexy, indexy columnstore, indexované pohledy a oddíly tabulek a indexů. Objekty lze komprimovat pomocí komprese řádků, stránek, columnstore nebo columnstore archivů. Pokud je tabulka, index nebo oddíl již komprimovaný, můžete tímto postupem odhadnout velikost tabulky, indexu nebo oddílu, pokud je rekomprimovaný nebo uložen bez komprese.
Procedura uložená sys.sp_estimate_data_compression_savings v systému je dostupná v Azure SQL Database a Azure SQL Managed Instance.
Od SQL Server 2022 (16.x) můžete komprimovat XML data mimo řádky ve sloupcích pomocí typu xml , čímž snižujete nároky na úložiště a paměť. Další informace naleznete v tématu CREATE TABLE a CREATE INDEX.
sp_estimate_data_compression_savings podporuje odhady komprese XML.
Poznámka:
Komprese a sp_estimate_data_compression_savings nejsou dostupné ve všech edicích SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.
Pro odhad velikosti objektu, pokud by použil požadované nastavení komprese, tato uložená procedura vzorkuje zdrojový objekt a načte tato data do ekvivalentní tabulky a indexu vytvořeného v tempdb. Tabulka nebo index vytvořený v je tempdb poté komprimován do požadovaného nastavení a odhadovaná úspora komprese se vypočítá.
Pro změnu kompresního stavu tabulky, indexu nebo oddílu použijte příkazy ALTER TABLE nebo ALTER INDEX . Pro obecné informace o kompresi viz komprese dat.
Poznámka:
Pokud jsou stávající data fragmentovaná, můžete jejich velikost zmenšit bez použití komprese tím, že index znovu vybudujete. U indexů se při přestavbě indexu aplikuje faktor vyplňování. To by mohlo zvýšit velikost indexu.
Syntaxe
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'
Název databázového schématu, které obsahuje tabulku nebo indexovaný pohled.
@schema_name je sysname, bez výchozího nastavení. Pokud je @schema_name , NULLpoužije se výchozí schéma aktuálního uživatele.
[ @object_name = ] N'object_name'
Název tabulky nebo indexovaného pohledu, na kterém se index nachází. @object_name je sysname, bez výchozího nastavení.
[ @index_id = ] index_id
ID indexu. @index_id je int a může mít jednu z následujících hodnot:
- ID číslo indexu
NULL-
0pokud object_id hromada
Pro vrácení informací pro všechny indexy základní tabulky nebo pohledu uveďte NULL. Pokud určíte NULL, musíte také specifikovat NULL pro @partition_number.
[ @partition_number = ] partition_number
Číslo oddílu v objektu. @partition_number je int a může mít jednu z následujících hodnot:
- číslo oddílu indexu nebo haldy
NULL-
1pro nerozdělený index nebo haldu
Pro určení partition můžete také zadat funkci $PARTITION . Pro vrácení informací pro všechny oddíly vlastnícího objektu uveďme NULL.
[ @data_compression = ] N'data_compression'
Specifikuje typ komprese, která má být vyhodnocena. @data_compression je nvarchar(60) a může mít jednu z následujících hodnot:
NONEROWPAGECOLUMNSTORECOLUMNSTORE_ARCHIVE
Pro SQL Server 2022 (16.x) a novější NULL verze je také možná hodnota.
@data_compression nemůže být NULL , pokud @xml_compression je NULL.
[ @xml_compression = ] xml_compression
Platí na: SQL Server 2022 (16.x) a pozdější verze, Azure SQL Database a Azure SQL Managed Instance
Specifikuje, zda se mají vypočítat úspory při kompresi XML. @xml_compression je bit a může mít jednu z následujících hodnot:
-
NULL(výchozí) 01
@xml_compression nemůže býtNULL, pokud @data_compression .NULL
Hodnoty návratového kódu
0 (úspěch) nebo 1 (selhání).
Sada výsledků
Následující množina výsledků se vrátí, aby poskytla aktuální a odhadovanou velikost tabulky, indexu nebo rozkladu.
| Název sloupce | Datový typ | Description |
|---|---|---|
object_name |
sysname | Název tabulky nebo indexovaného pohledu. |
schema_name |
sysname | Schéma tabulky nebo indexovaného pohledu. |
index_id |
int | ID indexu indexu:0 = Halda1 = Shlukovaný index>1 = Neshlukovaný index |
partition_number |
int | Číslo oddílu. Vrací 1 pro nerozdělenou tabulku nebo index. |
size_with_current_compression_setting (KB) |
bigint | Velikost požadované tabulky, indexu nebo oddílu, jak aktuálně existuje. |
size_with_requested_compression_setting (KB) |
bigint | Odhadovaná velikost tabulky, indexu nebo oddílu, který používá požadované nastavení komprese; a pokud je to relevantní, i stávající faktor vyplňování, a za předpokladu, že nedojde k fragmentaci. |
sample_size_with_current_compression_setting (KB) |
bigint | Velikost vzorku s aktuálním nastavením komprese. Tato velikost zahrnuje jakoukoli fragmentaci. |
sample_size_with_requested_compression_setting (KB) |
bigint | Velikost vzorku vytvořeného použitím požadovaného nastavení komprese; a pokud je to relevantní, stávající faktor vyplnění a žádná fragmentace. |
Poznámky
Použijte k sp_estimate_data_compression_savings odhadu úspor, které mohou nastat, když povolíte tabulku nebo oddíl pro řádky, stránky, columnstore, archiv columnstore nebo XML kompresi. Například pokud lze průměrnou velikost řádku zmenšit o 40 procent, můžete potenciálně zmenšit velikost objektu o 40 procent. Nemusíte ušetřit místo, protože to závisí na faktoru vyplnění a velikosti řádku. Například pokud máte řádek dlouhý 8 000 bajtů a zmenšíte jeho velikost o 40 procent, stále můžete na datové stránce vměstnat pouze jeden řádek. Nejsou žádné úspory.
Pokud výsledky spuštění sp_estimate_data_compression_savings na nekomprimované tabulce nebo indexu naznačují, že velikost se zvětší, znamená to, že mnoho řádků využívá téměř celou přesnost datových typů a přidání malé režie potřebné pro komprimovaný formát je větší než úspora komprese. V tomto vzácném případě kompresi nezapínejte.
Pokud je tabulka již povolena pro kompresi, můžete ji použít sp_estimate_data_compression_savings k odhadu průměrné velikosti řádku, pokud je tabulka nekomprimovaná.
Během této operace je na stole získán zámek sdíleného záměru (IS). Pokud nelze získat zámek IS, postup je zablokován. Tabulka je naskenována pod výchozí úrovní zadaného čtení izolace.
Pokud je požadované nastavení komprese stejné jako aktuální nastavení komprese, uložená procedura vrátí odhadovanou velikost bez fragmentace dat, přičemž pro indexy zdrojového objektu použije stávající faktor vyplňování.
Pokud index nebo ID partition neexistuje, žádné výsledky se nevrátí.
Povolení
Vyžaduje SELECT povolení na tabulku, VIEW DATABASE STATE databázi VIEW DEFINITION obsahující tabulku a na .tempdb
Omezení
V SQL Server 2017 (14.x) a starších verzích se tento postup nevztahoval na indexy columnstore, a proto nepřijímal parametry COLUMNSTORE komprese dat a COLUMNSTORE_ARCHIVE. V SQL Server 2019 (15.x) a novějších verzích, stejně jako v Azure SQL Database a Azure SQL Managed Instance, lze indexy columnstore používat jak jako zdrojový objekt pro odhad, tak jako požadovaný typ komprese.
Když je Memory-Optimized TempDB metadata povolena, není podporováno vytváření indexů v úložišti sloupců v dočasných tabulkách. Kvůli tomuto omezení sp_estimate_data_compression_savings není podporováno COLUMNSTORE parametry komprese dat a COLUMNSTORE_ARCHIVE při Memory-Optimized TempDB metadat.
Úvahy týkající se indexů columnstore
Počínaje SQL Server 2019 (15.x) a v Azure SQL Database a Azure SQL Managed Instance sp_estimate_compression_savings podporuje odhad komprese archivu jak columnstore, tak columnstore. Na rozdíl od komprese stránek a řádků vyžaduje aplikace komprese columnstore na objekt vytvoření nového indexu columnstore. Z tohoto důvodu při použití COLUMNSTORECOLUMNSTORE_ARCHIVE a možností této procedury typ zdrojového objektu poskytnutého procedurě určuje typ indexu columnstore použitého pro odhad komprimované velikosti. Následující tabulka ilustruje referenční objekty používané k odhadu úspor komprese pro každý typ zdrojového objektu, když je parametr @data_compression nastaven na buď COLUMNSTORE nebo COLUMNSTORE_ARCHIVE.
| Zdrojový objekt | Referenční objekt |
|---|---|
| **Halda | Clusterovaný sloupcový index |
| Shlukovaný index | Clusterovaný sloupcový index |
| Neshlukovaný index | Index neclusterovaného columnstore (včetně klíčových sloupců a všech zahrnutých sloupců poskytnutého neclusterovaného indexu a sloupce rozdělení tabulky, pokud existuje) |
| Index neclusterovaného columnstore | Index neclusterovaného columnstore (včetně stejných sloupců jako poskytnutý index, který není clusterovaný columnstore) |
| Clusterovaný columnstore index | Clusterovaný sloupcový index |
Poznámka:
Při odhadu komprese columnstore z objektu rowstore (clustered index, nonclustered index nebo heap) selžou chyby, sp_estimate_compression_savings pokud jsou ve zdrojovém objektu sloupce sloupce, které mají datový typ nepodporovaný indexem columnstore.
Podobně, když je parametr @data_compression nastaven na NONE, ROW, nebo PAGE a zdrojový objekt je index columnstore, následující tabulka uvádí použité referenční objekty.
| Zdrojový objekt | Referenční objekt |
|---|---|
| Clusterovaný columnstore index | Halda |
| Index neclusterovaného columnstore | Neclusterovaný index (včetně sloupců obsažených v indexu neclustered columnstore jako klíčových sloupců a sloupce rozdělení tabulky, pokud existuje, jako zahrnutého sloupce) |
Poznámka:
Při odhadu komprese řádku (ŽÁDNÝ, ŘÁDEK nebo STRÁNKA) ze zdrojového objektu úložiště sloupců se ujistěte, že zdrojový index neobsahuje více než 32 klíčových sloupců, protože to je limit podporovaný indexem úložiště řádků (neklastrovaný).
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Odhad úspor pomocí komprese řádků
Následující příklad odhaduje velikost tabulky Production.WorkOrderRouting , pokud je komprimována pomocí ROW komprese.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO
B. Odhadněte úspory pomocí komprese PAGE a XML
Platí pro: SQL Server 2022 (16.x) a novější verze
Následující příklad odhaduje velikost tabulky Production.ProductModel , pokud je komprimována pomocí PAGE komprese a hodnota @xml_compression je povolena.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO
Související obsah
- VYTVOŘIT TABULKU (Transact-SQL)
- VYTVOŘTE INDEX (Transact-SQL)
- sys.partitions (Transact-SQL)
- uložené procedury databázového stroje (Transact-SQL)
- implementace komprese Unicode