Wykonywanie operacji indeksowania w trybie online
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database w usłudze Microsoft Fabric
W tym artykule opisano sposób tworzenia, odbudowywania lub upuszczania indeksów w trybie online przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Opcja ONLINE
umożliwia równoczesny dostęp użytkowników do bazowej tabeli lub danych indeksu klastrowanego oraz wszystkich skojarzonych indeksów nieklastrowanych podczas tych operacji indeksowania. Na przykład gdy indeks klastrowany jest odbudowywany przez jednego użytkownika, ten użytkownik i inni mogą nadal aktualizować i wykonywać zapytania dotyczące danych bazowych.
Podczas wykonywania operacji języka definicji danych (DDL) w trybie offline, takich jak tworzenie lub ponowne tworzenie indeksu klastrowanego, te operacje przechowują wyłączne (X
) blokady na danych bazowych i powiązanych indeksach. Zapobiega to modyfikacjom i zapytaniom do danych bazowych do momentu zakończenia operacji indeksu.
Notatka
Polecenia ponownego kompilowania indeksu mogą zawierać wyłączne blokady w indeksach klastrowanych po usunięciu dużej kolumny obiektu z tabeli nawet w przypadku wykonywania w trybie online.
Opcja ONLINE
jest dostępna w poniższych instrukcjach Transact-SQL.
- UTWÓRZ INDEKS
- ALTER INDEX
- DROP INDEX
-
ALTER TABLE (Aby móc dodać lub usunąć ograniczenia
UNIQUE
lubPRIMARY KEY
)
Aby uzyskać informacje na temat ograniczeń dotyczących tworzenia, przebudowywania lub usuwania indeksów dla operacji online, odnieś się do Wytyczne dotyczące operacji indeksowania online.
Aby można było używać operacji indeksowania możliwego do wznowienia, należy wykonać operację indeksu w trybie online. Aby uzyskać więcej informacji, zobacz zagadnienia dotyczące indeksu z możliwością wznowienia .
Obsługiwane platformy
Operacje indeksowania online nie są dostępne w każdej wersji programu SQL Server. Aby uzyskać więcej informacji, zobacz edycje i obsługiwane funkcje programu SQL Server 2022.
Operacje indeksowania online są dostępne w usługach Azure SQL Database i Azure SQL Managed Instance.
Uprawnienia
Wymaga uprawnienia ALTER
w tabeli lub widoku.
Korzystanie z programu SQL Server Management Studio
W Eksploratorze obiektów rozwiń bazę danych zawierającą tabelę, w której chcesz ponownie skompilować indeks w trybie online.
Rozwiń folder Tables.
Rozwiń tabelę, w której chcesz ponownie skompilować indeks w trybie online.
Rozwiń folder indeksy.
Użyj menu kontekstowego dla indeksu, który chcesz odtworzyć online, a następnie wybierz pozycję Właściwości.
W obszarze Wybierz stronęwybierz Opcje.
Wybierz pozycję Zezwalaj na przetwarzanie DML w trybie online, a następnie wybierz True z listy.
Wybierz pozycję OK.
Użyj menu kontekstowego indeksu, który chcesz ponownie skompilować w trybie online, a następnie wybierz pozycję Ponownie skompiluj.
W oknie dialogowym Ponowne kompilowanie indeksów sprawdź, czy prawidłowy indeks znajduje się w indeksach , aby ponownie skompilować siatkę i wybierz pozycję OK.
Korzystanie z Transact-SQL
Poniższy przykład ponownie kompiluje istniejący indeks online w przykładowej bazie danych AdventureWorks
.
ALTER INDEX AK_Employee_NationalIDNumber
ON HumanResources.Employee
REBUILD WITH (ONLINE = ON);
Poniższy przykład usuwa indeks klastrowany w trybie online i przenosi tabelę wynikową (stertę) do grupy plików NewGroup
przy użyciu klauzuli MOVE TO
. Zapytania dotyczące widoków wykazu sys.indexes
, sys.tables
i sys.filegroups
są sprawdzane w celu zweryfikowania położenia indeksu i tabeli w grupach plików przed przeniesieniem i po nim.
-- 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');
Aby uzyskać więcej informacji, zobacz ALTER INDEX (Transact-SQL).
Powiązana zawartość
- wskazówki dotyczące operacji indeksowania online
- Jak działają operacje indeksowania online