Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Förhandsversion av Microsoft Fabric
Den här artikeln definierar de strukturer som finns under en onlineindexåtgärd och visar de aktiviteter som är associerade med dessa strukturer.
Onlineindexstrukturer
För att tillåta samtidig användaraktivitet under en DDL-åtgärd (Index Data Definition Language) används följande strukturer under onlineindexåtgärden: källindex och befintliga index, mål och för att återskapa en heap eller släppa ett klustrade index online, ett tillfälligt mappningsindex.
Käll- och befintliga index
Källan är den ursprungliga tabellen eller klustrade indexdata. Befintliga index är alla icke-grupperade index som är associerade med källstrukturen. Om onlineindexåtgärden till exempel återskapar ett klustrat index som har fyra associerade icke-grupperade index, är källan det befintliga klustrade indexet och de befintliga indexen är de icke-grupperade indexen.
De befintliga indexen är tillgängliga för samtidiga användare för att välja, infoga, uppdatera och ta bort åtgärder. Detta omfattar massinfogningar (stöds men rekommenderas inte under en onlineindexåtgärd) och implicita uppdateringar av utlösare och begränsningar för referensintegritet. Alla befintliga index är tillgängliga för frågor. Det innebär att de kan väljas av frågeoptimeraren och, om det behövs, anges i indextips.
Target
Målet eller målen är det nya indexet (eller heapen) eller en uppsättning nya index som skapas eller återskapas. Användarinfognings-, uppdaterings- och borttagningsåtgärder för källan tillämpas av databasmotorn på målet under indexåtgärden. Om till exempel onlineindexåtgärden återskapar ett klustrat index är målet det ombyggda klustrade indexet. Databasmotorn återskapar inte icke-grupperade index när ett klustrat index återskapas.
Målindexet används inte förrän indexåtgärden har checkats in. Internt markeras indexet som skrivskyddat.
Tillfälligt mappningsindex
Onlineindexåtgärder som skapar, släpper eller återskapar ett grupperat index kräver också ett tillfälligt mappningsindex. Det här tillfälliga indexet används av samtidiga transaktioner för att avgöra vilka poster som ska tas bort i de nya index som skapas när rader i källtabellen uppdateras eller tas bort. Det här icke-klustrade indexet skapas i samma steg som det nya klustrade indexet (eller heapen) och kräver ingen separat sorteringsåtgärd. Samtidiga transaktioner underhåller det tillfälliga mappningsindexet i alla åtgärder för att infoga, uppdatera och ta bort.
Onlineindexaktiviteter
Under en onlineindexåtgärd, till exempel att skapa ett grupperat index i en icke-indexerad tabell (heap), går källan och målet igenom tre faser: förberedelse, bygge och slut.
Du kan använda den progress_report_online_index_operation utökade händelsen för att övervaka förloppet för en onlineindexåtgärd.
Följande bild visar processen för att skapa ett första grupperat index online. Källobjektet (heapen) har inga andra index. Aktiviteterna för käll- och målstruktur visas för varje fas. samtidiga användare SELECT, INSERT, UPDATEoch DELETE åtgärder visas också. Förberedelse-, bygg- och slutfaserna anges tillsammans med de låslägen som används i varje fas.
Aktiviteter för källstruktur
I följande tabell visas de aktiviteter som involverar källstrukturerna under varje fas av indexåtgärden och motsvarande låsningsstrategi.
| Phase | Source activity | Source locks |
|---|---|---|
|
Preparation Short phase |
Förberedelse av systemmetadata för att skapa den nya tomma indexstrukturen. En ögonblicksbild av tabellen definieras. Det innebär att radversioner används för att ge läskonsekvens på transaktionsnivå. Samtidiga skrivåtgärder för användare på källan blockeras under en kort period. Inga samtidiga DDL-åtgärder tillåts förutom att skapa flera icke-illustrerade index. |
Delat (S) i tabellen1Delad avsikt ( IS)Schemaändringsobjektlås ( Sch-M) med resursundertypen INDEX_OPERATION2 |
|
Build Main phase |
Data genomsöks, sorteras, sammanfogas och infogas i målet med massinläsningsåtgärder. Samtidiga åtgärder för användare INSERT, UPDATE, DELETEoch MERGE tillämpas på både befintliga index och eventuella nya index som skapas. |
Delad avsikt (IS)Sch-M objektlås med resursundertypen INDEX_OPERATION2 |
|
Final Short phase |
Alla ogenomförda skrivtransaktioner måste slutföras innan den här fasen startar. Beroende på det förvärvade låset blockeras alla nya användarläsnings- eller skrivtransaktioner under en kort period tills den här fasen är klar. Systemmetadata uppdateras för att ersätta källan med målet. Källan tas bort om det behövs, till exempel efter att ett grupperat index har återskapats eller tagits bort. |
Sch-M objektlås med resursundertypen INDEX_OPERATION2Delat ( S) i tabellen om du skapar ett icke-grupperat index.1Sch-M om någon källstruktur (index eller tabell) tas bort. 1 |
1 Indexåtgärden väntar tills alla ogenomförda skrivtransaktioner har slutförts innan låset S eller låset Sch-M hämtas i tabellen. Om en tidskrävande fråga äger rum väntar onlineindexåtgärden tills frågan har slutförts. Om inte lås med låg prioritet används kan detta utgöra en blockeringskedja.
2 Ett Sch-M objektlås med resursundertypen INDEX_OPERATION förhindrar körning av samtidiga DDL-åtgärder (datadefinitionsspråk) på käll- och befintliga strukturer medan indexåtgärden pågår. Det här låset förhindrar till exempel samtidig återskapande av två index i samma tabell. Även om det här är ett Sch-M lås förhindrar det inte datamanipuleringsuttryck.
I den föregående tabellen visas ett enda delat lås (S) som hämtats under byggfasen av en onlineindexåtgärd som omfattar ett enda index. När klustrade och icke-grupperade index skapas eller återskapas i en enda onlineindexåtgärd (till exempel när det första klustrade indexet skapas i en tabell som innehåller ett eller flera icke-grupperade index) hämtas två kortsiktiga S lås under byggfasen följt av långsiktiga delade (IS) avsiktslås. Ett S lås hämtas först för att skapa klustrade index. När det klustrade indexet skapas hämtas ett andra kortsiktigt S lås för att skapa de icke-grupperade indexen. När de icke-grupperade indexen har skapats nedgraderas låset S till ett IS lås till den sista fasen av onlineindexåtgärden.
Mer information om hur lås används och hur du kan hantera dem finns i WAIT_AT_LOW_PRIORITY med onlineindexåtgärder.
Målstrukturaktiviteter
I följande tabell visas de aktiviteter som omfattar målstrukturen under varje fas av indexåtgärden och motsvarande låsningsstrategi.
| Phase | Target activity | Target locks |
|---|---|---|
| Preparation | Nytt index skapas och anges till skrivskyddad. | Delad avsikt (IS) |
| Build | Data infogas från källan. Användarändringar (infogningar, uppdateringar, borttagningar) som tillämpas på källan tillämpas också på målet. Den här aktiviteten är transparent för användaren. |
Delad avsikt (IS) |
| Final | Indexmetadata uppdateras. Indexet är inställt på läs-/skrivstatus. |
Delad (S) eller schemaändring (Sch-M) |
Målet nås inte av användarfrågor förrän indexåtgärden har slutförts.
När förberedelsen eller slutfasen är klar kan frågeplaner som lagras i plancachen ogiltigförklaras.
Livslängden för en markör som deklareras i en tabell som ingår i en onlineindexåtgärd begränsas av onlineindexfaserna. Uppdateringsmarkörerna är ogiltiga i varje fas. Skrivskyddade markörer är endast ogiltiga efter slutfasen.