ALTER INDEX (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Platform Platform System (PDW)
databáze SQL v Microsoft Fabric
Upraví existující index tabulky nebo zobrazení (rowstore, columnstore nebo XML) zakázáním, opětovným sestavením nebo opětovným uspořádáním indexu; nebo nastavením možností indexu.
Syntax
Syntaxe pro SQL Server, Azure SQL Database a Spravovanou instanci Azure SQL
ALTER INDEX { index_name | ALL } ON <object>
{
REBUILD {
[ PARTITION = ALL [ WITH ( <rebuild_index_option> [ , ...n ] ) ] ]
| [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> [ , ...n ] ) ] ]
}
| DISABLE
| REORGANIZE [ PARTITION = partition_number ] [ WITH ( <reorganize_option> ) ]
| SET ( <set_index_option> [ , ...n ] )
| RESUME [ WITH (<resumable_index_option> [ , ...n ] ) ]
| PAUSE
| ABORT
}
[ ; ]
<object> ::=
{
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
}
<rebuild_index_option> ::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = { ON | OFF }
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| STATISTICS_INCREMENTAL = { ON | OFF }
| ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
| RESUMABLE = { ON | OFF }
| MAX_DURATION = <time> [ MINUTES ]
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ] }
<single_partition_rebuild_index_option> ::=
{
SORT_IN_TEMPDB = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| RESUMABLE = { ON | OFF }
| MAX_DURATION = <time> [ MINUTES ]
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
| XML_COMPRESSION = { ON | OFF }
| ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}
<reorganize_option> ::=
{
LOB_COMPACTION = { ON | OFF }
| COMPRESS_ALL_ROW_GROUPS = { ON | OFF }
}
<set_index_option> ::=
{
ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ Minutes ] }
}
<resumable_index_option> ::=
{
MAXDOP = max_degree_of_parallelism
| MAX_DURATION = <time> [ MINUTES ]
| <low_priority_lock_wait>
}
<low_priority_lock_wait> ::=
{
WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,
ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}
Syntaxe pro Azure Synapse Analytics a Platform Platform System (PDW).
ALTER INDEX { index_name | ALL }
ON [ schema_name. ] table_name
{
REBUILD {
[ PARTITION = ALL [ WITH ( <rebuild_index_option> ) ] ]
| [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> ) ] ]
}
| DISABLE
| REORGANIZE [ PARTITION = partition_number ]
}
[ ; ]
<rebuild_index_option> ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
}
<single_partition_rebuild_index_option> ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
| XML_COMPRESSION = { ON | OFF }
}
Argumenty
index_name
Název indexu. Názvy indexů musí být jedinečné v rámci tabulky nebo zobrazení, ale nemusí být jedinečné v rámci databáze. Názvy indexů musí dodržovat pravidla identifikátorů .
VŠICHNI
Určuje všechny indexy přidružené k tabulce nebo zobrazení bez ohledu na typ indexu. Zadání ALL
způsobí selhání příkazu, pokud je jeden nebo více indexů v offline nebo jen pro čtení souborová skupina nebo zadaná operace není povolena u jednoho nebo více typů indexů. Následující tabulka uvádí operace indexu a nepovolené typy indexů.
Použití klíčového slova ALL s touto operací |
Selže, pokud tabulka obsahuje jednu nebo více |
---|---|
REBUILD WITH ONLINE = ON |
Index XML Prostorový index Index Columnstore pouze v SQL Serveru 2017 (14.x) a starších verzích. Novější verze podporují online opětovné sestavení indexů columnstore. |
REBUILD PARTITION = <partition_number> |
Index bez oddílů, index XML, prostorový index nebo zakázaný index |
REORGANIZE |
Indexy s ALLOW_PAGE_LOCKS nastaveným na OFF |
REORGANIZE PARTITION = <partition_number> |
Index bez oddílů, index XML, prostorový index nebo zakázaný index |
IGNORE_DUP_KEY = ON |
Index XML Prostorový index Index columnstore 1 |
ONLINE = ON |
Index XML Prostorový index Index columnstore 1 |
RESUMABLE = ON |
Obnovení indexů, které nejsou podporovány klíčovým slovem ALL |
Pokud je ALL
zadána pomocí PARTITION = <partition_number>
, musí být všechny indexy zarovnané. To znamená, že jsou rozdělené na základě ekvivalentních funkcí oddílů. Použití ALL
s PARTITION
způsobí, že se všechny oddíly indexu se stejnými <partition_number>
znovu sestaví nebo přeuspořádá. Další informace o dělených indexech najdete v tématu Dělené tabulky a indexy.
Další informace o online indexovacích operacích naleznete v tématu Pokyny pro online indexovací operace.
database_name
Název databáze.
schema_name
Název schématu, do kterého patří tabulka nebo zobrazení.
table_or_view_name
Název tabulky nebo zobrazení přidružené k indexu Chcete-li zobrazit podrobnosti indexu pro tabulku nebo zobrazení, použijte sys.indexes zobrazení katalogu.
Azure SQL Database podporuje formát třídílných názvů <database_name>.<schema_name>.<object_name>
, pokud je <database_name>
aktuálním názvem databáze, nebo <database_name>
tempdb
a <object_name>
začíná #
nebo ##
. Pokud je název schématu dbo
, můžete <schema_name>
vynechat.
REBUILD [ WITH ( <rebuild_index_option> [ ,... n ] ]
platí pro: SQL Server 2012 (11.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Určuje, že index je znovu sestaven pomocí stejných sloupců, typu indexu, atributu jedinečnosti a pořadí řazení.
REBUILD
povolí zakázaný index. Opětovné sestavení clusterovaného indexu nepřebuduje přidružené neclusterované indexy, pokud není zadané klíčové slovo ALL
. Pokud nejsou zadány možnosti indexu, použijí se existující hodnoty možností indexu v sys.indexes. Pro libovolnou možnost indexu, jejíž hodnota se v sys.indexes
nezobrazí, výchozí hodnota uvedená v definici argumentu této možnosti.
Pokud je zadán ALL
a podkladová tabulka je haldou, operace opětovného sestavení nemá na haldu žádný vliv. Všechny neclusterované indexy přidružené k tabulce se znovu sestaví.
Operace REBUILD
může být minimálně protokolována, pokud je model obnovení databáze hromadně protokolovaný nebo jednoduchý.
Při opětovném sestavení primárního indexu XML není podkladová tabulka uživatele k dispozici po dobu trvání operace indexu.
U indexů columnstore operace opětovného sestavení:
- Překomprimuje všechna data do columnstore. Během probíhající operace opětovného sestavení existují dvě kopie indexu columnstore. Po dokončení opětovného sestavení databázový stroj odstraní původní index columnstore.
- Nezachová pořadí řazení, pokud existuje. Pokud chcete znovu sestavit index columnstore a zachovat nebo zavést pořadí řazení, použijte příkaz
CREATE [CLUSTERED] COLUMNSTORE INDEX ... ORDER (...) ... WITH (DROP_EXISTING = ON)
.
Další informace najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
ODDÍL
Určuje, že se znovu sestaví nebo přeorganizuje pouze jeden oddíl indexu.
PARTITION
nelze zadat, pokud index_name není dělený index.
PARTITION = ALL
znovu sestaví všechny oddíly.
Varování
Vytváření a opětovné sestavení nerovnaných indexů v tabulce s více než 1 000 oddíly je možné, ale nepodporuje se. To může způsobit snížení výkonu nebo nadměrné využití paměti během těchto operací. Microsoft doporučuje používat pouze zarovnané indexy, pokud počet oddílů překročí 1 000.
partition_number
Číslo oddílu děleného indexu, který se má znovu vytvořit nebo znovu uspořádat. partition_number je konstantní výraz, který může odkazovat na proměnné. Patří sem proměnné typu definované uživatelem nebo funkce a uživatelem definované funkce, ale nemůžou odkazovat na příkaz Transact-SQL. partition_number musí existovat nebo příkaz selže.
WITH (<single_partition_rebuild_index_option>)
SORT_IN_TEMPDB
,MAXDOP
,DATA_COMPRESSION
aXML_COMPRESSION
jsou možnosti, které je možné zadat při opětovném sestavení jednoho oddílu pomocí syntaxe(PARTITION = partition_number)
. Indexy XML nelze zadat v rámci jedné operace opětovného sestavení oddílu.
VYPNOUT
Označí index jako zakázaný a nedostupný pro použití databázovým strojem. Jakýkoli index je možné zakázat. Definice indexu zakázaného indexu zůstává v systémovém katalogu bez podkladových dat indexu. Zakázáním clusterovaného indexu zabráníte přístupu uživatelů k podkladovým datům tabulky. K povolení indexu použijte ALTER INDEX REBUILD
nebo CREATE INDEX WITH DROP_EXISTING
. Další informace najdete v tématu Zakázání indexů a omezení a Povolení indexů a omezení.
REORGANIZE indexu rowstore
U indexů rowstore REORGANIZE
určuje, že se má změnit uspořádání úrovně listu indexu. Operace REORGANIZE
je:
- Vždy se provádělo online. To znamená, že dlouhodobé blokující zámky tabulek se neuchovávají a dotazy nebo aktualizace dat v podkladové tabulce můžou během
ALTER INDEX REORGANIZE
transakce pokračovat. - Pro zakázaný index není povolený.
- Není povoleno, pokud je
ALLOW_PAGE_LOCKS
nastavena naOFF
. - Při provádění transakce se nevrátí zpět a transakce se vrátí zpět.
Poznámka
Pokud ALTER INDEX REORGANIZE
používá explicitní transakce (například ALTER INDEX
uvnitř BEGIN TRAN ... COMMIT/ROLLBACK
) místo výchozího implicitního režimu transakce, chování uzamčení REORGANIZE
se stává více omezující, což může způsobit blokování. Další informace o implicitních transakcích naleznete v tématu SET IMPLICIT_TRANSACTIONS.
Další informace najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
REORGANIZE WITH ( LOB_COMPACTION = { ON | OFF } )
Platí pro indexy rowstore.
NA
- Určuje komprimovat všechny stránky obsahující data těchto velkých datových typů lob: obrázek, textové, ntext, varchar(max), nvarchar(max), varbinary(max)a xml. Komprimace těchto dat může snížit velikost dat na disku.
- U clusterovaného indexu se komprimují všechny sloupce LOB obsažené v tabulce.
- U neclusterovaného indexu to zkomprimuje všechny sloupce LOB, které jsou v indexu bezklíčové (zahrnuté) sloupce.
-
REORGANIZE ALL
pro všechny indexy provádí komprimace LOB. Pro každý index to zkomprimuje všechny sloupce LOB v clusterovém indexu, podkladové tabulce nebo zahrnuté sloupce v neclusterovaného indexu.
PRYČ
- Stránky, které obsahují velká data objektů, nejsou komprimované.
- Funkce OFF nemá žádný vliv na haldu.
REORGANIZE index columnstore
U indexů columnstore REORGANIZE
zkomprimuje každou uzavřenou skupinu řádků delta do columnstore jako komprimovanou skupinu řádků. Operace REORGANIZE
se provádí vždy online. To znamená, že dlouhodobé blokující zámky tabulek se neuchovávají a dotazy nebo aktualizace podkladové tabulky můžou během ALTER INDEX REORGANIZE
transakce pokračovat.
Další informace najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
-
REORGANIZE
není potřeba, aby bylo možné přesunout uzavřené rozdílové skupiny řádků do komprimovaných skupin řádků. Proces přesunu řazené kolekce členů na pozadí (TM) se pravidelně probouzí, aby se komprimovala uzavřená rozdílová seskupení řádků. Doporučujeme použítREORGANIZE
, když se řazená kolekce členů zapadá.REORGANIZE
může komprimovat skupiny řádků agresivněji. - Pokud chcete zkomprimovat všechna otevřená a uzavřená seskupení řádků, přečtěte si REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS).
U indexů columnstore v SQL Serveru 2016 (13.x) a novějších verzích, Azure SQL Database a Azure SQL Managed Instance REORGANIZE
provádí online následující optimalizace defragmentace:
Fyzicky odebere odstraněné řádky ze skupiny řádků, když bylo 10% nebo více řádků logicky odstraněno. Odstraněné bajty se uvolní na fyzickém médiu. Pokud má například komprimovaná skupina řádků 1 milion řádků odstraněných 100 000 řádků, databázový stroj odebere odstraněné řádky a znovu zkomprimuje skupinu řádků s 900 000 řádky.
Kombinuje jednu nebo více komprimovaných skupin řádků a zvyšuje počet řádků na skupinu řádků až do maximálního počtu 1 048 576 řádků. Pokud například hromadně importujete 5 dávek 102 400 řádků, získáte 5 komprimovaných skupin řádků. Pokud spustíte
REORGANIZE
, tyto skupiny řádků se sloučí do 1 komprimované skupiny řádků s 512 000 řádky. Předpokládá se, že neexistují žádná omezení velikosti slovníku ani paměti.U skupin řádků, ve kterých bylo 10% nebo více řádků logicky odstraněno, se databázový stroj pokusí tuto skupinu řádků zkombinovat s jednou nebo více skupinami řádků. Například skupina řádků 1 se komprimuje s 500 000 řádky a 21 se zkomprimuje s maximálně 1 048 576 řádky. Skupina řádků 21 má 60% odstraněných řádků, které ponechá 409 830 řádků. Databázový stroj upřednostňuje kombinování těchto dvou skupin řádků ke komprimaci nové skupiny řádků, která má 909 830 řádků.
REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | OFF } )
Platí pro indexy columnstore.
platí pro: SQL Server 2016 (13.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
COMPRESS_ALL_ROW_GROUPS
poskytuje způsob, jak vynutit otevření nebo zavřené rozdílové skupiny řádků do columnstore. S touto možností není nutné znovu sestavit index columnstore, aby vyprázdnil rozdílové skupiny řádků. V kombinaci s ostatními funkcemi pro odebrání a sloučení defragmentace už není nutné znovu sestavit index columnstore ve většině situací.
NA
Vynutí všechna seskupení řádků do columnstore bez ohledu na velikost a stav (uzavřená nebo otevřená).
PRYČ
Vynutí všechna uzavřená seskupení řádků do columnstore.
Další informace najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
SET ( <set_index možnost> [ ,... n ] )
Upraví možnosti indexu bez opětovného sestavení nebo změna uspořádání indexu.
SET
nelze zadat pro zakázaný index.
PAD_INDEX = { ON | VYPNUTO }
Určuje odsazení indexu. Výchozí hodnota je OFF
.
NA
Procento volného místa určeného faktorem výplně se použije na stránky indexu na střední úrovni. Pokud
FILLFACTOR
není zadán současněPAD_INDEX
je nastavena naON
, použije se hodnota vyplnit v sys.indexes.PRYČ
Zprostředkující stránky jsou vyplněné na blízkou kapacitě a dostatek místa pro alespoň jeden řádek maximální velikosti indexu může mít vzhledem k sadě klíčů na přechodných stránkách. K tomu dochází také v případě, že je
PAD_INDEX
nastavena naON
, ale není zadaný faktor výplně.
Další informace naleznete v tématu CREATE INDEX.
FILLFACTOR = fillfactor
Určuje procento, které určuje, jak by měl databázový stroj během vytváření nebo změny indexu nastavit úroveň listu každé stránky indexu. Hodnota fillfactor musí být celočíselná hodnota od 1 do 100. Výchozí hodnota je 0. Hodnoty výplňového faktoru 0 a 100 jsou ve všech ohledech stejné.
Explicitní nastavení FILLFACTOR
platí pouze při prvním vytvoření nebo vytvoření indexu. Databázový stroj dynamicky neuchová zadané procento prázdného místa na stránkách. Další informace naleznete v tématu CREATE INDEX.
Chcete-li zobrazit nastavení faktoru výplně, použijte fill_factor
v sys.indexes
.
Důležitý
Vytvoření indexu s FILLFACTOR
menší než 100 zvyšuje velikost prostoru úložiště, který data zabírá, protože databázový stroj data redistribuuje podle faktoru vyplnění při vytváření nebo opětovném sestavení indexu.
SORT_IN_TEMPDB = { ON | VYPNUTO }
Určuje, zda se mají ukládat dočasné výsledky řazení do tempdb
. Výchozí hodnota je OFF
s výjimkou hyperškálování Služby Azure SQL Database. U všech operací sestavení indexu v Hyperscale se SORT_IN_TEMPDB
vždy ON
, pokud se nepouužijí znovu použitelné sestavení indexu. U obnovovatelných sestavení indexů je SORT_IN_TEMPDB
vždy OFF
.
NA
Přechodné výsledky řazení, které se používají k sestavení indexu, jsou uloženy v
tempdb
. To může zkrátit dobu potřebnou k vytvoření indexu. Tím se ale zvýší množství místa na disku, které se použije při sestavení indexu.PRYČ
Výsledky zprostředkujícího řazení jsou uloženy ve stejné databázi jako index.
Pokud se operace řazení nevyžaduje nebo pokud je možné řazení provést v paměti, bude možnost SORT_IN_TEMPDB
ignorována.
Další informace naleznete v tématu SORT_IN_TEMPDB možnost indexů.
IGNORE_DUP_KEY = { ON | VYPNUTO }
Určuje chybovou odpověď, když se operace vložení pokusí vložit duplicitní hodnoty klíče do jedinečného indexu. Možnost IGNORE_DUP_KEY
se vztahuje pouze na operace vložení po vytvoření nebo vytvoření indexu. Výchozí hodnota je OFF
.
NA
Při vložení duplicitních hodnot klíče do jedinečného indexu dojde k upozornění. Nevloží se jenom řádky, které porušují omezení jedinečnosti.
PRYČ
Při vložení duplicitních hodnot klíče do jedinečného indexu se zobrazí chybová zpráva. Celá operace
INSERT
se vrátí zpět.
IGNORE_DUP_KEY
nelze nastavit na ON
pro indexy vytvořené v zobrazení, ne jedinečné indexy, indexy XML, prostorové indexy a filtrované indexy.
Chcete-li zobrazit nastavení IGNORE_DUP_KEY
indexu, použijte sloupec ignore_dup_key
v zobrazení katalogu sys.indexes.
V zpětně kompatibilní syntaxi je WITH IGNORE_DUP_KEY
ekvivalentní WITH IGNORE_DUP_KEY = ON
.
STATISTICS_NORECOMPUTE = { ON | VYPNUTO }
Zakažte nebo povolte možnost automatické aktualizace statistik AUTO_STATISTICS_UPDATE
pro statistiky indexu. Výchozí hodnota je OFF
.
NA
Automatické aktualizace statistik jsou po znovu sestavení indexu zakázány.
PRYČ
Automatické aktualizace statistik jsou povoleny po znovu sestavení indexu.
Pokud chcete obnovit automatickou aktualizaci statistik, nastavte STATISTICS_NORECOMPUTE
na OFF
nebo spusťte UPDATE STATISTICS
bez klauzule NORECOMPUTE
.
Varování
Pokud automatické přepočítání statistik zakážete nastavením STATISTICS_NORECOMPUTE = ON
, můžete optimalizaci dotazů zabránit v výběru optimálních plánů provádění pro dotazy zahrnující tabulku.
Nastavení STATISTICS_NORECOMPUTE
na ON
nezabrání aktualizaci statistik indexu, ke kterým dochází během operace opětovného sestavení indexu.
STATISTICS_INCREMENTAL = { ON | VYPNUTO }
platí pro: SQL Server 2014 (12.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Při ON
jsou statistiky vytvořené v indexu na statistiky oddílů. Při OFF
se stávající statistika vyřadí a databázový stroj statistiku znovu zkompiuje. Výchozí hodnota je OFF
.
Pokud statistiky jednotlivých oddílů nejsou podporované, možnost se ignoruje a vygeneruje se upozornění. Přírůstkové statistiky nejsou podporovány v následujících případech:
- Statistiky vytvořené s indexy, které nejsou v souladu se základní tabulkou
- Statistiky vytvořené v sekundárních databázích s možností čtení skupiny dostupnosti
- Statistiky vytvořené v databázích jen pro čtení
- Statistiky vytvořené pro filtrované indexy
- Statistika vytvořená v zobrazeních
- Statistiky vytvořené v interních tabulkách
- Statistiky vytvořené pomocí prostorových indexů nebo indexů XML
ONLINE = { ON | VYPNUTO }
Určuje, jestli jsou podkladové tabulky a přidružené indexy dostupné pro dotazy a úpravy dat během operace indexu. Výchozí hodnota je OFF
.
U indexu XML nebo prostorového indexu je podporován pouze ONLINE = OFF
a pokud je ONLINE
nastavena na ON
vyvolá se chyba.
Důležitý
Online indexovací operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.
NA
Dlouhodobé zámky tabulek se neuchovávají po dobu trvání operace indexu. Během hlavní fáze operace indexu se ve zdrojové tabulce uchovává pouze zámek sdíleného záměru (
IS
). To umožňuje pokračovat v dotazech nebo aktualizacích podkladové tabulky a indexů. Na začátku operace se na zdrojovém objektu nachází sdílený zámek (S
) po krátkou dobu. Na konci operace se po krátkou dobu na objekt získá sdílený zámek (S
) v případě, že se vytváří neclusterovaný index. Zámek schématu (Sch-M
) se získá při vytvoření nebo vyřazení clusterovaného indexu online a při vytvoření clusterovaného nebo neclusterovaného indexu.ONLINE
nelze nastavit naON
při vytváření indexu v místní dočasné tabulce.Poznámka
Možnost
WAIT_AT_LOW_PRIORITY
můžete použít k omezení nebo zabránění blokování během online operací indexu. Další informace najdete v tématu WAIT_AT_LOW_PRIORITY s operacemi online indexu.PRYČ
Zámky tabulek se použijí po dobu trvání operace indexu. Offline operace indexu, která vytváří, znovu sestavuje nebo zahodí clusterovaný, prostorový nebo index XML nebo znovu sestaví nebo zamkne neclusterovaný index, získá v tabulce zámek schématu (
Sch-M
). Tím zabráníte všem uživatelům přístup k podkladové tabulce po dobu trvání operace. Operace offline indexu, která vytvoří neclusterovaný index, na začátku získá sdílený zámek (S
) v tabulce. To brání úpravám definice podkladové tabulky, ale umožňuje čtení a úpravy dat v tabulce, zatímco probíhá sestavení indexu.
Další informace naleznete v tématu Provádění operací indexu online a Pokyny pro operace online indexů.
Indexy, včetně indexů v globálních dočasných tabulkách, je možné znovu sestavovat online s výjimkou následujících případů:
- Index XML
- Indexování místní dočasné tabulky
- Počáteční jedinečný clusterovaný index v zobrazení
- Zakázané clusterované indexy
- Clusterované indexy columnstore v SQL Serveru 2017 (14.x)) a starších verzích
- Neclusterované indexy columnstore v SQL Serveru 2016 (13.x)) a starších verzích
- Skupinový index, pokud podkladová tabulka obsahuje datové typy LOB (image, ntext, text) a prostorové datové typy
-
varchar(max) a varbinary(max) sloupce nemůžou být součástí indexového klíče. V SQL Serveru (počínaje SQL Serverem 2012 (11.x)) ve službě Azure SQL Database a ve službě Azure SQL Managed Instance je možné v případě, že tabulka obsahuje varchar(max) nebo varbinary(max) sloupců, je možné vytvořit nebo znovu sestavit clusterovaný index obsahující další sloupce pomocí možnosti
ONLINE
.
Další informace naleznete v tématu Jak online operace indexu fungují.
RESUMABLE = { ON | VYPNUTO}
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Určuje, jestli je operace online indexu obnovitelná.
NA
Operace indexu je obnovitelná.
PRYČ
Operace indexu není obnovitelná.
MAX_DURATION = čas [ MINUTES ] použitý s RESUMABLE = ON
(vyžaduje ONLINE = ON
)
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Určuje, jak dlouho se v celých minutách provede operace indexu, která se dá obnovit, než se pozastaví.
ALLOW_ROW_LOCKS = { ON | VYPNUTO }
Určuje, jestli jsou povolené zámky řádků. Výchozí hodnota je ON
.
NA
Zámky řádků jsou povoleny při přístupu k indexu. Databázový stroj určuje, kdy se používají zámky řádků.
PRYČ
Zámky řádků se nepoužívají.
ALLOW_PAGE_LOCKS = { ON | VYPNUTO }
Určuje, jestli jsou povolené zámky stránek. Výchozí hodnota je ON
.
NA
Zámky stránek jsou povoleny při přístupu k indexu. Databázový stroj určuje, kdy se používají zámky stránek.
PRYČ
Zámky stránek se nepoužívají.
OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | VYPNUTO }
platí pro: SQL Server 2019 (15.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Určuje, zda se má optimalizovat, aby nedocházelo k kolizím vložení poslední stránky. Výchozí hodnota je OFF
. Další informace naleznete v tématu sekvenční klíče.
MAXDOP = max_degree_of_parallelism
Přepíše maximální stupeň paralelismu možnost konfigurace pro operaci indexu. Další informace najdete v tématu Konfigurace maximálního stupně paralelismu Možnosti konfigurace serveru. Pomocí MAXDOP
omezte stupeň paralelismu a výsledné spotřeby prostředků pro operaci sestavení indexu.
I když je možnost MAXDOP
syntakticky podporovaná pro všechny indexy XML a prostorové indexy, ALTER INDEX
aktuálně používá pouze jeden procesor.
max_degree_of_parallelism může být:
1
Potlačí generování paralelního plánu.
>1
Omezuje maximální stupeň paralelismu použitý v operaci paralelního indexu na zadané číslo nebo méně na základě aktuální systémové úlohy.
0 (výchozí)
Používá stupeň paralelismu zadaný na úrovni serveru, databáze nebo skupiny úloh, pokud není omezen na základě aktuální systémové úlohy.
Další informace najdete v tématu Konfigurace paralelních operací indexu.
Poznámka
Paralelní operace indexu nejsou k dispozici v každé edici SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.
COMPRESSION_DELAY = { 0 | doba trvání [ minuty ] }
platí pro: SQL Server (počínaje SQL Serverem 2016 (13.x)), Azure SQL Database a Azure SQL Managed Instance
U tabulky založené na disku s indexem columnstore určuje minimální počet minut, po které musí rozdílová skupina řádků v uzavřeném stavu zůstat v rozdílovém úložišti, aby ho databázový stroj mohl zkomprimovat do komprimované skupiny řádků. Vzhledem k tomu, že tabulky založené na disku nesledují časy vložení a aktualizace jednotlivých řádků, databázový stroj toto zpoždění použije pouze u rozdílových skupin řádků v uzavřeném stavu.
Výchozí hodnota je 0 minut.
Doporučení, kdy použít COMPRESSION_DELAY
, najdete v tématu Začínáme se columnstorem pro provozní analýzy v reálném čase.
DATA_COMPRESSION
Určuje možnost komprese dat pro zadaný index, číslo oddílu nebo rozsah oddílů. Možnosti jsou následující:
ŽÁDNÝ
Indexované nebo zadané oddíly nejsou komprimované. To neplatí pro indexy columnstore.
VESLOVAT
Indexované nebo zadané oddíly se komprimují pomocí komprese řádků. To neplatí pro indexy columnstore.
STRÁNKA
Index nebo zadané oddíly se komprimují pomocí komprese stránky. To neplatí pro indexy columnstore.
COLUMNSTORE
platí pro: SQL Server 2014 (12.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Platí pouze pro indexy columnstore, včetně neclusterovaných indexů columnstore i clusterovaných indexů columnstore. Určení
COLUMNSTORE
odebere všechny ostatní komprese dat včetněCOLUMNSTORE_ARCHIVE
.COLUMNSTORE_ARCHIVE
platí pro: SQL Server 2014 (12.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Platí pouze pro indexy columnstore, včetně neclusterovaných indexů columnstore i clusterovaných indexů columnstore.
COLUMNSTORE_ARCHIVE
dále komprimuje zadaný oddíl na menší velikost. Můžete ho použít pro archivaci nebo v jiných situacích, které vyžadují menší velikost úložiště a mohou si dovolit více času pro ukládání a načítání.
Další informace o kompresi naleznete v tématu Komprese dat.
XML_COMPRESSION
platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Určuje možnost komprese XML pro zadaný index, který obsahuje jeden nebo více xml sloupce datového typu. Možnosti jsou následující:
NA
Indexování nebo zadané oddíly jsou komprimovány pomocí komprese XML.
PRYČ
Indexované nebo zadané oddíly nejsou komprimované.
ON PARTITIONS ( { <partition_number_expression> | rozsah <> } [ ,... n ] )
Určuje oddíly, na které se vztahují nastavení DATA_COMPRESSION
nebo XML_COMPRESSION
. Pokud index není rozdělený do oddílů, ON PARTITIONS
argument vygeneruje chybu. Pokud není klauzule ON PARTITIONS
k dispozici, použije se možnost DATA_COMPRESSION
nebo XML_COMPRESSION
pro všechny oddíly děleného indexu.
<partition_number_expression>
lze zadat následujícími způsoby:
- Zadejte číslo oddílu, například:
ON PARTITIONS (2)
. - Zadejte čísla oddílů pro několik jednotlivých oddílů oddělených čárkami, například:
ON PARTITIONS (1, 5)
. - Zadejte rozsahy i jednotlivé oddíly:
ON PARTITIONS (2, 4, 6 TO 8)
.
<range>
lze zadat jako čísla oddílů oddělená slovem TO
, například: ON PARTITIONS (6 TO 8)
.
Pokud chcete nastavit různé typy komprese dat pro různé oddíly, zadejte DATA_COMPRESSION
možnost více než jednou, například:
REBUILD WITH
(
DATA_COMPRESSION = NONE ON PARTITIONS (1),
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
);
Můžete také zadat XML_COMPRESSION
možnost více než jednou, například:
REBUILD WITH
(
XML_COMPRESSION = OFF ON PARTITIONS (1),
XML_COMPRESSION = ON ON PARTITIONS (2, 4, 6 TO 8),
XML_COMPRESSION = OFF ON PARTITIONS (3, 5)
);
POKRAČOVAT
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Obnoví operaci indexu, která je pozastavena ručně, protože je dosaženo maximální doby trvání nebo kvůli selhání.
MAX_DURATION
Určuje, jak dlouho se v celých minutách po obnovení provede operace indexu s možností obnovení, než se znovu pozastaví.
WAIT_AT_LOW_PRIORITY
Obnovení operace sestavení indexu po pozastavení musí získat potřebné zámky.
WAIT_AT_LOW_PRIORITY
označuje, že operace sestavení indexu získává zámky s nízkou prioritou, což umožňuje dalším operacím pokračovat, zatímco operace sestavení indexu čeká. Vynechání možnostiWAIT_AT_LOW_PRIORITY
odpovídáWAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)
. Další informace najdete v tématu WAIT_AT_LOW_PRIORITY.
PAUZA
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Pozastaví operaci sestavení obnovitelného indexu.
POTRATIT
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Přeruší spuštěnou nebo pozastavenou operaci sestavení indexu, která byla spuštěna jako obnovitelná. Pokud chcete ukončit operaci sestavení indexu s možností obnovení, musíte explicitně spustit příkaz ABORT
. Selhání nebo pozastavení v operaci obnovitelného indexu neukončí jeho spuštění; operace se ale ponechá v neomezeném stavu pozastavení.
Poznámky
ALTER INDEX
nelze použít k opětovnému rozdělení indexu nebo jeho přesunutí do jiné skupiny souborů. Tento příkaz nelze použít k úpravě definice indexu, jako je přidání nebo odstranění sloupců nebo změna pořadí sloupců. K provedení těchto operací použijte CREATE INDEX
s klauzulí DROP_EXISTING
.
Pokud není explicitně zadána možnost, použije se aktuální nastavení. Pokud například v klauzuli REBUILD
není zadané nastavení FILLFACTOR
, použije se během procesu opětovného sestavení hodnota faktoru uložená v systémovém katalogu. Chcete-li zobrazit aktuální nastavení možností indexu, použijte sys.indexes.
Hodnoty pro ONLINE
, MAXDOP
a SORT_IN_TEMPDB
nejsou uloženy v systémovém katalogu. Pokud není v příkazu indexu zadána, použije se výchozí hodnota možnosti.
Na počítačích s více procesory, stejně jako u jiných dotazů, ALTER INDEX REBUILD
automaticky používá více procesorů k provádění operací prohledávání a řazení přidružených k úpravě indexu. Naopak ALTER INDEX REORGANIZE
je jedna operace s vlákny. Další informace najdete v tématu Konfigurace paralelních operací indexu.
V databázi SQL v Microsoft Fabric se ALTER INDEX ALL
nepodporuje, ale ALTER INDEX <index name>
je.
Opětovné sestavení indexů
Opětovné sestavení indexu se zahodí a znovu vytvoří index. Tím se odstraní fragmentace, uvolní se místo na disku tím, že zkomprimuje stránky na základě zadaného nebo existujícího nastavení faktoru výplně a změní pořadí řádků indexu v souvislých stránkách. Při ALL
je zadán, všechny indexy v tabulce jsou vyřazeny a znovu sestaveny v jedné transakci. Omezení cizího klíče nemusí být vyřazena předem. Když se znovu sestaví indexy s rozsahy 128 nebo více, databázový stroj odblokuje skutečné přidělení stránky a jejich přidružené zámky, dokud transakce potvrzení. Další informace naleznete v tématu Deferred deallocation.
Další informace najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
Změna uspořádání indexů
Změna uspořádání indexu používá minimální systémové prostředky. Defragmentuje úroveň listu clusterovaných a neclusterovaných indexů v tabulkách a zobrazeních tím, že fyzicky změní pořadí stránek na úrovni listu tak, aby odpovídaly logickému, zleva doprava, pořadí uzlů typu list. Změna uspořádání zkomprimuje také indexové stránky. Komprimace je založena na existující hodnotě faktoru výplně.
Při zadání ALL
se relační indexy, clusterované i neclusterované a indexy XML v tabulce přeuspořádají. Některá omezení použít při zadávání ALL
.
Další informace najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
Poznámka
U tabulky s uspořádaným indexem columnstore ALTER INDEX REORGANIZE
data neřadí znovu. Pokud chcete data použít ALTER INDEX REBUILD
.
Zakázání indexů
Zakázáním indexu zabráníte přístupu uživatelů k indexu a pro clusterované indexy k podkladovým tabulkovým datům. Definice indexu zůstává v systémovém katalogu. Zakázání neclusterovaného indexu nebo clusterovaného indexu v zobrazení fyzicky odstraní data indexu. Zakázáním clusterovaného indexu zabráníte přístupu k datům, ale data zůstanou ve stromu B nezachovaná, dokud se index nepřeřadí nebo znovu nevystaví. Pokud chcete zjistit, jestli je index zakázaný, použijte sloupec is_disabled
v zobrazení katalogu sys.indexes
.
Poznámka
Dokumentace používá termín B-tree obecně v odkazu na indexy. V indexech rowstore databázový stroj implementuje strom B+. To neplatí pro indexy columnstore ani indexy v tabulkách optimalizovaných pro paměť. Další informace najdete v SQL Serveru a architektuře indexu Azure SQL a průvodci návrhem.
Pokud je tabulka v publikaci transakční replikace, nemůžete zakázat index přidružený k omezení primárního klíče. Tyto indexy jsou vyžadovány replikací. Chcete-li takový index zakázat, je nutné nejprve odstranit tabulku z publikace. Další informace najdete v tématu Publikování dat a databázových objektů.
K povolení indexu použijte příkaz ALTER INDEX REBUILD
nebo příkaz CREATE INDEX WITH DROP_EXISTING
. Opětovné sestavení zakázaného clusterovaného indexu nejde provést s možností ONLINE
nastavenou na ON
. Další informace najdete v tématu Zakázání indexů a omezení.
Nastavení možností
Můžete nastavit možnosti ALLOW_ROW_LOCKS
, ALLOW_PAGE_LOCKS
, OPTIMIZE_FOR_SEQUENTIAL_KEY
, IGNORE_DUP_KEY
a STATISTICS_NORECOMPUTE
pro zadaný index bez opětovného sestavení nebo změna uspořádání tohoto indexu. Změněné hodnoty se okamžitě použijí na index. Chcete-li zobrazit tato nastavení, použijte sys.indexes
. Další informace naleznete v tématu Nastavení možností indexu.
Možnosti zámků řádků a stránek
Když ALLOW_ROW_LOCKS = ON
a ALLOW_PAGE_LOCK = ON
, budou při přístupu k indexu povoleny zámky na úrovni řádků, stránek a tabulek. Databázový stroj zvolí příslušný zámek a může zámek eskalovat z řádku nebo zámku stránky na zámek tabulky.
Při ALLOW_ROW_LOCKS = OFF
a ALLOW_PAGE_LOCK = OFF
se při přístupu k indexu povolí pouze zámek na úrovni tabulky.
Pokud je při nastavení možností uzamčení řádku nebo stránky zadán ALL
, použijí se nastavení pro všechny indexy. Pokud je podkladovou tabulkou halda, použijí se nastavení následujícími způsoby:
Možnost | Platí pro |
---|---|
ALLOW_ROW_LOCKS = ON nebo OFF |
Halda a všechny přidružené neclusterované indexy. |
ALLOW_PAGE_LOCKS = ON |
Halda a všechny přidružené neclusterované indexy. |
ALLOW_PAGE_LOCKS = OFF |
Neclusterované indexy, kde nejsou povolené všechny zámky stránek. Pro haldu nejsou povoleny pouze sdílené (S ), aktualizace (U ) a výhradní zámky stránek (X ). Databázový stroj může i nadále získávat zámky stránek záměru (IS , IU nebo IX ) pro interní účely. |
Varování
Nedoporučuje se zakázat uzamčení řádků nebo stránek v indexu. Můžou nastat problémy související s souběžností a některé funkce můžou být nedostupné. Například index nelze změnit uspořádání, pokud je ALLOW_PAGE_LOCKS
nastavena na OFF
.
Online indexovací operace
Při opětovném sestavení indexu a možnost ONLINE
je nastavena na ON
, data v indexu, přidružená tabulka a další indexy ve stejné tabulce jsou k dispozici pro dotazy a úpravy. Můžete také znovu sestavit online část indexu, která se nachází v jednom oddílu. Exkluzivní zámky tabulek se uchovávají jen na krátkou dobu na konci opětovného sestavení indexu.
Změna uspořádání indexu se provádí vždy online. Proces uchovává zámky pouze po krátkou dobu a pravděpodobně neblokuje dotazy nebo aktualizace.
Souběžné online indexovací operace můžete provádět ve stejné tabulce nebo oddílu tabulky pouze v následujících operacích:
- Vytváření více neclusterovaných indexů
- Změna uspořádání různých indexů ve stejné tabulce
- Změna uspořádání různých indexů při opětovném sestavení nepřekryvných indexů ve stejné tabulce
Všechny ostatní online indexovací operace prováděné ve stejnou dobu selžou. Nemůžete například současně vytvořit dva nebo více indexů ve stejné tabulce nebo vytvořit nový index při opětovném sestavení existujícího indexu ve stejné tabulce.
Další informace naleznete v tématu Provádění operací indexu online.
Operace indexu s možností obnovení
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Opětovné sestavení online indexu můžete obnovit. To znamená, že opětovné sestavení indexu lze zastavit a později restartovat z místa, kde se zastavilo. Pokud chcete znovu spustit opětovné sestavení indexu, zadejte možnost RESUMABLE = ON
.
Následující pokyny platí pro obnovení operací indexu:
- Pokud chcete použít možnost
RESUMABLE
, musíte také použít možnostONLINE
. - Možnost
RESUMABLE
se neuchovává v metadatech daného indexu a vztahuje se pouze na dobu trvání aktuálního příkazu DDL. Proto musí být klauzuleRESUMABLE = ON
zadána explicitně, aby bylo možné obnovitelnost. - Možnost
MAX_DURATION
lze zadat ve dvou kontextech:-
MAX_DURATION
pro možnostRESUMABLE
určuje časový interval sestavení indexu. Po uplynutí této doby je sestavení indexu stále spuštěné, je pozastaveno. Rozhodnete se, kdy bude možné obnovit sestavení pozastaveného indexu. Doba v minutách proMAX_DURATION
musí být větší než 0 minut a menší než nebo rovna jednomu týdnu (7 * 24 * 60 = 10080 minut). Dlouhé pozastavení operace indexu může výrazně ovlivnit výkon DML na konkrétní tabulce i kapacitu disku databáze, protože původní index i nově vytvořený index vyžadují místo na disku a musí být aktualizovány operacemi DML. Pokud neníMAX_DURATION
možnost vynechána, operace indexu pokračuje, dokud nedojde k dokončení nebo dokud nedojde k selhání. -
MAX_DURATION
pro možnostWAIT_AT_LOW_PRIORITY
určuje dobu čekání pomocí zámků s nízkou prioritou, pokud je operace indexu zablokovaná, před provedením akce. Další informace najdete v tématu WAIT_AT_LOW_PRIORITY s operacemi online indexu.
-
- Pokud chcete operaci indexu pozastavit okamžitě, můžete spustit příkaz
ALTER INDEX PAUSE
nebo spustit příkazKILL <session_id>
. - Opětovné spuštění původního příkazu
ALTER INDEX REBUILD
se stejnými parametry obnoví pozastavenou operaci opětovného sestavení indexu. Můžete také obnovit pozastavenou operaci opětovného sestavení indexu spuštěním příkazuALTER INDEX RESUME
. - Příkaz
ABORT
ukonče relaci, na které běží sestavení indexu, a zruší operaci indexu. Operaci indexu, která byla přerušena, nelze obnovit. - Při obnovení operace opětovného sestavení indexu, která je pozastavena, můžete změnit
MAXDOP
hodnotu na novou hodnotu. PokudMAXDOP
není při obnovení pozastavené operace indexu zadána, použije se hodnotaMAXDOP
použitá pro poslední obnovení. Pokud není pro operaci opětovného sestavení indexu vůbec zadána možnostMAXDOP
, použije se výchozí hodnota.
Obnovitelná operace indexu se spustí, dokud se nedokončí, pozastaví nebo selže. V případě pozastavení operace se zobrazí chyba, která značí, že operace byla pozastavena a že opětovné sestavení indexu nebylo dokončeno. V případě selhání operace se také zobrazí chyba.
Pokud chcete zjistit, jestli se operace indexu provádí jako obnovitelná operace a chcete zkontrolovat její aktuální stav spuštění, použijte zobrazení katalogu sys.index_resumable_operations.
Prostředky
Pro operace s obnovitelným indexem jsou vyžadovány následující prostředky:
- Další místo potřebné k zachování sestavení indexu, včetně času pozastavení sestavení.
- Další propustnost protokolu během fáze řazení. Celkové využití prostoru protokolu pro obnovitelný index je menší než běžné opětovné sestavení indexu online a umožňuje zkrácení protokolu během této operace.
- Příkazy DDL, které se pokoušejí upravit index, který se znovu sestavuje, nebo související tabulku, zatímco operace indexu je pozastavena, nejsou povoleny.
- Čištění duchů je v indexu v buildu blokováno po dobu trvání operace, a to jak během pozastavení, tak i v době, kdy je operace spuštěná.
- Pokud tabulka obsahuje sloupce LOB, vyžaduje opětovné sestavení clusterovaného indexu na začátku operace zámek schématu (
Sch-M
).
Aktuální funkční omezení
Operace opětovného sestavení indexu mají následující omezení:
- Možnost
SORT_IN_TEMPDB = ON
není podporovaná pro operace s obnovitelným indexem. - Příkaz DDL s
RESUMABLE = ON
nelze spustit uvnitř explicitní transakce. - Nelze vytvořit obnovitelný index, který obsahuje:
- Vypočítané nebo časové razítko/rowversion sloupce jako klíčové sloupce.
- Obchodní sloupec jako zahrnutý sloupec.
- Operace indexu s možností obnovení nejsou podporovány pro:
- Příkaz
ALTER INDEX REBUILD ALL
- Příkaz
ALTER TABLE REBUILD
- Indexy columnstore
- Filtrované indexy
- Zakázané indexy
- Příkaz
WAIT_AT_LOW_PRIORITY s online indexovacími operacemi
platí pro: SQL Server 2014 (12.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Pokud nepoužíváte možnost WAIT_AT_LOW_PRIORITY
, musí se dokončit všechny aktivní blokující transakce držící zámky v tabulce nebo indexu, aby se operace opětovného sestavení indexu spustila a dokončila. Po spuštění operace online indexu a před jejím dokončením musí získat sdílenou (S
) nebo změnu schématu (Sch-M
) uzamknout v tabulce a po krátkou dobu ji podržet. I když se zámek uchovává jen na krátkou dobu, může výrazně ovlivnit propustnost úloh, zvýšit latenci dotazů nebo způsobit vypršení časového limitu provádění.
Abyste se těmto problémům vyhnuli, možnost WAIT_AT_LOW_PRIORITY
umožňuje spravovat chování S
nebo Sch-M
zámky vyžadované pro spuštění a dokončení online indexovací operace výběrem ze tří možností. Ve všech případech, pokud během doby čekání určené MAX_DURATION = n [minutes]
neexistuje žádné blokování, které zahrnuje operaci indexu, operace indexu okamžitě pokračuje.
WAIT_AT_LOW_PRIORITY
čeká operace online indexu pomocí zámků s nízkou prioritou, což umožňuje dalším operacím, které používají normální zámky s prioritou, pokračovat do té doby. Vynechání možnosti WAIT_AT_LOW_PRIORITY
odpovídá WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)
.
MAX_DURATION
=
čas [MINUTES
]
Doba čekání (celočíselná hodnota zadaná v minutách), kterou operace online indexu čeká pomocí zámků s nízkou prioritou. Pokud je operace zablokovaná pro MAX_DURATION
čas, provede se zadaná ABORT_AFTER_WAIT
akce.
MAX_DURATION
čas je vždy v minutách a slovo MINUTES
je možné vynechat.
ABORT_AFTER_WAIT
= [NONE
| SELF
| BLOCKERS
]
-
NONE
: Pokračujte v čekání na zámek s normální prioritou. -
SELF
: Ukončete aktuálně spuštěnou online operaci indexu, aniž byste provedli žádnou akci. MožnostSELF
nelze použít, pokud jeMAX_DURATION
0. -
BLOCKERS
: Ukončete všechny uživatelské transakce, které blokují operaci online indexu, aby operace mohl pokračovat. MožnostBLOCKERS
vyžaduje, aby objekt zabezpečení spouštěný příkazemCREATE INDEX
neboALTER INDEX
měl oprávněníALTER ANY CONNECTION
.
Pomocí následujících rozšířených událostí můžete monitorovat operace indexu, které čekají na zámky s nízkou prioritou:
lock_request_priority_state
process_killed_by_abort_blockers
ddl_with_wait_at_low_priority
Omezení prostorového indexu
Při opětovném sestavení prostorového indexu není podkladová uživatelská tabulka během operace indexu k dispozici.
Omezení PRIMARY KEY
v tabulce uživatele nelze upravit, když je v daném sloupci tabulky definovaný prostorový index. Pokud chcete změnit omezení PRIMARY KEY
, nejprve odstraňte každý prostorový index tabulky. Po úpravě omezení PRIMARY KEY
můžete znovu vytvořit každý prostorový index.
V rámci operace opětovného sestavení jednoho oddílu nemůžete zadat žádné prostorové indexy. V opětovném sestavení tabulky však můžete zadat prostorové indexy.
Pokud chcete změnit možnosti specifické pro prostorový index, například BOUNDING_BOX
nebo GRID
, můžete použít příkaz CREATE SPATIAL INDEX
, který určuje DROP_EXISTING = ON
, nebo vypustit prostorový index a vytvořit nový. Příklad najdete v tématu CREATE SPATIAL INDEX.
Komprese dat
Další informace o kompresi dat naleznete v tématu Komprese dat.
Tady jsou klíčové body, které je potřeba vzít v úvahu v kontextu operací sestavení indexu při použití komprese dat:
- Komprese umožňuje ukládání více řádků na stránce, ale nemění maximální velikost řádku.
- Jiné než listové stránky indexu nejsou komprimované, ale dají se komprimovat řádky.
- Každý neclusterovaný index má individuální nastavení komprese a nedědí nastavení komprese podkladové tabulky.
- Při vytvoření clusterovaného indexu v haldě clusterovaný index zdědí stav komprese haldy, pokud není zadán alternativní stav komprese.
Při opětovném sestavení dělených indexů platí následující aspekty:
- Pokud tabulka obsahuje nerovné indexy, nemůžete změnit nastavení komprese jednoho oddílu.
- Syntaxe
ALTER INDEX <index> ... REBUILD PARTITION ... WITH DATA_COMPRESSION = ...
znovu sestaví zadaný oddíl indexu se zadanou možností komprese. Pokud je klauzuleWITH DATA_COMPRESSION
vynechána, použije se existující možnost komprese. - Syntaxe
ALTER INDEX <index> ... REBUILD PARTITION = ALL
znovu sestaví všechny oddíly indexu pomocí existujících možností komprese. - Syntaxe
ALTER INDEX <index> ... REBUILD PARTITION = ALL (WITH ...)
znovu sestaví všechny oddíly indexu. Pomocí klauzuleDATA_COMPRESSION = ... ON PARTITIONS ( ...)
můžete zvolit jinou kompresi pro různé oddíly.
Pokud chcete vyhodnotit, jak změna PAGE
a ROW
komprese ovlivňuje tabulku, index nebo oddíl, použijte sp_estimate_data_compression_savings uloženou proceduru.
Statistika
Při opětovném sestavení indexu se statistiky indexu aktualizují úplným prohledáváním nedělených indexů a výchozím poměrem vzorkování pro dělené indexy. Žádné další statistiky v tabulce se neaktualizují jako součást opětovného sestavení indexu.
Dovolení
Vyžaduje se oprávnění ALTER
v tabulce nebo zobrazení.
Poznámky k verzi
- Azure SQL Database nepodporuje jiné skupiny souborů než
PRIMARY
. - Azure SQL Database a Azure SQL Managed Instance nepodporují možnosti
FILESTREAM
. - Indexy columnstore nejsou k dispozici před SQL Serverem 2012 (11.x).
- Operace obnovení indexu jsou dostupné v SQL Serveru 2017 (14.x) a novějších verzích, Azure SQL Database a Azure SQL Managed Instance.
Příklad základní syntaxe
ALTER INDEX index1 ON table1 REBUILD;
ALTER INDEX ALL ON table1 REBUILD;
ALTER INDEX ALL ON dbo.table1 REBUILD;
Příklady: Indexy Columnstore
Tyto příklady platí pro indexy columnstore.
A. ReORGANIZE demo
Tento příklad ukazuje, jak funguje příkaz ALTER INDEX REORGANIZE
. Vytvoří tabulku s více skupinami řádků a pak ukazuje, jak REORGANIZE
sloučí skupiny řádků.
-- Create a database
CREATE DATABASE [columnstore];
GO
-- Create a rowstore staging table
CREATE TABLE [staging] (
AccountKey INT NOT NULL,
AccountDescription NVARCHAR(50),
AccountType NVARCHAR(50),
AccountCodeAlternateKey INT
);
-- Insert 10 million rows into the staging table.
DECLARE @loop INT;
DECLARE @AccountDescription VARCHAR(50);
DECLARE @AccountKey INT;
DECLARE @AccountType VARCHAR(50);
DECLARE @AccountCode INT;
SELECT @loop = 0
BEGIN TRANSACTION
WHILE (@loop < 300000)
BEGIN
SELECT @AccountKey = CAST(RAND() * 10000000 AS INT);
SELECT @AccountDescription = 'accountdesc ' + CONVERT(VARCHAR(20), @AccountKey);
SELECT @AccountType = 'AccountType ' + CONVERT(VARCHAR(20), @AccountKey);
SELECT @AccountCode = CAST(RAND() * 10000000 AS INT);
INSERT INTO staging
VALUES (
@AccountKey,
@AccountDescription,
@AccountType,
@AccountCode
);
SELECT @loop = @loop + 1;
END
COMMIT
-- Create a table for the clustered columnstore index
CREATE TABLE cci_target (
AccountKey INT NOT NULL,
AccountDescription NVARCHAR(50),
AccountType NVARCHAR(50),
AccountCodeAlternateKey INT
);
-- Convert the table to a clustered columnstore index named inxcci_cci_target;
CREATE CLUSTERED COLUMNSTORE INDEX idxcci_cci_target ON cci_target;
Pomocí možnosti TABLOCK můžete vložit řádky paralelně. Počínaje SQL Serverem 2016 (13.x) může operace INSERT INTO
běžet paralelně při použití TABLOCK
.
INSERT INTO cci_target WITH (TABLOCK)
SELECT TOP 300000 * FROM staging;
Spuštěním tohoto příkazu zobrazte skupiny řádků OPEN
delta. Počet skupin řádků závisí na stupni paralelismu.
SELECT *
FROM sys.dm_db_column_store_row_group_physical_stats
WHERE object_id = object_id('cci_target');
Spuštěním tohoto příkazu vynutíte všechny CLOSED
a OPEN
skupiny řádků do columnstore.
ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);
Spusťte tento příkaz znovu a uvidíte, že menší skupiny řádků se sloučí do jedné komprimované skupiny řádků.
ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);
B. Komprese uzavřených rozdílových skupin řádků do columnstore
Tento příklad používá možnost REORGANIZE
ke komprimaci každé CLOSED
delta skupiny řádků do columnstore jako komprimované skupiny řádků. To není nutné, ale je užitečné, když řazená kolekce členů není komprimace CLOSED
skupiny řádků dostatečně rychlá.
V ukázkové databázi AdventureWorksDW2022
můžete spustit oba příklady.
Tato ukázka spustí REORGANIZE
ve všech oddílech.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;
Tato ukázka spustí REORGANIZE
v určitém oddílu.
-- REORGANIZE a specific partition
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0;
C. Komprese všech skupin řádků OPEN AND CLOSED do columnstore
platí pro: SQL Server 2016 (13.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Příkaz REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON)
zkomprimuje každou OPEN
a CLOSED
delta rowgroup do columnstore jako komprimovanou skupinu řádků. Tím se deltastore vyprázdní a vynutí všechny řádky, aby se zkomprimovaly do columnstore. To je užitečné zejména po provedení mnoha operací vložení, protože tyto operace ukládají řádky do jedné nebo více rozdílových skupin řádků.
REORGANIZE
zkombinuje seskupení řádků do maximálního počtu řádků <= 1 024 576. Proto když komprimujete všechny OPEN
a CLOSED
skupiny řádků, nebudete mít na konci velké množství komprimovaných skupin řádků, které v nich mají jenom několik řádků. Chcete, aby byly skupiny řádků co nejplnější, aby se snížila komprimovaná velikost a zlepšil výkon dotazů.
Následující příklady používají databázi AdventureWorksDW2022
.
Tento příklad přesune všechny OPEN
a CLOSED
delta skupiny řádků do indexu columnstore.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);
Tento příklad přesune všechny OPEN
a CLOSED
rozdílové skupiny řádků do indexu columnstore pro konkrétní oddíl.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0 WITH (COMPRESS_ALL_ROW_GROUPS = ON);
D. Defragmentace indexu columnstore online
Neplatí pro: SQL Server 2012 (11.x) a SQL Server 2014 (12.x).
Počínaje SQL Serverem 2016 (13.x) REORGANIZE
více než komprimuje rozdílové skupiny řádků do columnstore. Provádí také online defragmentaci. Nejprve zmenšuje velikost columnstore tím, že fyzicky odebere odstraněné řádky, když bylo odstraněno 10% nebo více řádků ve skupině řádků. Potom zkombinuje seskupení řádků a vytvoří větší skupiny řádků, které mají maximálně 1 024 576 řádků na skupinu řádků. Všechny skupiny řádků, které se změnily, se znovu zkomprimují.
Poznámka
Počínaje SQL Serverem 2016 (13.x) už není opětovné sestavení indexu columnstore ve většině situací nutné, protože REORGANIZE
fyzicky odebere odstraněné řádky a slučuje skupiny řádků. Možnost COMPRESS_ALL_ROW_GROUPS
vynutí všechny OPEN
nebo CLOSED
rozdílové skupiny řádků do columnstore, které bylo možné provést pouze při opětovném sestavení.
REORGANIZE
je online a dochází na pozadí, aby dotazy mohly pokračovat v průběhu operace.
Následující příklad provede REORGANIZE
defragmentace indexu fyzicky odebráním řádků, které byly logicky odstraněny z tabulky, a sloučením skupin řádků.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;
E. Opětovné sestavení clusterovaného indexu columnstore offline
Platí pro: SQL Server, Azure SQL Database a Azure SQL Managed Instance
Spropitné
Počínaje SQL Serverem 2016 (13.x) a v Azure SQL Database doporučujeme místo ALTER INDEX REBUILD
použít ALTER INDEX REORGANIZE
pro indexy columnstore.
Poznámka
V SYSTÉMU SQL Server 2012 (11.x) a SQL Server 2014 (12.x) se REORGANIZE
používá pouze ke komprimaci CLOSED
skupin řádků do columnstore. Jediným způsobem, jak provádět operace defragmentace a vynutit všechny rozdílové skupiny řádků do columnstore, je opětovné sestavení indexu.
Tento příklad ukazuje, jak znovu sestavit clusterovaný index columnstore a vynutit všechny rozdílové skupiny řádků do columnstore. Tento první krok připraví tabulku FactInternetSales2
v databázi AdventureWorksDW2022
s clusterovaným indexem columnstore a vloží data z prvních čtyř sloupců.
CREATE TABLE dbo.FactInternetSales2 (
ProductKey [int] NOT NULL,
OrderDateKey [int] NOT NULL,
DueDateKey [int] NOT NULL,
ShipDateKey [int] NOT NULL);
CREATE CLUSTERED COLUMNSTORE INDEX cci_FactInternetSales2
ON dbo.FactInternetSales2;
INSERT INTO dbo.FactInternetSales2
SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey
FROM dbo.FactInternetSales;
SELECT * FROM sys.column_store_row_groups;
Výsledky zobrazují jednu OPEN
skupinu řádků, což znamená, že SQL Server čeká na přidání dalších řádků, než zavře skupinu řádků a přesune data do columnstore. Tento další příkaz znovu sestaví clusterovaný index columnstore, který vynutí všechny řádky do columnstore.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;
SELECT * FROM sys.column_store_row_groups;
Výsledky příkazu SELECT
ukazují, že skupina řádků je COMPRESSED
, což znamená, že segmenty sloupců skupiny řádků jsou teď komprimované a uložené v úložišti sloupců.
F. Opětovné sestavení oddílu clusterovaného indexu columnstore offline
platí pro: SQL Server 2012 (11.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Pokud chcete znovu sestavit oddíl velkého clusterovaného indexu columnstore, použijte ALTER INDEX REBUILD
s možností oddílu. Tento příklad znovu sestaví oddíl 12. Počínaje SQL Serverem 2016 (13.x) doporučujeme nahradit REBUILD
REORGANIZE
.
ALTER INDEX cci_fact3
ON fact3
REBUILD PARTITION = 12;
G. Změna clusterovaného indexu columnstore tak, aby používal archivační kompresi
neplatí pro: SQL Server 2012 (11.x)
Velikost clusterovaného indexu columnstore můžete zmenšit ještě dál pomocí možnosti komprese dat COLUMNSTORE_ARCHIVE
. To je praktické pro starší data, která chcete zachovat na levnějším úložišti. Doporučujeme použít pouze data, která nejsou často přístupná, protože dekomprese je pomalejší než u normální komprese COLUMNSTORE
.
Následující příklad znovu sestaví clusterovaný index columnstore tak, aby používal archivální kompresi, a pak ukazuje, jak odebrat archivní kompresi. Konečný výsledek používá pouze kompresi columnstore.
Nejprve připravte příklad vytvořením tabulky s clusterovaným indexem columnstore. Pak tabulku dále zkomprimujte pomocí archivační komprese.
--Prepare the example by creating a table with a clustered columnstore index.
CREATE TABLE SimpleTable (
ProductKey [int] NOT NULL,
OrderDateKey [int] NOT NULL,
DueDateKey [int] NOT NULL,
ShipDateKey [int] NOT NULL
);
CREATE CLUSTERED INDEX cci_SimpleTable ON SimpleTable (ProductKey);
CREATE CLUSTERED COLUMNSTORE INDEX cci_SimpleTable
ON SimpleTable
WITH (DROP_EXISTING = ON);
--Compress the table further by using archival compression.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
GO
Tato ukázka odebere kompresi archivu a používá pouze kompresi columnstore.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE);
GO
Příklady: Indexy rowstore
A. Opětovné sestavení indexu
Následující příklad znovu sestaví jeden index tabulky Employee
v databázi AdventureWorks2022
.
ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;
B. Opětovné sestavení všech indexů v tabulce a zadání možností
Následující příklad určuje klíčové slovo ALL
. Tím se znovu sestaví všechny indexy přidružené k tabulce Production.Product
v databázi AdventureWorks2022
. Jsou zadány tři možnosti.
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);
Následující příklad přidá možnost ONLINE, včetně možnosti uzamčení s nízkou prioritou, a přidá možnost komprese řádku.
platí pro: SQL Server 2014 (12.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
ALTER INDEX ALL ON Production.Product
REBUILD WITH
(
FILLFACTOR = 80,
SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON,
ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS ) ),
DATA_COMPRESSION = ROW
);
C. Změna uspořádání indexu pomocí komprimace LOB
Následující příklad reorganizuje jeden clusterovaný index v databázi AdventureWorks2022
. Protože index obsahuje datový typ LOB na úrovni listu, příkaz také zkomprimuje všechny stránky, které obsahují velká data objektu. Zadání možnosti WITH (LOB_COMPACTION = ON)
není povinné, protože výchozí hodnota je ZAPNUTÁ.
ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION = ON);
D. Nastavení možností v indexu
Následující příklad nastaví několik možností indexu AK_SalesOrderHeader_SalesOrderNumber
v databázi AdventureWorks2022
.
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
Sales.SalesOrderHeader
SET (
STATISTICS_NORECOMPUTE = ON,
IGNORE_DUP_KEY = ON,
ALLOW_PAGE_LOCKS = ON
) ;
GO
E. Zakázání indexu
Následující příklad zakáže neclusterovaný index v tabulce Employee
v AdventureWorks2022
databázi.
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;
F. Zakázání omezení
Následující příklad zakáže omezení PRIMARY KEY
zakázáním indexu PRIMARY KEY
v databázi AdventureWorks2022
. Omezení FOREIGN KEY
podkladové tabulky se automaticky zakáže a zobrazí se zpráva s upozorněním.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;
Sada výsledků vrátí tuto zprávu upozornění.
Warning: Foreign key 'FK_EmployeeDepartmentHistory_Department_DepartmentID'
on table 'EmployeeDepartmentHistory' referencing table 'Department'
was disabled as a result of disabling the index 'PK_Department_DepartmentID'.
G. Povolení omezení
Následující příklad umožňuje omezení PRIMARY KEY
a FOREIGN KEY
, která byla zakázána v příkladu F.
Omezení PRIMARY KEY
je povoleno opětovným sestavením indexu PRIMARY KEY
.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;
Omezení FOREIGN KEY
je pak povoleno.
ALTER TABLE HumanResources.EmployeeDepartmentHistory
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;
GO
H. Opětovné sestavení děleného indexu
Následující příklad znovu sestaví jeden oddíl, číslo oddílu 5
, oddíl indexu IX_TransactionHistory_TransactionDate
v databázi AdventureWorks2022
. Oddíl 5 se znovu sestaví s ONLINE=ON
a 10 minut čekání na zámek s nízkou prioritou platí zvlášť pro každý zámek získaný operací opětovného sestavení indexu. Pokud během této doby nelze zámek získat k dokončení opětovného sestavení indexu, příkaz operace opětovného sestavení je přerušen, protože ABORT_AFTER_WAIT = SELF
.
platí pro: SQL Server 2014 (12.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
-- Verify the partitioned indexes.
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);
GO
--Rebuild only partition 5.
ALTER INDEX IX_TransactionHistory_TransactionDate
ON Production.TransactionHistory
REBUILD Partition = 5
WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF)));
GO
Já. Změna nastavení komprese indexu
Následující příklad znovu sestaví index v tabulce rowstore, která není součástí.
ALTER INDEX IX_INDEX1
ON T1
REBUILD
WITH (DATA_COMPRESSION = PAGE);
GO
J. Změna nastavení indexu pomocí komprese XML
platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.
Následující příklad znovu sestaví index v tabulce rowstore, která není součástí.
ALTER INDEX IX_INDEX1
ON T1
REBUILD
WITH (XML_COMPRESSION = ON);
GO
Další příklady komprese dat najdete v tématu Komprese dat.
K. Opětovné sestavení indexu s možností obnovení online
platí pro: SQL Server 2017 (14.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance
Následující příklady ukazují, jak používat online opětovné sestavení indexu.
Spusťte opětovné sestavení online indexu jako obnovitelnou operaci s MAXDOP = 1
. Opětovné spuštění stejného příkazu po pozastavení operace indexu automaticky obnoví operaci opětovného sestavení indexu.
ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);
Spusťte opětovné sestavení online indexu jako obnovitelnou operaci s MAX_DURATION
nastavenou na 240 minut.
ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);
Pozastavte spuštěné opětovné sestavení online indexu s možností obnovení.
ALTER INDEX test_idx on test_table PAUSE;
Obnovte online opětovné sestavení indexu pro opětovné sestavení indexu, které bylo provedeno jako obnovitelná operace, která určuje novou hodnotu pro MAXDOP
nastavenou na hodnotu 4.
ALTER INDEX test_idx on test_table RESUME WITH (MAXDOP = 4);
Obnovení operace opětovného sestavení online indexu pro online opětovné sestavení indexu, které bylo provedeno jako obnovitelné. Nastavte MAXDOP
na hodnotu 2, nastavte dobu spuštění indexu, která běží, na 240 minut a pokud je index zablokovaný na zámku, počkejte 10 minut a potom ukončete všechny blokátory.
ALTER INDEX test_idx on test_table
RESUME WITH (MAXDOP = 2, MAX_DURATION = 240 MINUTES,
WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10, ABORT_AFTER_WAIT = BLOCKERS));
Přerušte operaci opětovného sestavení indexu, která je spuštěná nebo pozastavená.
ALTER INDEX test_idx on test_table ABORT;
Související obsah
- sql Serveru a architektury indexu Azure SQL a průvodce návrhem
- provádění online operací indexování
- CREATE INDEX (Transact-SQL)
- CREATE SPATIAL INDEX (Transact-SQL)
- CREATE XML INDEX (Transact-SQL)
- DROP INDEX (Transact-SQL)
- Zakázání indexů a omezení
- indexy XML (SQL Server)
- Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků
- sys.dm_db_index_physical_stats (Transact-SQL)
- EVENTDATA (Transact-SQL)