Saudações! Como administrador de banco de dados, você pode ter percebido que à medida que o volume de dados aumenta em seus bancos de dados, o tempo necessário para realizar tarefas de manutenção também aumenta. Esse é um desafio comum enfrentado pelos DBAs. No entanto, é crucial garantir que essas tarefas de manutenção não excedam os Acordos de Nível de Serviço (SLAs) estabelecidos para sua organização.
Vamos considerar um exemplo: um banco de dados que levava 20 minutos para ser restaurado há seis meses pode agora levar 45 minutos para ser restaurado devido ao aumento do volume de dados. Se o seu SLA estabelece um tempo máximo de restauração de 30 minutos, você está violando o contrato. Essa situação pode levar a chefes insatisfeitos e consequências potenciais se você precisar restaurar esse banco de dados com urgência.
Outra questão que surge com o crescimento dos dados é o aumento do tamanho dos índices. À medida que os dados nas tabelas ficam maiores, os índices também aumentam. Consequentemente, o tempo necessário para reconstruir ou reorganizar esses índices também aumenta. Em alguns casos, o tempo para reconstrução offline de índices pode exceder o tempo de inatividade aceitável definido em seus SLAs. É aqui que a reconstrução online de índices se torna essencial para manter seus compromissos de SLA.
Antes de prosseguir com a reconstrução online de índices, é importante observar que você precisará da versão Enterprise ou Datacenter do SQL Server. Supondo que você tenha a versão apropriada, existem certos critérios a serem observados ao realizar a reconstrução online de índices.
Em primeiro lugar, a tabela não pode conter um tipo lob. Se conter, você receberá uma mensagem de erro indicando que uma operação online não pode ser realizada para o índice. A mensagem de erro especificará que o índice contém uma coluna do tipo de dados text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml ou large CLR.
Para demonstrar essa mensagem de erro, você pode usar o seguinte script:
USE master
GO
-- Drop the database if it already exists
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = N'TestDB'
)
BEGIN
ALTER DATABASE TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE TestDB;
END
GO
CREATE DATABASE TestDB
GO
USE TestDB;
GO
CREATE TABLE TestLOB
(
PK_ID INT IDENTITY(1,1) NOT NULL,
AGE INT NOT NULL,
FULLNAME VARCHAR(MAX) NOT NULL,
CONSTRAINT PK_TESTLOB PRIMARY KEY CLUSTERED (PK_ID ASC)
);
INSERT INTO TestLOB(AGE, FULLNAME) VALUES(41,'Martin');
INSERT INTO TestLOB(AGE, FULLNAME) VALUES(39,'Suzanne');
INSERT INTO TestLOB(AGE, FULLNAME) VALUES(2,'Callum');
GO
ALTER INDEX PK_TESTLOB
ON TestLOB
REBUILD
WITH ( ONLINE = ON )
GO
Neste script, criamos um banco de dados chamado TestDB e uma tabela chamada TestLOB. A tabela possui um índice clusterizado de chave primária chamado PK_TESTLOB. Em seguida, inserimos alguns dados de exemplo na tabela. Por fim, tentamos reconstruir o índice online usando a instrução ALTER INDEX.
No entanto, como a coluna FULLNAME na tabela TestLOB é do tipo VARCHAR(MAX), que é considerado um tipo lob, a operação de reconstrução online do índice falhará. A mensagem de erro mencionada anteriormente será exibida.
É importante consultar a página Books Online para a instrução ALTER INDEX para entender as circunstâncias específicas em que uma reconstrução online de índices pode falhar.
Em conclusão, à medida que o volume de dados em seus bancos de dados do SQL Server aumenta, o tempo necessário para tarefas de manutenção, como restaurações e reconstruções de índices, também aumenta. É crucial monitorar esses tempos de manutenção e garantir que eles não excedam os SLAs estabelecidos para sua organização. A reconstrução online de índices pode ser uma ferramenta valiosa para manter os compromissos de SLA, mas é importante estar ciente dos critérios e limitações associados a ela.