Published on

February 17, 2020

Aumentando o Tempo de Manutenção no SQL Server

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.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.