- 03/19/2020
- 21 minutes to read
-
- p
- j
- M
- M
- d
-
+11
Applies to: SQL Server (všechny podporované verze) Databáze SQL Azure SQL Azure Managed Instance Azure Synapse Analytics Paralelní Datového Skladu
Tento článek popisuje, jak index defragmentace se vyskytuje a popisuje jeho vliv na výkon dotazu. Jakmile si určit množství fragmentace, která existuje pro index, můžete defragmentovat index buď reorganizaci indexu nebo opětovné sestavení indexu spuštěním Transact-SQL příkazy v váš nástroj výběru, nebo pomocí SQL Server Management Studio.
Index fragmentace přehled
Co je index fragmentace a proč bych se měl starat o to:
- Roztříštěnost existuje, když indexy mají stránky, na kterých logické uspořádání v rámci indexu, na základě hodnoty klíče indexu, neodpovídá fyzické uspořádání uvnitř stránek indexu.
- databázový stroj automaticky upravuje indexy vždy, když jsou na podkladových datech provedeny operace vkládání, aktualizace nebo mazání. Například přidání řádků do tabulky může způsobit rozdělení existujících stránek v indexech rowstore, aby se vytvořil prostor pro vkládání nových klíčových hodnot. V průběhu času mohou tyto úpravy způsobit, že informace v indexu budou rozptýleny v databázi (fragmentovány). Fragmentace existuje, když indexy mají stránky, ve kterých logické uspořádání, založené na hodnotě klíče, neodpovídá fyzickému uspořádání uvnitř datového souboru.
- silně fragmentované indexy mohou snížit výkon dotazu, protože k vyhledání dat, na která index ukazuje, je zapotřebí dalších vstupů/výstupů. Více I / O způsobuje, že vaše aplikace reaguje pomalu, zejména pokud se jedná o operace skenování.
Detekce množství fragmentace
prvním krokem při rozhodování, který index defragmentace metodu použít je analyzovat index k určení stupně fragmentace. Fragmentaci zjistíte odlišně u indexů rowstore a indexů columnstore.
Poznámka
je obzvláště důležité zkontrolovat fragmentaci indexu nebo haldy po odstranění velkého množství dat. Pokud se u hald vyskytují časté aktualizace, může být také nutné přezkoumat fragmentaci, aby se zabránilo šíření spedičních záznamů. Další informace o hromadách naleznete v části hromady (tabulky bez seskupených indexů).
detekce fragmentace indexů rowstore
pomocí sys.dm_db_index_physical_stats, můžete zjistit fragmentaci v konkrétní index, všechny indexy na tabulce nebo indexované zobrazení, všechny indexy v databázi, nebo všechny indexy ve všech databázích. Pro rozdělené indexy poskytuje sys. dm_db_index_physical_stats také informace o fragmentaci pro každý oddíl.
sada výsledků vrácená sys. dm_db_index_physical_stats obsahuje následující sloupce:
Sloupec a | Popis |
---|---|
avg_fragmentation_in_percent | % logické fragmentace (out-of-pořadí stránek v indexu). |
fragment_count | počet fragmentů (fyzicky po sobě jdoucích listových stránek) v indexu. |
avg_fragment_size_in_pages | průměrný počet stránek v jednom fragmentu v indexu. |
Po stupeň fragmentace je známo, pomocí následující tabulky určit nejlepší metodu k odstranění fragmentace: REORGANIZOVAT INDEX nebo INDEX.
avg_fragmentation_in_percent value | Corrective statement |
---|---|
> 5% and < = 30% 1 | ALTER INDEX REORGANIZE |
> 30% 1 | ALTER INDEX REBUILD WITH (ONLINE = ON) 2 |
1 These values provide a rough guideline for determining the point at which you should switch between ALTER INDEX REORGANIZE
a ALTER INDEX REBUILD
. Skutečné hodnoty se však mohou případ od případu lišit. Je důležité, abyste experimentovali s cílem určit nejlepší prahovou hodnotu pro vaše prostředí.
Tip
Pokud se například daný index používá hlavně pro operace skenování, odstranění fragmentace může zlepšit výkon těchto operací. Výkonnostní přínos nemusí být patrný u indexů, které se používají především pro operace seek.
podobně odstranění fragmentace v haldě (tabulka bez seskupeného indexu) je zvláště užitečné pro nekuřácké operace skenování indexů, ale má malý vliv na vyhledávací operace.
2 přestavba indexu může být provedena online nebo offline. Reorganizace indexu se provádí vždy online. Chcete-li dosáhnout dostupnosti podobné možnosti reorganizace, měli byste znovu vytvořit indexy online. Pro více informací, viz INDEX a provádět indexové operace Online.
Indexy fragmentace méně než 5 procent není třeba defragmentovat, protože prospěch z odstranění takové malé množství fragmentace je téměř vždy výrazně převažuje nad CPU náklady na reorganizaci nebo znovu vytvořit index. Také přestavba nebo reorganizace malých indexů rowstore obecně nesnižuje skutečnou fragmentaci.Až do, A včetně, SQL Server 2014 (12.x), databázový stroj SQL Server přiděluje prostor pomocí smíšených rozsahů. Proto jsou stránky malých indexů někdy uloženy ve smíšeném rozsahu. Smíšené rozsahy jsou sdíleny až osmi objekty, takže fragmentace v malém indexu nemusí být po reorganizaci nebo přestavbě snížena. Viz také úvahy specifické pro přestavbu indexů rowstore. Další informace o rozsahech naleznete v Průvodci architekturou stránek a rozsahů.
Detekce fragmentace columnstore indexy
pomocí sys.dm_db_column_store_row_group_physical_stats, můžete určit procento smazaných řádků v indexu, což je rozumné opatření pro fragmentaci v rowgroup z columnstore index. Tyto informace použijte k výpočtu fragmentace v konkrétním indexu, všech indexech v tabulce, všech indexech v databázi nebo všech indexech ve všech databázích.
sady výsledků vrácené sys.dm_db_column_store_row_group_physical_stats obsahuje následující sloupce:
Sloupec a | Popis |
---|---|
total_rows | Počet řádků fyzické uloženy v řádku skupiny. U komprimovaných skupin řádků to zahrnuje řádky, které jsou označeny jako odstraněné. |
deleted_rows | počet řádků fyzicky uložených ve skupině komprimovaných řádků, které jsou označeny k odstranění. 0 pro skupiny řádků, které jsou v úložišti delta. |
Pomocí této informace se vrátil pro výpočet indexu fragmentace pomocí tohoto vzorce:
100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0)
Po stupeň index fragmentace je známo, pomocí následující tabulky určit nejlepší metodu k odstranění fragmentace: REORGANIZOVAT INDEX nebo INDEX.
computed fragmentation in percent value | Applies to version | Corrective statement |
---|---|---|
> = 20% | SQL Server 2012 (11.x) and SQL Server 2014 (12.x) | ALTER INDEX REBUILD |
> = 20% | Starting with SQL Server 2016 (13.x) | ALTER INDEX USPOŘÁDÁNÍ |
zkontrolovat fragmentaci a rowstore index pomocí Transact-SQL
následující příklad vyhledá průměrná fragmentace procento všech indexů v HumanResources.Employee
tabulka AdventureWorks2016
databáze.
SELECT a.object_id, object_name(a.object_id) AS TableName, a.index_id, name AS IndedxName, avg_fragmentation_in_percentFROM sys.dm_db_index_physical_stats (DB_ID (N'AdventureWorks2016_EXT') , OBJECT_ID(N'HumanResources.Employee') , NULL , NULL , NULL) AS aINNER JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;GO
předchozí příkaz vrací výsledek nastavený podobně jako následující.
object_id TableName index_id IndexName avg_fragmentation_in_percent----------- ------------ ----------- ----------------------------------------------------- ------------------------------1557580587 Employee 1 PK_Employee_BusinessEntityID 01557580587 Employee 2 IX_Employee_OrganizationalNode 01557580587 Employee 3 IX_Employee_OrganizationalLevel_OrganizationalNode 01557580587 Employee 5 AK_Employee_LoginID 66.66666666666671557580587 Employee 6 AK_Employee_NationalIDNumber 501557580587 Employee 7 AK_Employee_rowguid 0(6 row(s) affected)
Pro více informací, viz sys.dm_db_index_physical_stats.
zkontrolovat fragmentaci columnstore index pomocí Transact-SQL
následující příklad vyhledá průměrná fragmentace procento všech indexů v dbo.FactResellerSalesXL_CCI
tabulka AdventureWorksDW2016
databáze.
SELECT i.object_id, object_name(i.object_id) AS TableName, i.index_id, i.name AS IndexName, 100*(ISNULL(SUM(CSRowGroups.deleted_rows),0))/NULLIF(SUM(CSRowGroups.total_rows),0) AS 'Fragmentation'FROM sys.indexes AS i INNER JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_idWHERE object_name(i.object_id) = 'FactResellerSalesXL_CCI'GROUP BY i.object_id, i.index_id, i.nameORDER BY object_name(i.object_id), i.name;
předchozí příkaz vrací výsledek nastavený podobně jako následující.
object_id TableName index_id IndexName Fragmentation----------- --------------------------- ----------- ------------------------------- ---------------114099447 FactResellerSalesXL_CCI 1 IndFactResellerSalesXL_CCI 0(1 row(s) affected)
Zkontrolujte, zda index fragmentace pomocí SQL Server Management Studio
Poznámka:
Management Studio nemůže být použita pro výpočet fragmentace columnstore indexy v SQL Serveru, a nemohou být použity pro výpočet fragmentace žádné indexy v SQL Azure Databáze. Použijte předchozí příklad Transact-SQL.
- v Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete zkontrolovat fragmentaci indexu.
- rozbalte složku tabulky.
- rozbalte tabulku, na které chcete zkontrolovat fragmentaci indexu.
- rozbalte složku indexy.
- klepněte pravým tlačítkem myši na index, který chcete zkontrolovat fragmentaci, a vyberte Vlastnosti.
- v části Vybrat stránku vyberte fragmentaci.
následující informace jsou k dispozici na Fragmentaci stránky:
Hodnota | Popis |
---|---|
Stránka plnosti | Označuje průměrné plnosti index stránky, jako procento. 100% znamená, že stránky indexu jsou zcela plné. 50% znamená, že každá indexová stránka je v průměru napůl plná. |
celková fragmentace | procento logické fragmentace. To označuje počet stránek v indexu, které nejsou uloženy v pořadí. |
průměrná velikost řádku | průměrná velikost řádku na úrovni listů. |
hloubka | počet úrovní v indexu, včetně úrovně listů. |
Forwarded records | počet záznamů v haldě, které mají ukazatele vpřed na jiné datové umístění. (Tento stav nastane během aktualizace, když není dostatek místa pro uložení nového řádku na původním místě.) |
Ghost rows | počet řádků, které jsou označeny jako odstraněné, ale ještě nebyly odstraněny. Tyto řádky budou odstraněny podprocesem clean-up, pokud server není zaneprázdněn. Tato hodnota nezahrnuje řádky, které jsou zachovány kvůli vynikající transakci izolace snímku. |
typ indexu | typ indexu. Možné hodnoty jsou Clustered index, Nonclustered index a primární XML. Tabulky lze také uložit jako haldu (bez indexů), ale tuto stránku vlastností indexu nelze otevřít. |
řádky na úrovni listů | počet řádků na úrovni listů. |
maximální velikost řádku | maximální velikost řádku na úrovni listů. |
minimální velikost řádku | minimální velikost řádku na úrovni listů. |
stránky | celkový počet datových stránek. |
ID oddílu | ID oddílu B-stromu obsahujícího index. |
verze ghost rows | počet záznamů duchů, které jsou zachovány kvůli vynikající transakci izolace snímku. |
Defragmentace indexy přestavbu nebo reorganizaci index
Můžete defragmentovat fragmentované index pomocí jedné z následujících metod:
- Index reorganizaci
- Index znovu
Poznámka:
Pro indexy oddílů postavený na schéma oddílu, můžete použít některou z následujících metod na kompletní index, nebo jeden oddíl indexu.
reorganizace indexu
reorganizace indexu využívá minimální systémové prostředky a je online operací. To znamená, že dlouhodobé blokování tabulky zámky nejsou drženy a dotazy nebo aktualizace podkladové tabulky mohou pokračovat během transakce ALTER INDEX REORGANIZE
.
-
Pro rowstore indexy, Databáze Motor defragmentaci list úroveň clustery a nonclustered indexy na tabulky a pohledy fyzicky pořadí listu na úrovni stránky, aby odpovídaly logické pořadí listové uzly (zleva doprava). Reorganizace také kompaktuje stránky indexu na základě hodnoty faktoru naplnění indexu. Chcete-li zobrazit nastavení faktoru výplně, použijte sys.index. Pro příklady syntaxe, viz příklady: rowstore reorganizovat.
-
při použití indexů columnstore může obchod delta skončit s několika malými rowgroups po vložení, aktualizaci a mazání dat v průběhu času. Reorganizace columnstore index síly všechny rowgroups do columnstore, a pak kombinuje rowgroups do méně rowgroups s více řádky. Operace reorganizace také odstraní řádky, které byly odstraněny z columnstore. Reorganizace zpočátku vyžaduje další prostředky CPU ke kompresi dat, což může zpomalit celkový výkon systému. Jakmile jsou však data komprimována, výkon dotazu se zlepší. Pro příklady syntaxe, viz příklady: ColumnStore reorganizovat.
znovu vytvořte index
znovu vytvořte index. V závislosti na typu verze indexu a databázového motoru lze operaci obnovy provést online nebo offline. Pro T-SQL syntaxe, viz ALTER INDEX REBUILD
-
Pro rowstore indexy, přestavba odstraní fragmentace reclaims místo na disku pomocí komprese stránky založené na určeném nebo existující faktor plnění nastavení a uspořádává index řádků v souvislých stránek. Když je zadáno
ALL
, všechny indexy v tabulce jsou zrušeny a přestavěny v jedné transakci. Zahraniční klíčová omezení nemusí být upuštěna předem. Když jsou indexy s 128 rozsahy nebo více přestavěny, databázový stroj odloží skutečné přidělení stránky a jejich přidružené zámky, dokud se transakce neprovede. Pro příklady syntaxe, viz příklady: rowstore reorganizovat. -
pro columnstore indexy, přestavba odstraní fragmentaci, přesune všechny řádky do columnstore, a kultivuje místo na disku fyzickým odstraněním řádků, které byly logicky odstraněny z tabulky.
Tip
počínaje SQL Server 2016 (13 .x), přestavba indexu columnstore obvykle není nutná, protože
REORGANIZE
provádí základy přestavby na pozadí jako online operace.pro příklady syntaxe viz příklady: ColumnStore rebuild.
oprávnění
vyžaduje ALTER
oprávnění k tabulce nebo zobrazení. Uživatel musí být členem alespoň jedné z následujících rolí:
- databáze db_ddladmin roli 1
- databáze db_owner role
- sysadmin role serveru
1db_ddladmin role databáze je nejméně privilegovaní.
Odstranit roztříštěnost pomocí SQL Server Management Studio
reorganizovat nebo znovu vytvořit index
- V Objekt aplikace Explorer, Rozbalte databáze, která obsahuje tabulka, na které chcete reorganizovat index.
- rozbalte složku tabulky.
- rozbalte tabulku, na které chcete reorganizovat index.
- rozbalte složku indexy.
- klepněte pravým tlačítkem myši na index, který chcete reorganizovat, a vyberte reorganizovat.
- v dialogovém okně reorganizovat indexy ověřte, zda je správný index v mřížce indexů, které mají být reorganizovány, a klikněte na OK.
- Vyberte Kompaktní large object sloupec dat, zaškrtněte políčko upřesnit, že všechny stránky, které obsahují velké objektu (LOB) dat jsou také zhutněný.
- klikněte na OK.
Chcete-li reorganizovat všechny indexy v tabulce
- v Průzkumníku objektů, rozbalte databázi obsahující tabulku, na které chcete reorganizovat indexy.
- rozbalte složku tabulky.
- rozbalte tabulku, na které chcete reorganizovat indexy.
- klepněte pravým tlačítkem myši na složku indexy a vyberte možnost reorganizovat vše.
- v dialogovém okně reorganizovat indexy ověřte, zda jsou správné indexy v indexech, které mají být reorganizovány. Chcete-li odebrat index z indexů, které mají být reorganizovány mřížky, Vyberte index a stiskněte klávesu Delete.
- Vyberte Kompaktní large object sloupec dat, zaškrtněte políčko upřesnit, že všechny stránky, které obsahují velké objektu (LOB) dat jsou také zhutněný.
- klikněte na OK.
Chcete-li obnovit index
- v Průzkumníku objektů, rozbalte databázi obsahující tabulku, na které chcete reorganizovat index.
- rozbalte složku tabulky.
- rozbalte tabulku, na které chcete reorganizovat index.
- rozbalte složku indexy.
- klepněte pravým tlačítkem myši na index, který chcete reorganizovat, a vyberte možnost znovu sestavit.
- v dialogovém okně Obnovit indexy ověřte, zda je správný index v mřížce indexů, které mají být přestavěny, a klikněte na OK.
- Vyberte Kompaktní large object sloupec dat, zaškrtněte políčko upřesnit, že všechny stránky, které obsahují velké objektu (LOB) dat jsou také zhutněný.
- klikněte na OK.
Odstranit roztříštěnost pomocí Transact-SQL
Poznámka:
další příklady o použití Transact-SQL k obnově nebo reorganizovat indexy, viz ALTER INDEX Příklady: Columnstore Indexy a ALTER INDEX Příklady: Rowstore Indexy.
reorganizovat roztříštěný index
následující příklad reorganizuje IX_Employee_OrganizationalLevel_OrganizationalNode
index HumanResources.Employee
tabulka AdventureWorks2016
databáze.
ALTER INDEX IX_Employee_OrganizationalLevel_OrganizationalNode ON HumanResources.Employee REORGANIZE;
následující příklad reorganizuje IndFactResellerSalesXL_CCI
columnstore index na dbo.FactResellerSalesXL_CCI
tabulka AdventureWorksDW2016
databáze.
-- This command will force all CLOSED and OPEN rowgroups into the columnstore.ALTER INDEX IndFactResellerSalesXL_CCI ON FactResellerSalesXL_CCI REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);
reorganizovat všechny indexy v tabulce
následující příklad reorganizuje všechny indexy na HumanResources.Employee
tabulka AdventureWorks2016
databáze.
ALTER INDEX ALL ON HumanResources.Employee REORGANIZE;
obnovit roztříštěné index
následující příklad znovu vytvoří jeden index na Employee
tabulka AdventureWorks2016
databáze.
ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.EmployeeREBUILD;
znovu vytvořit všechny indexy v tabulce
následující příklad znovu sestaví všechny indexy spojené s tabulkou v AdventureWorks2016
databáze pomocí ALL
klíčové slovo. Jsou specifikovány Tři možnosti.
ALTER INDEX ALL ON Production.ProductREBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);
pro více informací viz ALTER INDEX (Transact-SQL).
Automatické index a statistika management
Pákový řešení, jako například Adaptivní Index Defrag automaticky spravovat index defragmentace a aktualizace statistiky pro jednu nebo více databází. Tento postup automaticky zvolí, zda obnovit nebo reorganizovat index podle jeho úrovně fragmentace, mimo jiné parametry, a aktualizovat statistiky s lineárním prahem.
Úvahy specifické pro obnovu rowstore indexy
Přestavba seskupený index automaticky obnoví jakékoli nonclustered indexy, které odkazují na clustering klíč, pokud fyzické nebo logické identifikátory obsažené v neclusterovaný index se záznamy je třeba změnit.
následující scénáře vynutit všechny rowstore nonclustered indexy v tabulce, které mají být automaticky přestavěn:
- Vytvoření seskupeného indexu na tabulce
- Odstranění seskupený index, který způsobí, že tabulky mají být uloženy jako hromada
- Změna clustering klíč k zahrnout nebo vyloučit sloupce
následující scénáře nevyžadují všechny rowstore nonclustered indexy, které mají být automaticky přestavěn na stůl:
- Přestavba jedinečný seskupený index
- Obnova nejedinečný index seskupený
- Změna index schématu, jako je například použití rozdělení disku na seskupený index nebo pohybující seskupený index do jiné filegroup
Důležité,
index nemůže být reorganizována, nebo přestavěn pokud je skupina souborů, ve kterém se nachází, je v režimu offline nebo je nastaven na jen pro čtení. Když je zadáno klíčové slovo ALL a jeden nebo více indexů je v offline nebo jen pro čtení, příkaz selže.
zatímco dojde k obnovení indexu, fyzické médium musí mít dostatek místa pro uložení dvou kopií indexu. Po dokončení přestavby databázový stroj odstraní původní index.
Když ALL
je určen ALTER INDEX
prohlášení, relační indexy, oba clustery a nonclustered a XML indexy v tabulce jsou reorganizována.
úvahy specifické pro přestavbu indexu columnstore
při přestavbě indexu columnstore čte databázový stroj všechna data z původního indexu columnstore, včetně obchodu delta. Kombinuje data do nových rowgroups, a komprimuje rowgroups do columnstore. Databázový stroj defragmentuje columnstore fyzickým odstraněním řádků, které byly logicky odstraněny z tabulky. Smazané bajty jsou na disku regenerovány.
Poznámka:
Reorganizace columnstore index pomocí Management Studio bude kombinovat STLAČENÝ rowgroups spolu, ale nenutí všechny rowgroups být komprimována do columnstore. UZAVŘENÉ rowgroups bude komprimován, ale OTEVŘÍT rowgroups nebude komprimován do columnstore.Násilně komprimovat všechny rowgroups, použijte Transact-SQL příklad níže.
Poznámka
počínaje SQL Server 2019 (15.x), n-tice-mover je pomáhal pozadí sloučit úkol, který automaticky komprimuje menší OPEN delta rowgroups, které existovaly po nějaký čas, jak určí vnitřní práh, nebo splývá STLAČENÝ rowgroups od místa, kde velký počet řádků byl smazán. To zlepšuje kvalitu indexu columnstore v průběhu času.
Další informace o pojmech a pojmech columnstore naleznete v části Columnstore indexy: přehled.
Obnovit oddíl, místo celé tabulky
- Přestavět celou tabulku trvá dlouho v případě, že index je velký, a to vyžaduje dost místa na disku pro uložení další kopii indexu během obnovy. Obvykle je nutné pouze znovu vytvořit naposledy použitý oddíl.
- u rozdělených tabulek nemusíte znovu sestavovat celý index columnstore, protože fragmentace pravděpodobně nastane pouze v nedávno upravených oddílech. Tabulky faktů a tabulky velkých rozměrů jsou obvykle rozděleny, aby bylo možné provádět operace zálohování a správy na částech tabulky.
znovu vytvořte oddíl po těžkých operacích DML
přestavba oddílu defragmentuje oddíl a snižuje ukládání disku. Přestavba odstraní všechny řádky z columnstore, které jsou označeny k odstranění a přesune všechny rowgroups z delta ukládat do columnstore. V delta store může být více řadových skupin, které mají méně než jeden milion řádků.
přestavět oddíl po načtení dat
přestavět oddíl po načtení data zajistí, že všechna data budou uložena v columnstore. Když souběžné procesy načtou každý méně než 100 000 řádků do stejného oddílu současně, může oddíl skončit s více obchody delta. Přestavba přesune všechny řádky delta store do columnstore.
Úvahy specifické pro reorganizaci columnstore index
po reorganizaci columnstore index, Database Engine komprimuje každý UZAVŘENÝ delta rowgroup do columnstore jako komprimovaný rowgroup. Počínaje SQL Server 2016 (13.x) a v Azure SQL Databáze, REORGANIZE
příkaz provede následující dodatečné defragmentaci optimalizací on-line:
-
Fyzicky odstraní řádky z rowgroup až 10% nebo více řádků, byl logicky zrušen. Smazané bajty jsou regenerovány na fyzickém médiu. Například, pokud komprimované řádku skupina 1 milion řádků má 100K řádky odstraněny, SQL Server bude odstranit smazané řádky a opětovnou rowgroup s 900k řádky. Ukládá do úložiště odstraněním odstraněných řádků.
-
kombinuje jednu nebo více komprimovaných rowgroups pro zvýšení řádků na rowgroup až na maximum 1,048,576 řádků. Pokud například hromadně importujete 5 šarží 102 400 řádků, získáte 5 komprimovaných rowgroups. Pokud spustíte reorganizaci, tyto rowgroups se sloučí do 1 komprimované rowgroup o velikosti 512,000 řádků. To předpokládá, že neexistovala žádná velikost slovníku ani omezení paměti.
-
Pro rowgroups, ve kterém 10% nebo více řádků byly logicky smazané, Databázový stroj se pokusí spojit tento rowgroup s jedním nebo více rowgroups. Například rowgroup 1 je komprimován 500 000 řádky a rowgroup 21 je komprimován maximálně 1 048 576 řádky. Rowgroup 21 obsahuje 60% odstraněných řádků, což ponechává 409 830 řádků. Databázový stroj upřednostňuje kombinaci těchto dvou rowgroups komprimovat novou rowgroup, který má 909,830 řádků.
po provedení zatížení dat můžete mít v úložišti delta více malých řadových skupin. Můžete použít ALTER INDEX REORGANIZE
vynutit všechny rowgroups do columnstore, a pak kombinovat rowgroups do méně rowgroups s více řádky. Operace reorganizace také odstraní řádky, které byly odstraněny z columnstore.
omezení a omezení
rowstore indexy s více než 128 rozsahy jsou přestavěny ve dvou samostatných fázích: logické a fyzické. V logické fáze, existující alokačních jednotek používaných indexu jsou označeny pro dealokace, data řádky jsou zkopírovány a řazeny, pak se stěhoval do nové alokačních jednotek vytvořených pro ukládání přestavěn index. Ve fyzické fázi jsou alokační jednotky dříve označené pro přerozdělení fyzicky vynechány v krátkých transakcích, které se dějí na pozadí, a nevyžadují mnoho zámků. Pro více informací o rozsahy, viz stránky a rozsahy Architecture Guide.
ALTER INDEX REORGANIZE
prohlášení vyžaduje datový soubor obsahující index mít k dispozici prostor, protože operace může přidělit pouze dočasné pracovní stránky na jednom souboru, ne v jiném souboru ve filegroup. Takže i když filegroup může mít volné stránky k dispozici, uživatel může stále zobrazit chybové 1105: Could not allocate space for object '###' in database '###' because the '###' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
Upozornění
Vytváření a obnově nonaligned indexy na tabulky s více než 1000 oddílů je možné, ale není podporován. Pokud tak učiníte, může během těchto operací dojít ke zhoršení výkonu nebo nadměrné spotřebě paměti. Společnost Microsoft doporučuje používat pouze zarovnané indexy, pokud počet oddílů přesáhne 1 000.
index nelze reorganizovat nebo přestavět, pokud je souborová skupina, ve které je umístěna, offline nebo nastavena na hodnotu pouze pro čtení. Když je zadáno klíčové slovo ALL
a jeden nebo více indexů je v offline nebo jen pro čtení, příkaz selže.
statistika:
-
když je index vytvořen nebo přestavěn, statistiky jsou vytvořeny nebo aktualizovány skenováním všech řádků v tabulce. Počínaje SQL Serverem 2012 (11.x), statistiky nejsou vytvářeny ani aktualizovány skenováním všech řádků v tabulce, když je vytvořen nebo přestavěn rozdělený index. Místo toho optimalizátor dotazů používá k vygenerování těchto statistik výchozí algoritmus vzorkování. Chcete-li získat statistiky o rozdělených indexech skenováním všech řádků v tabulce, použijte vytvořit statistiku nebo aktualizovat statistiku pomocí klauzule
FULLSCAN
. -
když je index reorganizován, statistiky nejsou aktualizovány.
index nelze reorganizovat, pokud je ALLOW_PAGE_LOCKS
nastaven na hodnotu OFF.
až SQL Server 2017 (14.x), přestavba seskupeného indexu columnstore je operace offline. Databázový stroj musí během obnovy získat exkluzivní zámek na stole nebo oddílu. Data jsou offline a nedostupná během přestavby, i když používáte NOLOCK
, Read-committed Snapshot Isolation (RCSI) nebo Snapshot Isolation.Počínaje SQL Server 2019 (15.x), clustered columnstore index může být přestavěn pomocí volby ONLINE = ON
.
Pro Azure Synapse Analytics (dříve Azure Synapse Analytics) tabulka s uspořádanou seskupený columnstore index, ALTER INDEX REBUILD
re-třídění dat pomocí databáze TempDB. Monitorujte TempDB během operací obnovy. Pokud potřebujete více prostoru TempDB, zvětšete datový sklad. Měřítko zpět dolů, jakmile index přestavět je kompletní.
Pro Azure Synapse Analytics (dříve Azure Synapse Analytics) tabulka s uspořádanou seskupený columnstore index, ALTER INDEX REORGANIZE
není re-sort data. Pro použití dat použijte ALTER INDEX REBUILD
.
Použití INDEX ZNOVU obnovit ze selhání hardwaru
V dřívějších verzích SQL Server, můžete někdy obnovit rowstore neclusterovaný index k nápravě nesrovnalosti způsobené selhání hardwaru.Počínaje SQL Server 2008, můžete být stále schopni opravit takové nesrovnalosti mezi indexem a clustered index přestavbou nonclustered index v režimu offline. Nicméně, nelze opravit nonclustered index nekonzistence přestavbou index on-line, protože on-line přestavět mechanismus využívá stávající neclusterovaný index jako základ pro přestavbu, a tak přetrvávat nesoulad. Obnovení indexu offline může někdy vynutit skenování seskupeného indexu (nebo haldy), a tak odstranit nekonzistenci. Chcete-li zajistit obnovení z seskupeného indexu, přetáhněte a znovu vytvořte neuzavřený index. Stejně jako u dřívějších verzí doporučujeme obnovit nekonzistence obnovením postižených dat ze zálohy; můžete však být schopni opravit nekonzistence indexu obnovením neuzavřeného indexu offline. Další informace naleznete v DBCC CHECKDB (Transact-SQL).
Viz také
- SQL Server Index Architektura a Design Guide
- Provedení Operace Online Index
- ALTER INDEX (Transact-SQL)
- Adaptivní Index Defrag
- CREATE STATISTICS (Transact-SQL)
- UPDATE STATISTICS (Transact-SQL)
- Columnstore Indexy Výkonu Dotazu
- začínáme s Columnstore pro real-time operační analytics
- Columnstore Indexy pro Datové Sklady
- Columnstore indexy a sloučení politiky pro rowgroups