Sdílet prostřednictvím


Implementace komprese stránek

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Tento článek shrnuje, jak databázový stroj implementuje kompresi stránek. Tento souhrn obsahuje základní informace, které vám pomůžou naplánovat prostor úložiště, který potřebujete pro vaše data.

Komprese stránky je podobná tabulkám, oddílům tabulek, indexům a oddílům indexu. Následující popis komprese stránky pro tabulku platí stejně pro kompresi stránky pro všechny typy objektů. Následující příklady komprimují řetězce znaků, ale komprese předpony a slovníku používají stejné principy u jiných datových typů.

Komprese úrovně listu tabulek a indexů pomocí komprese stránky se skládá ze tří operací v následujícím pořadí:

  1. Komprese řádků
  2. Komprese předpon
  3. Komprese slovníku

Při použití komprese stránky se stránky na ne-listové úrovni indexů komprimují pouze pomocí komprese řádků. Další informace o kompresi řádků naleznete v tématu Implementace komprese řádků.

Komprese předpon

Pro každou komprimovanou stránku používá komprese předpony následující kroky:

  1. Pro každý sloupec je identifikována hodnota, která se dá použít ke snížení úložného prostoru pro hodnoty v každém sloupci.

  2. Řádek, který představuje hodnoty předpony pro každý sloupec, se vytvoří a uloží ve struktuře informací o kompresi (CI), která bezprostředně následuje za záhlavím stránky.

  3. Opakované hodnoty předpony ve sloupci se nahradí odkazem na odpovídající předponu. Pokud hodnota v řádku přesně neodpovídá vybrané hodnotě předpony, je stále možné určit částečnou shodu.

Následující ilustrace znázorňuje ukázkovou stránku tabulky před kompresí s prefixem.

Diagram stránky před kompresí předpony.

Následující obrázek znázorňuje stejnou stránku po kompresi předpony. Předpona se přesune do záhlaví a hodnoty sloupců se změní na odkazy na předponu.

Diagram stránky po kompresi předpony

V prvním sloupci prvního řádku hodnota 4b označuje, že první čtyři znaky předpony (aaab) jsou přítomné pro tento řádek a také znak b. Výsledkem je výsledná hodnota aaabb, což je původní hodnota.

Komprese slovníku

Po dokončení komprese předpony se použije komprese slovníku. Komprese slovníku vyhledá opakované hodnoty kdekoli na stránce a uloží je do oblasti CI. Na rozdíl od komprese předpon není komprese slovníku omezena na jeden sloupec. Komprese slovníku může nahradit opakované hodnoty, ke kterým dochází kdekoli na stránce. Následující obrázek znázorňuje stejnou stránku po kompresi slovníku.

Diagram stránky po kompresi slovníku

Hodnota 4b byla odkazována z různých sloupců stránky.

Když dojde ke kompresi stránky

Při vytvoření nové tabulky s kompresí stránky nedojde k žádné kompresi. Metadata tabulky ale označují, že se má použít komprese stránky. Při přidání dat na první datovou stránku se data komprimují na úrovni řádků. Vzhledem k tomu, že stránka není plná, není z komprese stránek získána žádná výhoda. Když je stránka zaplněná, další řádek, který se má přidat, zahájí operaci komprese stránky. Celá stránka je zkontrolována; každý sloupec se vyhodnotí z hlediska použití komprese předpony a poté se všechny sloupce vyhodnotí pro použití komprese slovníku. Pokud komprese stránky vytvořila dostatek místa na stránce pro další řádek, přidá se řádek a data se komprimují jak na úrovni řádků, tak na úrovni stránek. Pokud prostor získaný kompresí stránky minus prostor vyžadovaný pro strukturu CI není významný, komprese stránky se pro tuto stránku nepoužívá. Budoucí řádky se buď vejdou na novou stránku, nebo pokud se nevejdou, přidá se do tabulky nová stránka. Podobně jako na první stránce není nová stránka na první stránce komprimovaná.

Při převodu existující tabulky obsahující data na kompresi stránky se každá stránka znovu sestaví a vyhodnotí. Opětovné sestavení všech stránek způsobí opětovné sestavení tabulky, indexu nebo oddílu.

Další kroky