Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Online indexelési műveletek végrehajtásakor a következő irányelvek vonatkoznak:
A fürtözött indexeket offline állapotban kell létrehozni, újraépíteni vagy elvetni, ha a mögöttes tábla a következő nagy objektumtípusokat (LOB) tartalmazza: kép, ntextés szöveges.
A nem nem kizárólagos indexek akkor hozhatók létre online, ha a tábla LOB adattípusokat használó oszlopokat tartalmaz, de egyik oszlop sem szerepel az indexdefinícióban kulcsként vagy belefoglalt oszlopként.
A helyi ideiglenes táblák indexei nem hozhatók létre, nem hozhatók létre újra és nem törölhetők online. Ez a korlátozás nem vonatkozik a globális ideiglenes táblák indexeire.
Az online indexelési műveletet folytatható műveletként indíthatja el a
RESUMABLEvagy ALTER INDEX záradékával. Az újrakezdhető indexművelet váratlan hiba, adatbázis-feladatátvétel vagyALTER INDEX PAUSEparancs után újraindulhat, és onnan folytathatja, ahol megszakadt.
Note
Az online indexelési műveletek nem érhetők el a Microsoft SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben találja.
Az alábbi táblázat az online végrehajtható indexműveleteket, az ezekből az online műveletekből kizárt indexeket és a folytatható indexkorlátozásokat mutatja be. További korlátozásokat is tartalmaz.
| Online indexelési művelet | Kizárt indexek | Egyéb korlátozások |
|---|---|---|
ALTER INDEX REBUILD |
Letiltott klaszterezett index vagy letiltott indexelt nézet XML index Indexelés helyi ideiglenes táblán |
A kulcsszó ALL megadása a művelet meghiúsulását okozhatja, ha a tábla kizárt indexet tartalmaz.A letiltott indexek újraépítésére vonatkozó további korlátozások érvényesek. További információ: Indexek és korlátozások letiltása. |
CREATE INDEX |
XML index Elsődleges egyedi fürtözött index egy nézetben Indexelés helyi ideiglenes táblán |
|
CREATE INDEX WITH DROP_EXISTING |
Letiltott klaszterezett index vagy letiltott indexelt nézet Indexelés helyi ideiglenes táblán XML index |
|
DROP INDEX |
Letiltott index XML index Nemclustered index Indexelés helyi ideiglenes táblán |
Egyetlen utasításon belül nem lehet több indexet megadni. |
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY vagy UNIQUE) |
Indexelés helyi ideiglenes táblán Klaszterezett index |
Egyszerre csak egy alszakasz engedélyezett. Például nem adhat hozzá és nem helyezhet el PRIMARY KEY vagy UNIQUE kényszereket ugyanabban a ALTER TABLE utasításban. |
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY vagy UNIQUE) |
Klaszterezett index |
Az alapul szolgáló tábla nem módosítható, nem csonkítható vagy elvethető, amíg egy online indexművelet folyamatban van.
A fürtözött index létrehozása vagy elvetése során megadott online beállítás (ON vagy OFF) bármely olyan nem fürtözött indexre vonatkozik, amelyet újraépíteni szükséges. Ha például a klaszterindexet CREATE INDEX WITH DROP_EXISTING, ONLINE = ONhasználatával online hozzák létre, akkor a rendszer az összes kapcsolódó nem-klaszterezett indexet is online újra létrehozza.
Amikor online hoz létre vagy épít újra egy UNIQUE indexet, az indexszerkesztő és az egyidejű felhasználói tranzakció megpróbálhatja beszúrni ugyanazt a kulcsot, ami megsérti az egyediséget. Ha egy felhasználó által megadott sor beszúródik az új indexbe (célba), mielőtt a forrástábla eredeti sorát áthelyezi az új indexbe, az online indexművelet meghiúsul.
Bár nem gyakori, az online indexelési művelet holtpontot okozhat, ha felhasználói vagy alkalmazástevékenységek miatt használja az adatbázis-frissítéseket. Ezekben a ritka esetekben a rendszer a felhasználó vagy az alkalmazás tevékenységeit választja ki holtpontként.
Ugyanazon a táblán egyidejű online index DDL-műveleteket hajthat végre, vagy csak akkor tekintheti meg, ha több új nemclustered indexet hoz létre, vagy átrendezi a nemclustered indexeket. Az egyidejűleg végrehajtott összes többi online indexművelet meghiúsul. Például nem hozhat létre új indexet online, miközben egy meglévő indexet újraépít ugyanazon a táblán.
Online művelet nem hajtható végre, ha egy index nagy méretű objektumtípusú oszlopot tartalmaz, és ugyanez a tranzakció az online indexművelet megkezdése előtt módosítja az adatokat. A probléma megoldásához helyezze át az online indexelési műveletet a tranzakción kívülre, vagy helyezze át a tranzakció adatmódosításai előtt.
Tárhely szempontok
Az online indexelési műveletek több lemezterületet igényelnek, mint az offline indexműveletek.
Az index létrehozása és az index újraépítése során további hely szükséges az index létrehozásához (vagy újraépítéséhez). Ez a további tér általában megegyezik az index által elfoglalt aktuális területtel, de az aktuális vagy az újraépített indexben használt tömörítéstől függően nagyobb vagy kisebb is lehet.
Emellett lemezterületre van szükség az ideiglenes leképezési indexhez. Ezt az ideiglenes indexet olyan online indexműveletekhez használják, amelyek fürtözött indexet hoznak létre, újraépítenek vagy eldobnak.
A fürtözött index online elvetéséhez annyi hely szükséges, mint egy fürtözött index online létrehozása (vagy újraépítése).
További információ: Index DDL-műveletek lemezterület-követelményei.
Teljesítménnyel kapcsolatos szempontok
Bár az online indexelési műveletek lehetővé teszik az egyidejű felhasználói frissítési tevékenységet, az indexműveletek hosszabb időt is igénybe vehetnek, ha a frissítési tevékenység nagy. Az online indexműveletek általában lassabbak, mint az egyenértékű offline indexműveletek, függetlenül az egyidejű frissítési tevékenység szintjétől.
Mivel az online indexművelet során a forrás- és a célstruktúrák is megmaradnak, a beszúrási, frissítési és törlési tranzakciók erőforrás-kihasználtsága megnő, ami akár megduplázható is. Ez a teljesítmény csökkenését és nagyobb erőforrás-használatot okozhat, különösen a processzoridőt az indexművelet során. Az online indexelési műveletek teljes mértékben naplózva vannak.
Bár az online műveleteket javasoljuk, érdemes kiértékelni a környezetet és a konkrét követelményeket. Optimális lehet az indexműveletek offline futtatása. Ennek során az adatokhoz való felhasználói hozzáférés korlátozott a művelet során, de a művelet gyorsabban fejeződik be, és kevesebb erőforrást használ.
Az SQL Server 2016 (13.x) és újabb verzióit futtató többprocesszoros számítógépeken az indexműveletek párhuzamossággal hajthatják végre az indexelési utasításhoz társított vizsgálati és rendezési műveleteket. Az MAXDOP indexeléssel szabályozhatja az online indexművelet párhuzamossági fokát. Ily módon kiegyensúlyozhatja az indexművelet által használt erőforrásokat az egyidejű felhasználók erőforrásaival. További információ: Párhuzamos indexelési műveletek konfigurálása. A párhuzamos indexműveleteket támogató SQL Server kiadásairól további információt az SQL Server 2022 Kiadásai és támogatott funkciói című témakörben talál.
Mivel egy megosztott (S) zárolás vagy sémamódosítási (Sch-M) zárolás az indexelési művelet utolsó fázisában van, ügyeljen arra, hogy amikor online indexelési műveletet futtat egy explicit felhasználói tranzakción belül, például BEGIN TRANSACTION ... COMMIT blokkban. Ennek hatására a zárolások a tranzakció végéig maradnak, ami más számítási feladatokat is blokkolhat.
Ha az indexlap-zárolás le van tiltva az ALLOW_PAGE_LOCKS = OFFhasználatával, az online index újraépítése növelheti az index töredezettségét, ha a MAXDOP értéke 1-nél nagyobb. További információ: Hogyan működik: Online index újraépítése – Nagyobb töredezettséghez vezethet.
Tranzakciónaplóval kapcsolatos szempontok
Az offline vagy online végrehajtott nagy léptékű indexműveletek nagy mennyiségű tranzakciónaplót hozhatnak létre. Ennek az az oka, hogy mind az offline, mind az online index újraépítési műveletei teljes mértékben naplózva vannak. Annak érdekében, hogy az index művelet visszaállítható legyen, a tranzakciós napló nem csonkolható, amíg az index művelet be nem fejeződik; a naplóról azonban készíthető egy biztonsági másolat az index művelet során.
Ezért a tranzakciónaplónak elegendő helynek kell lennie az indexműveleti tranzakciók és az egyidejű felhasználói tranzakciók tárolásához az indexművelet során. További információért lásd: tranzakciónapló lemezterülete az indexműveletekhez.
Az online indexműveletek nem okoznak jelentős tranzakciónapló-növekedést, ha engedélyezve van a gyorsított adatbázis-helyreállítás (ADR).
Az állandó verziótár szempontjai
Ha az ADR engedélyezve van, egy nagy online index létrehozása vagy újraépítése jelentősen növelheti az állandó verziótár (PVS) méretét, amíg az indexművelet folyamatban van. Győződjön meg arról, hogy az adatbázis elegendő szabad területtel rendelkezik a PVS növekedéséhez. További információért lásd: A gyorsított adatbázis-helyreállítás monitorozása és hibaelhárítása.
Folytatható indexelési szempontok
A RESUMABLE indexopció a CREATE INDEX és ALTER INDEX esetében alkalmazható az SQL Serverre (ALTER INDEX kezdve az SQL Server 2017-től (14.x), és CREATE INDEX kezdve az SQL Server 2019-től (15.x)), valamint az Azure SQL Database és a felügyelt Azure SQL-példány esetében. További információ: CREATE INDEX és ALTER INDEX.
A RESUMABLE beállítás használatához a ONLINE lehetőséget is használnia kell. Az újrakezdhető index létrehozásakor vagy újraépítésekor a következő irányelvek érvényesek:
Jobban szabályozhatja az indexkarbantartási időszakok kezelését, tervezését és kiterjesztését. Az index létrehozási vagy újraépítési műveletét többször szüneteltetheti és újraindíthatja a karbantartási időszakoknak megfelelően.
Az index létrehozás vagy újraépítés során fellépő hibákból (például az adatbázis-átvitel vagy a lemezterület kifogyása) úgy is helyreállhat, hogy nem kell a műveletet újrakezdenie.
Az indexművelet szüneteltetésekor az eredeti és az újonnan létrehozott index is lemezterületet igényel, és a DML-műveletek során frissíteni kell.
A
SORT_IN_TEMPDB = ONbeállítás nem támogatott.A letiltott indexek nem támogatottak.
Tip
Az ismételhető indexműveletek nem igényelnek nagy tranzakciót, ami lehetővé teszi a naplók gyakori csonkolását a művelet során, és elkerülheti a nagy méretű naplónövekedést. Az indexművelet folytatásához és végrehajtásához szükséges adatokat egy adatbázis adatfájljai tárolják.
Általában nincs teljesítménybeli különbség a folytatható és a nem hasznosítható online indexműveletek között. A folytatható CREATE INDEXesetén állandó többletterhelés tapasztalható, amely észrevehetően lassabb műveleteket okozhat a kisebb táblák esetében.
Ha egy ismételhető indexművelet szüneteltetve van:
- A legtöbb olvasási számítási feladat esetében a teljesítménycsökkenés jelentéktelen.
- A frissítési terhelésű számítási feladatok esetében a számítási feladatok jellemzőitől függően előfordulhat, hogy az átviteli sebesség romlik.
Általában nincs különbség a töredezettségmentesség minőségében a helyreállítható és a nem helyreállítható online index létrehozása vagy újraépítése között.
Amíg egy online indexművelet szüneteltetve van, minden olyan tranzakció meghiúsul, amely táblaszintű kizárólagos (X) zárolást igényel a szüneteltetett indexet tartalmazó táblán. Ez például INSERT ... WITH (TABLOCK) műveletek esetén fordulhat elő. Ebben az esetben az 10637-s hiba jelenik meg:
Cannot perform this operation on '<object name>' with ID (<object ID>) as one or more indexes are currently in resumable index rebuild state. Please refer to sys.index_resumable_operations for more details.
Az 10637-s hiba elhárításához távolítsa el a TABLOCK tippet a tranzakcióból, vagy törölje az indexelési műveletet, és várja meg, amíg befejeződik, mielőtt újra megkísérli a tranzakciót.
Online alapértelmezett beállítások
A ELEVATE_ONLINE vagy ELEVATE_RESUMABLE adatbázis-hatókörű konfigurációk beállításával beállíthatja az online és az újra felhasználható indexműveleteket alapértelmezett beállításként az adatbázis szintjén. Ezekkel az alapértelmezett beállításokkal elkerülheti, hogy véletlenül elindítson egy offline indexelési műveletet, amely elérhetetlenné tesz egy táblát vagy indexet futás közben. Mindkét lehetőség azt eredményezi, hogy az adatbázismotor automatikusan emel bizonyos indexműveleteket online vagy folytatható végrehajtásra.
A beállítást beállíthatja FAIL_UNSUPPORTED, WHEN_SUPPORTEDvagy OFF. A ELEVATE_ONLINE és ELEVATE_RESUMABLEkülönböző értékeket állíthat be. További információért lásd: ALTER DATABASE SCOPED CONFIGURATION.
Mind a ELEVATE_ONLINE, mind a ELEVATE_RESUMABLE csak az online és az újra használható szintaxist támogató DDL-utasításokra vonatkozik. Ha például ELEVATE_ONLINE = FAIL_UNSUPPORTEDxml-indexet próbál létrehozni, a művelet offline állapotban fut, mivel az XML-indexek nem támogatják a ONLINE beállítást. A beállítások csak a ONLINE vagy RESUMABLE beállítás megadása nélkül elküldött DDL-utasításokat érintik. Ha például egy utasítást ONLINE = OFF vagy RESUMABLE = OFFküld el, a felhasználó felülbírálhat egy FAIL_UNSUPPORTED beállítást, és offline és/vagy nem ismétlődő módon futtathat egy utasítást.
Note
ELEVATE_ONLINE és ELEVATE_RESUMABLE nem vonatkoznak az XML-indexelési műveletekre.