Neste post, apresento como aumentar o tamanho inicial do tempdb.
Mas porque aumentar o tamanho inicial? O tamanho já não é autoincremental?
Sim, o tempdb é autoincremental e aumentar automaticamente o seu tamanho conforme a necessidade de uso do SQL Server. Porém, isso toma transações que o SQL Server solicita para incrementar o tamanho. Deixar um tamanho fixo grande suficiente para que possamos trabalhar com as bases diminui instruções desnecessárias do SGBD durante tempo de execução.
Além do mais, devemos garantir que o servidor de banco de dados tenha espaço suficiente para crescer. Então, este é o primeiro item a observar: garanta que seu HD ou SSD tenha espaço suficiente para que o SQL Server possa usufruir das gravações e leitura de dados. Espaço livre de 4Gb no HD, por exemplo, vai comprometer consideravelmente a performance do SQL Server. Garanta ao menos uns 70Gb de espaço. Isso estou considerando que você esteja com uma base de produção de uns 20 - 50Gb. Se for maior, vai precisar de mais espaço livre.
Sobre o tempdb, a medida que o uso de tabelas temporárias cresce em uma consulta, a base vai inflar. Eu recomendo fortemente o uso de tabelas temporárias na sua aplicação, o ganho de performance é grande. Estarei tratando deste assunto em outro post.
Observe o tamanho físico dos arquivos relacionados com o tempdb antes e depois da geração de tabelas temporárias na figura 1.
Figura 1 - Tamanho físico do tempdb antes e depois da geração de temporárias
O mesmo crescimento dá pra ver pelas propriedades do tempdb (figura 2).
Figura 2 - Propriedades do tempdb: tamanho total após geração das tabelas temporárias
As figuras 3 e 4 demonstro como aumentar o tamanho inicial de 3Mb para 2Gb para o MDF e para 500Mb o LDF. Isto é feito nas propriedades do tempdb. Uma regra apropriada para o tamanho inicial é deixar cerca de 10% do tamanho de sua base de produção. Logo, se sua base principal tem 20Gb, setar 2Gb para o tempdb poupa instruções de crescimento e suas consultas podem ser mais saudáveis durante a execução.
Figura 3 - Tamanho inicial do tempdb (apenas 3Mb)
Figura 4 - Tamanho melhor ajustado para trabalhar com tabelas temporárias em uma base de 20Gb
Abaixo, estou relacionando um código SQL que escrevi para usar tabelas temporárias preenchendo com dados de movimentos de tecidos. Já usei um código parecido anteriormente para demonstrar criação de índices, mas aqui faço o uso de tabelas temporárias exatamente para demonstrar o crescimento do tempdb, do qual gerei a imagens acima.
O código, além de demonstrar o crescimento do tempdb pode servir para ilustrar o uso das tabelas temporárias para suas futuras implementações de consulta. Minha dica é que faça o uso deste recurso, típico do SQL Server. As tabelas temporárias podem melhorar performance muitas vezes no lugar de views e functions.
-- Criação explícita da tabela temporária
CREATE TABLE #Tmp_Swd_Est_Tec
(
Id_EstTec int NOT NULL,
Codigo_Barra varchar(13) NULL,
CodTec varchar(10) NULL,
Comprimento Decimal(16,4) NULL,
CONSTRAINT PK_Swd_Est_Tec PRIMARY KEY (Id_EstTec)
)
-- Vamos popular com 5000000 tecidos no estoque com comprimentos randômicos até 100m
Declare @j int = 1, @Comp Decimal(16,4), @CodTec varchar(10)
While (@j <= 5000000)
Begin
select @Comp = Round(rand()*100, 3)
select @CodTec = 'TEC'+Right('00000'+Cast(Round((rand()*1000)/2, 0) as varchar),5)
insert into #Tmp_Swd_Est_Tec(Id_EstTec, Codigo_Barra, CodTec, Comprimento)
Values (@j, Right('0000000000'+Cast(@j as varchar),10), @CodTec, @Comp)
set @j = @j + 1
End
-- Demonstra dados gerados
Select * from #Tmp_Swd_Est_Tec
Comentários
Postar um comentário