terça-feira, 27 de setembro de 2011

Habilitando 'Instant File Initialization' em um servidor SQL Server 2005/2008

Talvez já tenham percebido o tempo que normalmente o SQL Server demora ao criar um banco, alterar seu tamanho ou restaurar uma base.
Hoje, ao ter que restaurar uma base de 560 GB, recordei que demoraria um pouco até começar a receber as mensagens de progresso da minha tarefa. Sabem porque? Os arquivos tem que ser inicializados (preenchidos com 'zeros').

Então me lembrei de um recurso, que ainda não tinha usado: 'Instant File Initialization', que permite que esses arquivos sejam instantaneamente criados sem a necessidade de preencher o mesmo com zeros. Isso trata-se de um privilégio de sistema operacional, não exatamente do SQL Server.
Para ativar esse recurso, você terá que atribuí-lo à conta de serviço que foi utilizada para executar a sua instância do SQL Server. Sempre é recomendado que seja uma conta com o mínimo possível de privilégios. Mesmo sabendo que o Administrador da máquina já tem esse direito, essa não é a conta mais adequada para executar os serviços relacionados ao SQL Server (nem qualquer outro!).

Um pequeno passo-a-passo:
  • Abra o console de Diretivas de Seguraça Local (Local Security Policy)
  • Em Security Settings, Local Policies, User Rights Assignment, selecione Perform Volume Maintenance Tasks
  • Abra o diálogo com um duplo clique e adicione a conta de serviço do SQL Server e clique OK
  • Feche o console
  • Reinicie sua instância do SQL Server
Bom, o resultado é que meu restore, de 560 GB, levou apenas 52 minutos e eu achei muito bom!

Para quem quiser saber mais, seguem uns bons links a seguir :

How and Why to Enable Instant File Initialization (SQL Server Premier Field Engineer Blog)
Database File Initialization (BOL)
Misconceptions around instant file initialization (Paul S. Randal)
Instant Initialization - What, Why and How? (Kimberly L. Tripp) - Nesse tem umas métricas interessantes

Nenhum comentário: