Sdílet prostřednictvím


Online provádění operací indexu

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Database v rámci Microsoft Fabric

Tento článek popisuje, jak vytvořit, znovu sestavit nebo odstranit indexy online pomocí aplikace SQL Server Management Studio nebo Transact-SQL. Možnost ONLINE umožňuje souběžným uživatelům přístup k podkladovým tabulkovým nebo clusterovaným indexům a všem přidruženým neclusterovaným indexům během těchto operací indexu. Například když je clusterovaný index znovu sestavován jedním uživatelem, může tento uživatel a ostatní pokračovat v aktualizaci a dotazování podkladových dat.

Při offline provádění operací jazyka DDL (Data Definition Language), jako je sestavení nebo opětovné sestavení clusterovaného indexu, tyto operace drží výhradní (X) zámky na podkladových datech a přidružených indexech. Tím se zabrání úpravám a dotazům na podkladová data, dokud se operace indexu neskoní.

Poznámka

Příkazy opětovného sestavení indexu můžou po vyřazení velkého sloupce objektu z tabulky obsahovat výhradní zámky na clusterovaných indexech, i když se provádí online.

Možnost ONLINE je dostupná v následujících příkazech Transact-SQL.

Omezení a omezení týkající se vytváření, opětovného sestavení nebo vyřazení indexů online najdete v tématu Pokyny pro online indexovací operace.

Chcete-li použít obnovitelné indexovací operace, musí být operace indexu provedena online. Další informace najdete v tématu úvahy o obnovitelných indexech.

Podporované platformy

Online indexovací operace nejsou dostupné v každé edici SQL Serveru. Další informace naleznete v tématu Edice a podporované funkce SQL Server 2022.

Online indexovací operace jsou k dispozici ve službě Azure SQL Database a ve službě Azure SQL Managed Instance.

Dovolení

Vyžaduje oprávnění ALTER v tabulce nebo zobrazení.

Použití aplikace SQL Server Management Studio

  1. V Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete znovu sestavit index online.

  2. Rozbalte složku Tabulky.

  3. Rozbalte tabulku, na které chcete znovu sestavit index online.

  4. Rozbalte složku Indexy.

  5. Použijte místní nabídku indexu, který chcete znovu sestavit online, a vyberte Vlastnosti.

  6. Pod Vyberte stránku, vyberte Možnosti.

  7. Vyberte Povolit online zpracování DMLa pak v seznamu vyberte True.

  8. Vyberte OK.

  9. Použijte místní nabídku indexu, který chcete online znovu sestavit, a vyberte Znovu sestavit.

  10. V dialogovém okně Znovu sestavit indexy ověřte, zda je správný index v mřížce Indexy ke znovu sestavení a klikněte na OK.

Použijte Transact-SQL

Následující příklad znovu sestaví existující online index v ukázkové databázi AdventureWorks.

ALTER INDEX AK_Employee_NationalIDNumber
    ON HumanResources.Employee
    REBUILD WITH (ONLINE = ON);

Následující příklad odstraní clusterovaný index online a přesune výslednou tabulku (haldu) do skupiny souborů NewGroup pomocí klauzule MOVE TO. Katalogová zobrazení sys.indexes, sys.tablesa sys.filegroups jsou dotazována ke kontrole umístění indexu a tabulky ve skupinách souborů před a po přesunu.

-- Create a clustered index on the PRIMARY filegroup if the index does not exist.
IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
            N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
    CREATE UNIQUE CLUSTERED INDEX
        AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
        StartDate)
    ON 'PRIMARY';
GO

-- Verify filegroup location of the clustered index.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
GO

-- Create filegroup NewGroup if it does not exist.
IF NOT EXISTS (SELECT name FROM sys.filegroups
                WHERE name = N'NewGroup')
    BEGIN
    ALTER DATABASE AdventureWorks2022
        ADD FILEGROUP NewGroup;
    ALTER DATABASE AdventureWorks2022
        ADD FILE (NAME = File1,
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
        TO FILEGROUP NewGroup;
    END
GO

-- Verify new filegroup
SELECT * from sys.filegroups;
GO

-- Drop the clustered index and move the BillOfMaterials table to
-- the Newgroup filegroup.
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
    ON Production.BillOfMaterials 
    WITH (ONLINE = ON, MOVE TO NewGroup);
GO

-- Verify filegroup location of the moved table.
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
    i.data_space_id, f.name AS [Filegroup Name]
FROM sys.indexes AS i
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
    JOIN sys.tables as t ON i.object_id = t.object_id
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');

Další informace naleznete v tématu ALTER INDEX (Transact-SQL).