Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

[Administração] Instant File Initialization

Quando atribuimos a permissão de Perform Volume Maintenance Tasks para a conta que inicia o serviço do SQL Server (em Local Security Policies do Windows), permitimos que o SQL Server aloque espaço para arquivos de dados quase que instantaneamente; esse recurso é conhecido por “Instant File Initialization” (IFI).

Na prática isso facilita muito o processo de criação ou crescimento de arquivos de dados, restauração de backups, etc; mas o IFI não tem efeito em arquivos de log.

Muitos cliente perguntam o motivo do IFI tornar o processo de alocação de espaço tão rápido e o motivo é que, por padrão, quando o SQL Server precisa alocar espaço para um arquivo, ele preenche o novo espaço com zeros. Quanto maior é a alocação de espaço, mais zeros o SQL Server tem que escrever, portanto, maior a espera. Quando o IFI está habilitado o SQL Server não preenche o novo espaço com zeros e assim o processo é concluído quase que instantaneamente.

Para visualizar o comportamento do IFI podemos utilizar um pequeno disco e criar nele um grande arquivo .txt com algum conteúdo; no meu cenário, criei um arquivo com a frase “O Rato Roeu a Roupa do Rei de Roma” inúmeras vezes. Em seguida podemos apagar o .txt (ou movimenta-lo para outro disco).

Usando um editor hexadecimal, se verificarmos o conteúdo do disco veremos que apesar de termos apagado o arquivo .txt, o conteúdo do arquivo ainda está gravado lá:

Agora com o Instant File Initialization habilitado, criamos um banco SQL Server nesse disco; depois disso se abrirmos o editor hexadecimal e analisarmos o conteúdo dos datafiles veremos (para espanto de muitos) que o novo .mdf parece estar preenchido com milhares de “O Rato Roeu a Roupa do Rei de Roma“. Como o IFI estava habilitado o SQL Server não teve o trabalho extra de preencher o espaço alocado com zeros para o novo .mdf, portanto os dados do antigo .txt não foram sobrescritos. Conforme o SQL Server começar a receber novos dados nesse banco, os dados antigos serão sobrescritos.

Se repetirmos o mesmo teste com o IFI desabilitado, veremos que a criação do banco demora mais e no editor hexadecimal veremos que o SQL Server preencheu com zeros o novo espaço alocado:

Pontos adicionais

  • Após conceder a permissão Perform Volume Maintenance Tasks é necessário reiniciar o serviço do SQL Server;
  • Para instâncias clusterizadas é preciso conceder essa permissão em todos os nós;
  • No SQL Server 2016 é possível conceder essa permissão durante o setup:

Referências adicionais

Database Instant File Initialization: https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization

SetFileValidData function: https://msdn.microsoft.com/en-us/library/aa365544(VS.85).aspx

Silas

The code and techniques described in this blog are presented to the reader ‘as is’, without any warranty, whether express or implied, of its accuracy, completeness, fitness for a particular purpose, title or non-infringement, and none of the third-party products or information mentioned in the work are authored, recommended, supported or guaranteed by any of the authors or Microsoft. Further, the authors shall not be liable for any damages you may sustain by using this information, whether direct, indirect, special, incidental or consequential, even if it has been advised of the possibility of such damages. Your use of the information contained in these pages, is at your sole risk.

Share the post

[Administração] Instant File Initialization

×

Subscribe to Msdn Blogs | Get The Latest Information, Insights, Announcements, And News From Microsoft Experts And Developers In The Msdn Blogs.

Get updates delivered right to your inbox!

Thank you for your subscription

×