Inicialização imediata de arquivo do banco de dados

Aplica-se a: SQL Server (todas as versões com suporte)

Neste artigo, você aprende sobre a inicialização instantânea de arquivo e como habilitá-la para acelerar o crescimento de seus arquivos de banco de dados do SQL Server.

Por padrão, arquivos de dados e de log são inicializados para substituir todos os dados existentes que foram deixados no disco por arquivos excluídos anteriormente. Os arquivos de dados e de log são inicializados pela primeira vez ao anular os arquivos (preenchimento com zeros) quando você executa as seguintes operações:

  • Criar um banco de dados.
  • Adicionar dados ou arquivos de log a um banco de dados existente.
  • Aumentar o tamanho de um arquivo existente (inclusive operações de aumento automático).
  • Restaurar um banco de dados ou grupo de arquivos.

Em SQL Server, somente para arquivos de dados, a IFI (inicialização de arquivo instantâneo) permite a execução mais rápida das operações de arquivo mencionadas anteriormente, pois recupera o espaço em disco usado sem preencher esse espaço com zeros. Em vez disso, o conteúdo do disco é substituído à medida que novos dados são gravados nos arquivos. Arquivos de log não podem ser inicializados de imediato.

Habilitar a inicialização instantânea de arquivo

A inicialização de arquivo instantâneo só estará disponível se a conta de inicialização do serviço SQL Server tiver sido concedida SE_MANAGE_VOLUME_NAME. Os membros do grupo administrador do Windows têm esse direito e podem atribuí-lo a outros usuários adicionando-os à política de segurança Executar tarefas de manutenção de volume .

Importante

O uso de alguns recursos, como o TDE (Transparent Data Encryption), pode impedir a Inicialização Instantânea de Arquivo.

Observação

A partir do SQL Server 2016 (13.x), essa permissão pode ser concedida à conta de serviço no momento da instalação, durante a instalação.

Se estiver usando a instalação do prompt de comando, adicione o argumento /SQLSVCINSTANTFILEINIT ou marque a caixa Conceder privilégio Realizar Tarefa de Manutenção de Volume para o Serviço de Mecanismo de Banco de Dados do SQL Server no assistente de instalação.

Para conceder a permissão Perform volume maintenance tasks a uma conta:

  1. No computador em que o arquivo de dados será criado, abra o aplicativo Política de Segurança Local (secpol.msc).

  2. No painel esquerdo, expanda Políticas Locaise, em seguida, clique em Atribuição de Direitos de Usuário.

  3. No painel direito, clique duas vezes em Executar tarefas de manutenção de volume.

  4. Clique em Adicionar usuário ou grupo e adicione a conta que executa o serviço SQL Server.

  5. Clique em Aplicare feche todas as caixas de diálogo Política de Segurança Local .

  6. Reinicie o serviço SQL Server.

  7. Verifique o log de erros SQL Server na inicialização.

    Aplica-se a: SQL Server (começando com SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 e SQL Server 2016 (13.x) e posteriores).

    1. Se a conta de inicialização do serviço SQL Server for concedida SE_MANAGE_VOLUME_NAME, uma mensagem informativa semelhante à seguinte será registrada:

      Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    2. Se a conta de inicialização do serviço SQL Server não tiver sido concedida SE_MANAGE_VOLUME_NAME, uma mensagem informativa semelhante à seguinte será registrada:

      Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    Observação

    Use também a coluna instant_file_initialization_enabled na DMV sys.dm_server_services para identificar se a inicialização instantânea de arquivo está habilitada.

Considerações de segurança

É recomendável habilitar a inicialização instantânea de arquivo, pois os benefícios podem superar o risco à segurança.

Ao usar a inicialização instantânea de arquivo, o conteúdo de disco excluído será substituído apenas à medida que novos dados forem gravados nos arquivos. Por esse motivo, o conteúdo excluído poderá ser acessado por uma entidade de segurança não autorizada, até que outros dados sejam gravados naquela área específica do arquivo de dados.

Embora o arquivo de banco de dados esteja associado à instância do SQL Server, esse risco de divulgação de informações é reduzido pela DACL (lista de controle de acesso discricionário) no arquivo. Essa DACL permite acesso de arquivo somente à conta de serviço do SQL Server e ao administrador local. Porém, quando o arquivo é desassociado, ele pode ser acessado por um usuário ou serviço que não tenha SE_MANAGE_VOLUME_NAME.

Há considerações semelhantes quando:

  • É feito backup do banco de dados. Se o arquivo de backup não estiver protegido com uma DACL adequada, o conteúdo excluído poderá ficar disponível para um usuário ou um serviço não autorizado.

  • Um arquivo é expandido usando a IFI. Um administrador do SQL Server pode, potencialmente, acessar o conteúdo da página bruta e ver o conteúdo excluído anteriormente.

  • Os arquivos do banco de dados são hospedados em uma rede de área de armazenamento. Também é possível que a rede de área de armazenamento apresente sempre novas páginas como pré-inicializadas e fazer com que o sistema operacional reinicialize as páginas poderá gerar uma sobrecarga desnecessária.

Se houver preocupação com a possível divulgação do conteúdo excluído, você deverá executar uma das seguintes ações ou ambas:

  • Sempre se certifique de que todos os arquivos de dados desassociados e arquivos de backup tenham DACL restritivas.

  • Desabilite a inicialização de arquivo instantâneo para a instância do SQL Server. Para fazer isso, revogue SE_MANAGE_VOLUME_NAME da conta de inicialização do serviço SQL Server.

    Observação

    A desabilitação aumentará os tempos de alocação para arquivos de dados e afetará apenas os arquivos criados ou aumentados de tamanho depois que o direito do usuário for revogado.

Direito do usuário SE_MANAGE_VOLUME_NAME

O privilégio do usuário SE_MANAGE_VOLUME_NAME pode ser atribuído nas Ferramentas Administrativas do Windows, miniaplicativo de Política de Segurança Local. Em Políticas Locais, selecione Atribuição de Direito do Usuário e modifique a propriedade Executar tarefas de manutenção de volume.

Considerações sobre o desempenho

O processo de inicialização do arquivo de banco de dados grava zeros nas novas regiões do arquivo em inicialização. A duração desse processo depende do tamanho da parte do arquivo inicializada e do tempo de resposta e capacidade do sistema de armazenamento. Se a inicialização demorar muito tempo, as mensagens a seguir poderão ser registradas no log de erros do SQL Server e no Log do Aplicativo.

Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds.  Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds.  Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.

O longo aumento automático de um banco de dados e/ou de um arquivo de log de transações poderá causar problemas de desempenho de consulta. Isso ocorre porque uma operação que requer o aumento automático de um arquivo será mantida com recursos do tipo bloqueio ou trava durante a operação de aumento do arquivo. Podem ocorrer longas esperas nas travas para as páginas de alocação. A operação que requer o crescimento automático longo mostrará um tipo de espera de PREEMPTIVE_OS_WRITEFILEGATHER.

Consulte Também

CREATE DATABASE (SQL Server Transact-SQL)